PHPでTwitterを表示する
「WebDesign」という見出しを作ってしまったので、何かそれらしい記事も書いておかねば。
ということで、表紙ページで使っている、Twitterのタイムラインの表示方法をメモってみます。デザインじゃないけれどw
このブログはWordPressを利用しているので、PHPで表示します。
結論からいうと、WordPressの場合は、下のコードを functions.php に加え、テンプレートに、「<?php my_tweet_load(Twitterで使ってる名前、表示したいツィート数); ?>」を記入するだけ。
うちの場合だと、<?php my_tweet_load(‘overQrevo’, 2); ?>
PHPの関数なので、WordPressじゃなくても、PHPが使えれば機能しますが、30行目のhuman_time_diff()だけはWordPress固有なので、ちがうものにする必要あり。ふつうにdate()とか。
(functions.phpというのは、WordPressの管理画面で、「外観→テーマ編集→テーマのための関数」。)
(そういえば、PHPの関数ってcamelにするんだっけ。まあいいや)
// My Twitter
function my_tweet_load($name,$count) {
$url = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=$name&count=$count&include_rts=true";
$json = file_get_contents($url,true);
if ($json == false) {
echo "★Twitterのサーバはクジラ状態です★";
return;
}
$decode = json_decode($json, true);
$img = $decode[0]['user']['profile_image_url'];
$user_name = $decode[0]['user']['name'];
foreach($decode as $val){
$text = $val['text'];
$pattern[0] = '/(https?:\/\/[a-zA-Z0-9\.\/~_]+)/'; // URL
$replace[0] = "<br /><a href='\\1'>\\1</a>";
$pattern[1] = '/(\s|^)@([a-zA-Z0-9\.\/~\-_]+)\b/'; // @reply
$replace[1] = "@<a class='reply_name' href='http://twitter.com/\\2'>\\2</a> ";
$pattern[2] = '/(\s|^)#([a-zA-Z0-9\.\/~\-_]+)\b/'; // #hashtags
$replace[2] = "<a class='reply_name' href='http://search.twitter.com/search?q=%23\\2'>#\\2</a> ";
ksort($pattern);
ksort($replace);
$text = preg_replace($pattern,$replace,$text);
$tweet_id = $val['id_str'];
$time = strtotime($val['created_at']);
$diff = time() - $time;
echo "<div class='prof_img'><img src='".$img."' /></div>
<p>".
"<a href='http://twitter.com/".$name."' class='twittname'>".$user_name."</a><br />";
echo $text."<br /><span class='twittdate'>";
$date = ($diff < 86400 )?
sprintf( __('%s ago'), human_time_diff( $time ) ) :
date( "g:i A M jS Y", $time);
echo "<a href='http://twitter.com/".$name."/status/".$tweet_id."'>"
.$date.
"</a>";
if($val['source']) {echo " via ". $val['source'];}
echo "</span>
</p>";
}
}
タイムラインの情報をjsonで取得
せっかくなんで解説も。(未来の自分用に)
タイムラインを取得するだけなら、認証が要らないので、簡単。xmlやjson形式でタイムラインの内容が取得できます。今回はjsonにした。
http://api.twitter.com/1/statuses/user_timeline.json?screen_name=名前&count=ツィート数
名前は、プロフィール名じゃなくて、ユーザ名のほう。
また、screen_nameの代わりに、user_idを使うと、ユーザIDでも使えます。(ユーザIDは、ツィッターページのRSSを調べるとわかる。)
&countを付けて、表示するツィートの数を指定。
(このcount、2を指定すると0になり、4を指定すると2になるという、謎の現象が起きました。新しい投稿をしたら治ったけど。…どうやらリツイートと関係があるようだ。)
(追記。この現象の謎が解けました。リツイートが含まれていなかったため。リツイートもタイムラインに含める場合は、「&include_rts=true」を加えます。)
で、取得したjsonをPHPでdecodeして、配列にする。
あとはechoで、配列の中身を適当に表示してゆく。
URLや@リプライなどにリンクを付ける
ちょいと、ひと工夫。
URLを正規表現で抜き取って、リンクを張る。それが16、17と22〜24行目。
さらに、もうひと工夫。
返信の@マークの後に続くお名前にもリンク。それが18、19行目。
同様に#も。日本人はわりと使わないけれど。20、21行目。
(#。ハッシュタグ。話題のキーワードを示す。リンク先は「http://twitter.com/#!/search=q%23キーワード」だけど、ツイッターにログインしてないと機能しないみたい。要調査。)
(追記。ひとつの解決策として、Twitter Searchを使う。「http://search.twitter.com/search?q=%23キーワード」)
preg_replace()で配列を使うときは、ksort()しておくのがポイント。
投稿日時の表示を「〜時間前」ふうにする
ついでに投稿日時の表示方法も、ひと工夫。
24時間(86400秒)以内の投稿は、「~前」の表示にする。
WordPressには便利な関数human_time_diff()があるんで、これを利用。ここだけはWordPressじゃないと使えません。
そして、printfで日本語に。日本版Wordpressを使っているので、日本語になります。34行目。
ツイートごとのパーマリンク
さらにさらに。
ツイートのパーマリンクを日時にリンク。26行目と、36〜38行目。
本家Twitterのタイムラインでもそうなっているけれど、気づいている人は結構少ない。
ブログの記事に、誰かのツイートを引用する場合などは、このパーマリンクを使うとよいです。
Twitterのサーバがクジラの時の対処
5から8行目。クジラの絵を表示するのも、いいかも。
果たしてこれでうまくいくかどうかは、クジラがやって来るまでわからない。。

twittori
Pingback: jQuery: 要素に順番にエフェクトをかける | AZ::Blog