####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();
}
}