PHPとMySQLを使ってTwitter APIで取得したツイートの追加と削除を繰り返す(その3~データ追加のためのプログラミング)

目次
今回は、ツィートの追加と削除を繰り返すために、追加のプログラムを実際に作成します。前回の記事(新しいタブで開く)はこちらまで。
テーブルの構造
プログラミングをする前に、データベースをにツイートを挿入するための、テーブルを用意しておきましょう。
自分のつぶやきで、ステータスIDの桁数を数えたら、18桁ありました。将来、何桁になるのか見当がつきませんので、tw_idはText型にしておきます。
create table tweet ( id int(11) not null auto_increment primary key, tw_id text, tw_screen varchar(16), tw_date varchar(25), tw_txt text );
1回目のツイートを100件追加
プログラムの内容
最初、データベースには何も入っていません。1回目のツイート追加のプログラムは、次のような流れになります。
- twitteroauthライブラリを読みこむTwitterOAuthでインスタンス化する
- OAuthRequestメソッドを使って、user_timeline.jsonのエンドポイントにアクセスする
- ユーザータイムラインの引数(array)を設定するPDOクラスでデータベースに接続する
- ステータスID、スクリーンネーム、ツイート日時、ツイート本文をデータベースに挿入する
- 格納したツイートの中で、最大のステータスIDを抽出する
- 文字列型のステータスIDを数値型に変換する
実際のプログラム
実際にプログラミングをすると、こんな感じ
<?php // twitteroauthライブラリ require_once("twitteroauth/twitteroauth.php"); $consumerKey = "MYCONSUMERKEY"; $consumerSecret = "MYCONSUMERSECRET"; $accessToken = "MYACCESSTOKEN"; $accessTokenSecret = "MYACCESSTOKENSECRET"; // TwitterOAuthでインスタンス化する $twObj = new TwitterOAuth($consumerKey,$consumerSecret,$accessToken,$accessTokenSecret); // user_timeline.jsonのエンドポイントにアクセス // 引数(array)を設定 $request = $twObj->OAuthRequest('https://api.twitter.com/1.1/statuses/user_timeline.json','GET', array( 'count'=>'100', 'screen_name' => 'echizenya_yota', )); $results = json_decode($request); if(isset($results) && empty($results->errors)){ foreach($results as $tweet){ // PDOクラスによるデータベース接続 try { $dbh = new PDO('mysql:host=localhost;dbname=tweet1;charset=utf8', 'myusername','mypassword'); } catch(PDOException $e) { var_dump($e->getMessage()); exit; } // ステータスID、スクリーンネーム、ツイート日時、ツイート本文の挿入 $stmt = $dbh->prepare("insert into tweet (tw_id, tw_screen, tw_date, tw_txt) values (:tw_id, :tw_screen, :tw_date, :tw_txt)"); $stmt->bindParam(":tw_id", $tw_id); $stmt->bindParam(":tw_screen", $tw_screen); $stmt->bindParam(":tw_date", $tw_date); $stmt->bindParam(":tw_txt", $tw_txt); $tw_id = $tweet->id; $tw_screen = $tweet->user->screen_name; $tw_date = date('Y-m-d H:i:s', strtotime($tweet->created_at)); $tw_txt = $tweet->text; $stmt->execute(); // 最大のステータスIDの番号を取得する $sql = "select * from tweet where tw_id >= all (select tw_id from tweet)"; $stmt2 = $dbh->query($sql); $statusid_str = $stmt2->fetchColumn(1); $stmt2->execute(); $dbh = null; } }else{ echo "関連したつぶやきがありません。"; } // 文字列型のステータスIDを数値型に変換 $statusid = intval($statusid_str); ?>
2回目のツイートを100件追加
1回目のツイート追加と2回目のツイート追加で、異なるところは、ユーザータイムラインの引数設定(array)です。
1回目の引数
array( 'count'=>'100', 'screen_name' => 'echizenya_yota', ));
2回目の引数
array( 'count'=>'100', 'screen_name' => 'echizenya_yota', 'since_id' => '$statusid' ));
since_idとは、指定したステータスIDより大きい(より最近の)オブジェクトを返すための引数です。その値として、1回目で取得した最大のステータスIDを代入します。
if文を使う
従って、1回目のデータ取得なのか、2回目以降のデータ取得なのかを、if文で条件判定します。
そのプログラムは、こんな感じになるでしょう。
if(1回目のデータ取得) { $request = $twObj->OAuthRequest('https://api.twitter.com/1.1/statuses/user_timeline.json','GET', array( 'count'=>'20', 'screen_name' => 'echizenya_yota', )); } else { $request = $twObj->OAuthRequest('https://api.twitter.com/1.1/statuses/user_timeline.json','GET', array( 'count'=>'20', 'screen_name' => 'echizenya_yota', 'since_id' => '$statusid' )); }
条件判定文は分かりません
ただし、if文の中で使っている(1回目のデータ取得)というのは、どう書くか分かりません。時間を費やして調べましたが、どうしても分からないので、詳しい人からオフラインで聞くことにします。
次回(新しいタブで開く)は、ツィートの削除とプログラムの定期実行について説明します。
〔参考サイト〕