Twitter API & PHP による Twitter 検索の実行方法を紹介します。検索クエリのカスタマイズ方法から、応用例として、Twitter 検索を組み合わせた自動フォローの方法も紹介します。コードは Twitter API のバージョン 1.1 に対応しています。また、実装を簡単にするため、twitteroauth ライブラリを利用しています。

Twitter 検索の実行方法

コード

<?php
require_once 'lib/twitteroauth.php';

define('CONSUMER_KEY', 'your_consumer_key');
define('CONSUMER_SECRET', 'your_consumer_secret');
define('ACCESS_TOKEN', 'your_access_token');
define('ACCESS_TOKEN_SECRET', 'your_access_token_secret');

function search(array $query)
{
  $toa = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
  return $toa->get('search/tweets', $query);
}

$query = array(
  "q" => "happy birthday",
);
 
$results = search($query);
 
foreach ($results->statuses as $result) {
  echo $result->user->screen_name . ": " . $result->text . "n";
}

実行結果

  $ php search.php
  [fonderlinaz] @bonehatb HAHAHHA happy birthday bone
  [suziejaywill] @JoeyEssex_  can u plz wish my daughter @yasminnlouise a happy 15th birthday for today x x
  [dianndian] Udah kok,, haha  happy birthday ya ta :)) RT @oktathavy: Di delete aja "@dianndian: biasa ta,, ada kenalan di fb minta ketemuan, tapi
  [nastitidwi] RT @ibammargera: Happy birthday @taviash ditunggu ya asupanya haha
  [Runmymind] Happy Birthday to the most beautiful actress in the woooorld:3  #JuliaRoberts
  [aliciaboon] @AlanyaMaisie  happy birthday alanya:D hope you have a good day and see you later! xxx
  [mollybensonx] Happy birthday grandad love you loads xxxxx
  [Sammy_Swales] @ShandyPants_94 Happy Birthday Chris hope u had a great night last night n a great day today x
  [BarrSalihuAhmed] "@sumaiyyaah: Enxx :) @BarrSalihuAhmed: Happy birthday dear, have a blast ! No pun intended @sumaiyyaah"
  [ProudJetsetter] RT @IBeShaunaxo: @ProudJetsetter Happy birthday! Have the best day! (:

twitteroauth ライブラリを利用すれば Twitter 検索は簡単に行うことができます。search 関数に検索パラメータ(詳細は後述)を配列に入れて渡すと、stdClass オブジェクト形式で検索結果が返されます。

上記のサンプルコードは、得られた検索結果に含まれる項目の中から、ユーザ名($result->user->screen_name)とツイート($result->text)を参照して出力しています。この記事のサンプルコードでは、この2項目のみを結果として出力していきますが、検索結果に含まれる他の項目については、https://dev.twitter.com/docs/api/1.1/get/search/tweets を参照してください。

では、例を挙げながら検索クエリのカスタマイズ方法についてみていきましょう。

検索クエリのカスタマイズ方法

基本クエリ

検索クエリは配列を用いて設定します。最低限 q パラメータを指定する必要があります。下記は、"happy birthday" を含むツイートを検索するための検索クエリの例です。

$query = array(
  "q" => "happy birthday",
);

$results = search($query);

foreach ($results->statuses as $result) {
  echo $result->user->screen_name . ": " . $result->text . "n";
}

1 検索結果あたりのツイート数の変更方法

デフォルトでは、1 検索結果あたり 10 ツイートが返されます。返されるツイート数は count パラメータにより最大 100 までに変更可能です。下記は、count = 20 として、1 検索結果あたり 20 ツイートを取得する例です。

$query = array(
  "q" => "happy birthday",
  "count" => 20,
);

最近/人気ツイートの検索方法

検索結果には、mixed (デフォルト)、recentpopular の3つのタイプがあります。デフォルトの mixed パラメータでは、最近/人気の両方のツイートを含んだ結果が返されます。

下記のように recent タイプを指定すれば、"happy birthday" を含む最近のツイートのみを取得することができます。

$query = array(
  "q" => "happy birthday",
  "count" => 20,
  "result_type" => "recent",
);

同様に、popular タイプを指定すれば、人気のツイートのみを取得することができます。

$query = array(
  "q" => "happy birthday",
  "count" => 20,
  "result_type" => "popular",
);

特定言語のツイートを検索する方法

API には、lang パラメータが提供されていて、特定の言語のみを対象にした検索を行うことができます。対象言語は、ISO 639-1 コードにより指定できます(参考: List of ISO 639-1 codes)。下記は、lang = ja パラメータを指定して、日本語のツイートのみを検索する例です。

$query = array(
  "q" => "happy birthday",
  "count" => 20,
  "result_type" => "popular",
  "lang" => "ja",
);

検索結果のページネーション方法

ページネーションは、max_id パラメータを使って行うことができます。このパラメータを指定して、それよりも小さい ID の(つまり古い)ツイートを取得することができます。

下記のサンプルコードは、1 ページあたり 20 ツイートを 5 ページに渡って、新しいツイートから順に取得していき、合計 100 ツイートを取得する例です。

$max_id = "";
foreach (range(1, 5) as $i) { // up to 5 pages
  $query = array(
    "q" => "happy birthday",
    "count" => 20,
    "result_type" => "recent",
    "lang" => "en",
    "max_id" => $max_id,
  );

  $results = search($query);
  foreach ($results->statuses as $result) {
    echo "[" . $result->user->screen_name . "] " . $result->text . "n";
    $max_id = $result->id_str; // Set max_id for the next search page
  }
}

応用例:検索して自動フォロー

最後に、特定の言葉を使ってツイートしたユーザを検索し、マッチしたユーザをフォローするサンプルコードを紹介します。

下記は、"happy birthday" を含むツイートを行った最近の 20 ユーザを検索し、自動フォローするコードです。

<?php
require_once 'lib/twitteroauth.php';

define('CONSUMER_KEY', 'your_consumer_key');
define('CONSUMER_SECRET', 'your_consumer_secret');
define('ACCESS_TOKEN', 'your_access_token');
define('ACCESS_TOKEN_SECRET', 'your_access_token_secret');

function search(array $query)
{
  $toa = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
  return $toa->get('search/tweets', $query);
}

function follow($id)
{
  $toa = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
  $toa->post('friendships/create', array('user_id' => $id));
}

$max_id = "";
foreach (range(1, 2) as $i) {
  $query = array(
    "q" => "happy birthday",
    "count" => 10,
    "result_type" => "recent",
    "lang" => "en",
    "max_id" => $max_id,
  );

  $results = search($query);
  foreach ($results->statuses as $result) {
    follow($result->user->id);
    $max_id = $result->id_str;
  }
}