1. TOPTOP
  2. Webサービス
  3. Twitter

Twitter APIで呼び出したつぶやき(スクリーンネーム・日時・本文)をデータベース(MySQL)に格納するときのPHPコード

|

Twitter_logo_blue

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
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 "関連したつぶやきがありません。";
 }
 
 ?>

結果

自分のつぶやきを取得して、データベースに挿入した結果です。1枚目の画像は、挿入したデータの内容で、下の2枚の画像は、元のつぶやきです。

tweet_db_insert1

tweet_db_insert2

tweet_db_insert3

気を付けた点

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のデータをためていくので、「データ更新」は必要ないと思われますが、「データ削除」の作業は必要となってくるでしょう。それは時間があるときにでも、おいおいということで。

〔参考サイト〕