Twitter APIでおもしろいつぶやきを集めて、アクセス数を稼ごうとと思っても、おのずと限界があります。なぜならTwitter APIにはレート制限が存在し、一定時間内にアクセスできる回数が決まっているからです。
レートリミットに関わらず、アクセスしてもらおうと思うと、自前でデータベースを用意する必要があります。
そこで今回は、Twitter APIのGET statuses/user_timelineで取得したつぶやきデータを、データベース(MySQL)に挿入してみようと思います。
MySQLのクエリ文とPHPのコード
今回は、スクリーンネーム、つぶやき本文、日時を取得します。まずMySQLのテーブルを作成するためのクエリ文です
テーブル作成のためのクエリ文
create table tweet ( id int(11) not null auto_increment primary key, tw_screen varchar(16), tw_date varchar(25), tw_txt text );
PDOクラスを使用したPHPコード
try catch文と、PDOクラスはドットインストールのコードを参考にして、try catch文おります。そのtry catch文を、foreach文で回すという体裁です。
[php]
<?php
require_once("twitteroauth/twitteroauth.php");
$consumerKey = "MYCONSUMERKEY";
$consumerSecret = "MYCONSUMERSECRET";
$accessToken = "MYACCESSTOKEN";
$accessTokenSecret = "MYACCESSTOKENSECRET";
$twObj = new TwitterOAuth($consumerKey,$consumerSecret,$accessToken,$accessTokenSecret);
$request = $twObj->OAuthRequest(‘https://api.twitter.com/1.1/statuses/user_timeline.json’,’GET’,
array(
‘count’=>’10’,
‘screen_name’ => ‘echizenya_yota’,
));
$results = json_decode($request);
if(isset($results) && empty($results->errors)){
foreach($results as $tweet){
// データベースの接続
try {
$dbh = new PDO(‘mysql:host=localhost;dbname=tweet1;charset=utf8’, ‘myusername’,’mypassword’);
} catch(PDOException $e) {
var_dump($e->getMessage());
exit;
}
// 処理
$stmt = $dbh->prepare("insert into tweet (tw_screen, tw_date, tw_txt) values (:tw_screen, :tw_date, :tw_txt)");
$stmt->bindParam(":tw_screen", $tw_screen);
$stmt->bindParam(":tw_date", $tw_date);
$stmt->bindParam(":tw_txt", $tw_txt);
$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();
// 切断
$dbh = null;
}
}else{
echo "関連したつぶやきがありません。";
}
?>
[/php]
結果
自分のつぶやきを取得して、データベースに挿入した結果です。1枚目の画像は、挿入したデータの内容で、下の2枚の画像は、元のつぶやきです。
気を付けた点
Twitter APIでつぶやきを取得するためのコードと、ドットインストールのコードをくっつけただけとはいえ、いくつか気を付けている点があります。
文字コードについて
ドットインストールでデータを挿入するコードは、半角英数文字を挿入することを前提としていれます。日本語のつぶやきを挿入すると、文字化けを起こします。
従って、PHPでPDOの実体化するときには、charsetを”UTF-8″にします。ちなみにPHPのバージョンが5.3.6以前の場合は、Qiitaの記事が参考になります。
データ型について
今回、使用しているカラムは4列で、id以外に、スクリーンネーム(tw_screen)、日付(tw_date)、つぶやき本文(tw_txt)を用意しています。
- tw_screen→スクリーンネームはTwitterの決まりで、@以外に15文字しか使えないので、varchar型で16文字
- tw_date→つぶやきの日付は最終的に日付文字列(date関数)で返すので、varchar型を使う。文字数はてきとう
- tw_txt→Twitterだから140文字と決まっていますが、とりあえず様子見でtext型を使用
まとめ
とりあえず「データを挿入できれば良い」という前提でやっているので、テーブルをつくったときのデータ型については、工夫の余地があると思います。
また、Twitterのデータをためていくので、「データ更新」は必要ないと思われますが、「データ削除」の作業は必要となってくるでしょう。それは時間があるときにでも、おいおいということで。
〔参考サイト〕