KUNISAN.JPブログ - 1136 / 1692 ページ

新規書き込み

Twitter API + PHP + MySQLの連携

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2010年4月11日
Twitter API + PHP + MySQLの連携※(2010/4/11追記)PHPプログラムはページ下部のコメント欄をご参照ください。

先日、本サイトに「管理者のつぶやき」というページを設置して、私のTwitter(ツイッター)の書き込みをリアルタイムで表示するようにしてみました。ただ、Twtter APIを用いた簡易的なブログラムなので、「管理者のつぶやき」を見るより、直接Twitterの私のページを見た方が早いという話もありました。

しかし、本家Twitterについても、検索機能はあまり充実していると言えません。基本的に日本語検索が不完全なことに加え、「何日から何日までのつぶやき」というような、書き込み日時による抽出も不可能です。過去のつぶやきを見るには、画面下にある「もっと読む」ボタンを何回か押さないといけません。せっかく自分で書き込んだ内容なので、日記やブログのように読み返せると便利なのに、と思うことも多々ありました。

そのようなことから、Twitterの書き込みを日付とワードの両方で検索できるシステムを自前で作ることにしました。本ページ左の「管理者のつぶやき」をクリックすると、最新のつぶやきに加えて、新たに設置した抽出機能もチェックできます。

原理としては、KUNISAN.JP内のあるページを開くことで、Twitterに書き込んだ内容をMySQLに書き込むプログラム(PHPで作成)が動作するようになっています。検索機能はTwitter APIではなく、このMySQLの方からデータを抽出する形になっているため、より柔軟なデータ抽出が可能となっています。

とは言うものの、ブログに比べて各書き込みの情報量が少ないので、どれだけ利用価値があるのかは定かではありません。ただ、私としては過去の書き込みにアクセスしやすくなったということで、Twitterの利用価値がますます上がったように感じています。





Web管理関連記事(リンク一覧): SPF、DKIM、DMARCの設定とネームサーバー(DNS)設定のトラブル / さくらレンタルサーバーのアクセス履歴をPHPで表示 / PHPで画像のアップロード(さくらレンタルサーバーのPHPでImageMagick) / KUNISAN.JPサイトのメンテナンス(2018) / Webサーバー引っ越し(さくらインターネット スタンダード)とHTTPS(常時SSL)化 / ...(記事連続表示)

関連カテゴリー: Web管理関連記事, PHP関連記事

Twitterの本
Twitterの本 をAmazon.co.jpでチェック
コメント:Twitter API + PHP + MySQLの連携
名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2010年4月11日
Twitter APIのデータをMySQLに渡すプログラムとMySQLのデータを抽出・表示するプログラムを公開します(どちらもPHP)。

予め「TWITTER」テーブルを作成し、「NAME(text)」「COMMENT(text)」「TIME(int)」の3つのフィールドを用意しておきます。その後、下記プログラムのデータベース接続用の変数と、Twitter APIリクエスト部分の"kunihisa_ogawa"を変更すれば、そのまま使えると思います。

※プログラムは個人使用に限り自由にご利用いただいて結構ですが、動作確認等すべて自己責任でお願いします。当方では一切のサポートを行っていません。
※プログラムの無断配布、転載等はご遠慮ください。当ページへのリンクはご自由にどうぞ。
※当サイトで動作しているものと、一部中身が異なります。

■■■■ Twitter APIからMySQLへデータ追加 ■■■■
//エンコード設定
mb_language("ja");
mb_internal_encoding("SJIS");
mb_regex_encoding("SJIS");

//データベースオープン
//変数設定
$dbserver = 'localhost';
$dbuser = 'XXXXXXXX';
$dbpassword = 'XXXXXXXX';
$dbname = 'XXXXXXXX';

//MySQLに接続する
$con = mysql_connect($dbserver,$dbuser,$dbpassword);

//データベースを選択
$selectdb = mysql_select_db($dbname);

//Twitter APIに接続
$contents = file_get_contents('http://search.twitter.com/search.atom?q=from:kunihisa_ogawa&rpp=100');

//XMLをオブジェクトに変換
$xml = simplexml_load_string($contents);

//ループ処理
for ($i = 0; $i < 100; $i++ ) {

//書き込み人の取得
$author_name = $xml->entry[$i]->author->name;

//書き込み人のユーザー名のみ取得
//$author_link = $xml->entry[$i]->author->uri;
$author_id = mb_split('\(',$author_name);
$id = mb_ereg_replace(' ','',$author_id[0]);

//本文の取得
$bunsho = $xml->entry[$i]->title;
$bunsho = mb_convert_encoding($bunsho,"SJIS","UTF-8");

//本文をUTF-8に変換
$utf8_comment = mb_convert_encoding($bunsho,"UTF-8","SJIS");

//ダブルクオーテーションを参照文字に変換
$utf8_comment = mb_eregi_replace("\"",'"',$utf8_comment);

//時間をUNIX形式に変更
$unixtime = strtotime($pdate);

//DBデータを抽出(ダブりの有無)
$sql = 'SELECT * FROM TWITTER WHERE TIME = '.$unixtime;

//DB結果を取得
$data = mysql_query($sql);

//ダブり用変数のリセット
$dub = '';

//DB結果セットの表示
while ($sd = mysql_fetch_array ($data)) {

//COMMENTがあれば取得(つまりダブり)
$dub = $sd[COMMENT];

}

//ダブりがなく、かつ$unixtimeが0より大きければレコード追加の処理
if (($dub == '')&&($unixtime > 0)){

//テーブルにレコードを追加する
$sql = 'INSERT INTO TWITTER
(NAME,COMMENT,TIME)
VALUES
("'.$id.'","'.$utf8_comment.'","'.$unixtime.'")';
if (mysql_query($sql)) {
//print 'レコード追加成功<br>';
} else {
//print 'レコード追加失敗<br>';
}

}
■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■ MySQLのデータを抽出して表示する ■■■■■
//エンコード設定
mb_language("ja");
mb_internal_encoding("SJIS");
mb_regex_encoding("SJIS");

//データベースオープン
//変数設定
$dbserver = 'localhost';
$dbuser = 'XXXXXXXX';
$dbpassword = 'XXXXXXXX';
$dbname = 'XXXXXXXX';

//MySQLに接続する
$con = mysql_connect($dbserver,$dbuser,$dbpassword);

//データベースを選択
$selectdb = mysql_select_db($dbname);

//何日前からのデータを取得するか?(デフォルト値)
$term = 30;

//日付1の取得(いつから)
$date1 = $_GET[DATE1];
if ($date1 == '') {
$date1 = date('Y/m/d',(time() - (86400 * $term))); //デフォルト値設定
}

//日付2の取得(いつまで)
$date2 = $_GET[DATE2];
if ($date2 == '') {
$date2 = date('Y/m/d',time()); //デフォルトは今に設定
}

//サーチワードの取得
$searchword = $_GET[WORD];
$hyojiword = mb_convert_encoding($searchword,'SJIS','UTF-8');

//表示件数の取得
$hyoji = $_GET[HYOJI];
if ($hyoji == '') {
$hyoji = 30;
}

//最大1000件まで表示
if ($hyoji > 1000) {
$hyoji = 1000;
}

//フォーム表示
print '
<form method="get" action="twitter_kunisan_jp.php">
<b>日付:</b> <input type="text" name="DATE1" value="'.$date1.'" style="width: 85px;">~<input type="text" name="DATE2" value="'.$date2.'" style="width: 85px;"> 
<b>検索ワード:</b> <input type="text" name="WORD" value="'.$hyojiword.'"> 
<b>表示件数:</b> <input type="text" name="HYOJI" value="'.$hyoji.'" style="width: 45px;"><br>
<button type="submit" value="">つぶやき抽出</button>
</form>
';

//サーチワード指定があれば、サーチワードでも抽出をかける
if ($searchword != '') {
$filtersql = 'AND COMMENT LIKE \'%'.$searchword.'%\'';
}

//SQL指定
$sql = 'SELECT * FROM TWITTER WHERE TIME >= '.strtotime($date1).' AND TIME <= '.(strtotime($date2) + 86399).' '.$filtersql.' ORDER BY TIME DESC LIMIT '.$hyoji;

//DB結果を取得
$data = mysql_query($sql);

//データ件数リセット
$ndata = 0;

//DB結果セットの表示
while ($sd = mysql_fetch_array ($data)) {

//書き込み人のユーザー名取得
$id = $sd[NAME];

//本文の取得
$bunsho = $sd[COMMENT];
$bunsho = mb_convert_encoding($bunsho,"SJIS","UTF-8");

//URLをリンクに変換
$bunsho = mb_eregi_replace("(https?:\/\/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)",'<a href="\\1"'.$target.'>\\1</a>',$bunsho);

//書き込み日の取得
$pdate2 = date('Y/m/d H:i:s',$sd[TIME]);

//コメント表示
print '<p><b>'.$id.'</b>: '.$bunsho.' ('.$pdate2.')</p>';

//データ件数カウント
$ndata = $ndata + 1;

}

//検索結果がない場合
if ($ndata == 0) {
print '<p>指定された検索ワードのつぶやきはありませんでした。</p>';
}
■■■■■■■■■■■■■■■■■■■■■■■■■■
コメント:Twitter API + PHP + MySQLの連携
名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2013年6月23日
2013年6月12日以降、Twitter API 1.0が使用できなくなったことにより、上記のTwitter APIからデータを取得するプログラムも動作しなくなりました。