TwitterRESTAPIのユーザータイムラインで表示されるつぶやきを1時間ごとに区切りたい。foreach文と変数の使い方について
目次
電車遅延なうさんを見ていると、自分もTwitterAPIで拾ってきたユーザータイムライン(GET statuses/user_timeline(新しいタブで開く))のつぶやきを、時間ごとに区切りたくなりました。
電車遅延なうさんでは各時間帯の最も遅い時間帯のつぶやきの上には、必ず緑色のスタイル(background:green)で、時刻が表示されています。
コード
先にコードを書くとこうなります。オフラインで知り合いの方に教えてもらいながら出来上がりました。
<?php require_once("twitteroauth/twitteroauth.php"); $consumerKey = ""; $consumerSecret = ""; $accessToken = ""; $accessTokenSecret = ""; $twObj = new TwitterOAuth($consumerKey,$consumerSecret,$accessToken,$accessTokenSecret); $request = $twObj->OAuthRequest('https://api.twitter.com/1.1/statuses/user_timeline.json','GET', array( 'count'=>'200', 'screen_name' => 'MYSCREEN_NAME', )); $results = json_decode($request); ?> <?php if(isset($results) && empty($results->errors)){ $before = ""; foreach($results as $tweet){ ?> <?php $after = date('YmdH', strtotime($tweet->created_at)); ?> <?php if($before != $after) { ?> <span style="background:green"><?php echo date('Y/m/d H時', strtotime($tweet->created_at)) ; ?></span></br></br> <?php } ?> <?php echo date('Y-m-d H:i:s', strtotime($tweet->created_at)) ; ?></br> <?php echo $tweet->text; ?></br></br> <?php $before = $after; ?> <?php } ?> <?php }else{ ?> <?php echo "関連したつぶやきがありません。"; ?> <?php } ?>
19行目まではお約束です。Twitter RESTAPIから呼び出しているのは、時間($tweet->created_at)と、テキスト本文($tweet->text)ですね。
繰り返し構文の中身を取り出す
肝心なのは、20行目からです。例えば、2014年10月30日の、14:10、13:30、13:20、13:10にそれぞれ4回のつぶやきがあったとしましょう。
そのときの変数の中身とecho文の中身を取り出していきます。
1回目のループ(14:10)→$beforeと$afterは等しくないので表示
$before:(なし) $after:2014103014 echo:2014年10月30日14時
2回目のループ(13:30)→$beforeと$afterは等しくないので表示
$before:2014103014 $after:2014103013 echo:2014年10月30日13時
3回目のループ(13:20)→$beforeと$afterは等しいので非表示
$before:2014103013 $after:2014103013 echo:(なし)
4回目のループ(13:10)→$beforeと$afterは等しいので非表示
$before:2014103013 $after:2014103013 echo:(なし)
例で出した時間帯とは異なりますが、だいたいこんな感じになります。
ポイント
各時間帯の最も遅い時間帯のつぶやきの上にだけスタイルをあてるためには、4つのポイントがあります。
- $beforeは空文字にしてforeach文の外に出す
- $beforeと$afterは年月日時(YmdH)までを比較する
- $beforeと$afterの日付文字列が等しくないときだけスタイルと時刻を表示させる
- foreach文の最後に$before = $afterとする
〔参考サイト〕