今回は、ツィートの追加と削除を繰り返すために、追加のプログラムを実際に作成します。前回の記事はこちらまで。
テーブルの構造
プログラミングをする前に、データベースをにツイートを挿入するための、テーブルを用意しておきましょう。
自分のつぶやきで、ステータス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]
<?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);
?>
[/php]
2回目のツイートを100件追加
1回目のツイート追加と2回目のツイート追加で、異なるところは、ユーザータイムラインの引数設定(array)です。
1回目の引数
[php]
array(
‘count’=>’100’,
‘screen_name’ => ‘echizenya_yota’,
));
[/php]
2回目の引数
[php]
array(
‘count’=>’100’,
‘screen_name’ => ‘echizenya_yota’,
‘since_id’ => ‘$statusid’
));
[/php]
since_idとは、指定したステータスIDより大きい(より最近の)オブジェクトを返すための引数です。その値として、1回目で取得した最大のステータスIDを代入します。
if文を使う
従って、1回目のデータ取得なのか、2回目以降のデータ取得なのかを、if文で条件判定します。
そのプログラムは、こんな感じになるでしょう。
[php]
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’
));
}
[/php]
条件判定文は分かりません
ただし、if文の中で使っている(1回目のデータ取得)というのは、どう書くか分かりません。時間を費やして調べましたが、どうしても分からないので、詳しい人からオフラインで聞くことにします。
次回は、ツィートの削除とプログラムの定期実行について説明します。
〔参考サイト〕