LoginSignup
77
74

More than 5 years have passed since last update.

TwitterのSearch APIでハッシュタグがあるTweetを取得する

Last updated at Posted at 2015-08-18

1. 必要なオーオースAPI

2. Twitter API

3. 制限

■Oauth APIは下記にダウンロードする。
https://github.com/abraham/twitteroauth

■Twitter API Key
https://apps.twitter.com
にDeveloperプログラムに参加し、取得する。

■制限
①Twitterの制限により、下記の取得方法は一回最大100件しか取得できない
→1分1回走らせる場合、1分100Tweetしか取得できないことになる(101個目から取得不可能)
1分に数回走らせたら?Twitter APIコール数の制限があるので、要注意

②Twitter Search APIを使用しているので、Twitterが検索エンジンにIndexされていないTweetがある。
(あるいは取得できないTweetがある)

③-RTオプテョンでリトイートを取得しないようになるが、ユーザーが「RTしてね」とかのRTが含まれるTweetも取得しなくなる。

④'lang'=>"jp"のオプションはTwitterが判断する(?)日本語のTweetしか取得しない

⑤Search APIはユーザーによらないため、同じハッシュタグで高い頻度で複数のユーザーがTweetされる可能性がある場合、
UserのTimelineからも同時に使用した方が良いかも(しかし、UserのTimelineからだと、
APIにハッシュタグを指定できないため、全Tweet(最新の最大200件?)を取得してから、フィルターする必要がある)

require_once('./path/to/twitteroauth.php');

//twitterAppsで取得
$consumerKey        = CONSUMER_KEY; // https://apps.twitter.com から取得
$consumerSecret     = CONSUMER_SECRET; // https://apps.twitter.com から取得
$accessToken        = ACCESS_TOKEN; // https://apps.twitter.com から取得
$accessTokenSecret  = ACCESS_TOKEN_SECRET; // https://apps.twitter.com から取得

$search_key = "#google -RT"; //検索キーワード, -RTはリトイートを除く

$options = array('q'=>$search_key, 'count'=>'100', 'lang'=>"jp", 'result_type' => 'recent');

$since_id = getMaxID(); //DBから現在の最大TweetIDを取得する処理
if ($since_id){
    $options['since_id'] = $since_id; //前回の最後に取得したツイートIDから
}
$twObj = new TwitterOAuth(
     $consumerKey, 
     $consumerSecret,
     $accessToken,
     $accessTokenSecret);

$json_data = $twObj->get(
    'search/tweets',
    $options
);

$statuses = null;
if ($json_data){
    $statuses = $json_data['statuses']; //ステータス情報取得
}

if ($statuses && is_array($statuses)) {
    $sts_cnt = count($statuses);
    // 一番古いデータからDBへ書き込む
    for ($i = $sts_cnt-1; $i >= 0; $i--) {
        $result = $statuses[$i];
        $has_media = true;
        $screen_name = $result['user']['screen_name'];
        $twitter_id = $result['user']['id_str'];

        //$cnt++;
        $tw_created_date = date('Y-m-d H:i:s', strtotime($result["created_at"]));
        $user_name      = $result['user']['name'];
        $tweet_id       = $result['id_str'];
        $profile_url    = $result['user']['profile_image_url'];
        $tweet_text     = $result['text'];

        $img_src = $short_url = $display_url = "";

        if (isset($result["entities"]['media'])){ //写真等がある場合、取得(ビデオリンクの場合、違う方法で取得可能)
            // 最初のメディアのみを取得する(全部取得できるように修正を)
            $img_src        = $result["entities"]['media'][0]['media_url'];
            $short_url      = $result["entities"]['media'][0]['url'];
            $display_url    = $result["entities"]['media'][0]['display_url'];
        }

        // DBへデータを書き込む処理
        writeToDatabase();
    }
}
77
74
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
77
74