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

php

今回は、ツィートの追加と削除を繰り返すために、追加のプログラムを実際に作成します。前回の記事はこちらまで。

目次

テーブルの構造

プログラミングをする前に、データベースをにツイートを挿入するための、テーブルを用意しておきましょう。

自分のつぶやきで、ステータス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回目のデータ取得)というのは、どう書くか分かりません。時間を費やして調べましたが、どうしても分からないので、詳しい人からオフラインで聞くことにします。

次回は、ツィートの削除とプログラムの定期実行について説明します。

〔参考サイト〕

php

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次