Facebookの無期限のページアクセストークンを取得してfeedを表示することに成功したら、今度はそれをphpでweb上に表示できるようにしてみます。
feedはjson形式なので、通常ならajaxとか使うところなんですが、ここではとことんphpで行くことにします。というのも、最終的にはWordPress内でショートコードを使って表示させることを考えているからです。
こんなコードを作ってみました。
<?php $url = 'https://graph.facebook.com/【FacebookページのID】/?fields=posts{id,message,story,created_time,picture,permalink_url}&access_token=【Facebookアプリの無期限のページアクセストークン】&locale=ja_JP'; $jsonData = file_get_contents($url); $json = json_decode($jsonData, true); $i=0; foreach ($json['posts']['data'] as $data) { if (empty($data['message'])){ continue; } // 本文がなかったらスキップする else { if ($i >2){ break; } // 3件まで表示する else { $f_contentStr = $data['message']; $f_permalink = $data['permalink_url']; $f_contentStr = strip_tags($f_contentStr); // テキスト取得 $f_contentStr = preg_replace("/(\015\012)|(\015)|(\012)/", "", $f_contentStr); // 改行を削除 $len_c = mb_strlen($f_contentStr); // コンテンツ文字数 $len_c_max = 100; // 上限文字数 $extention = '<a href="' . $f_permalink . '" target="_blank">[・・・]</a>'; // 末尾に付ける文字 if($len_c>$len_c_max) { $f_contentStr = mb_substr($f_contentStr,0,$len_c_max); // 文字抜き出し $f_contentStr = $f_contentStr.$extention; // 末尾に付与 }; if (isset($data['picture'])) { $f_pic = $data['picture']; } else{ $f_pic = "【ダミーの画像のURL】"; // 画像がなかったらダミーの画像を } $f_date = $data['created_time']; $f_date = mb_substr($f_date,0,10); print "<div><a href='" . $f_permalink . "' target='_blank'><img class='alignleft' src='" . $f_pic . "'></a>"; print "<p>" . $f_date . "<br>" . $f_contentStr . "<br clear=all></p></div><hr>"; } $i++; } } ?>
表示用のコードはこちらを参考にさせていただきました。
取り出したデータは{id,message,story,created_time,picture,permalink_url}ですが、ほかにも表示させたい項目があったらこの部分で指定します。foreachで一つ一つの項目を取り出しますが、この時に「$json[‘data’] as $data」ではなくて「$json[‘posts’][‘data’] as $data」とするところがカギでした。jsonが入れ子になっていると思うようにデータが取り出せなかったりするので、よーく元データを見ないといけませんね。
本文がない場合(プロフィール写真の変更などで自動投稿された場合など)はスキップし、本文は100字まで抜粋表示とします。サムネイル写真に、記事へのリンクを付けています。
吐き出し方が雑なので、実際には、各要素にクラス指定などしてcssでかっこよく表示させるようにするのが吉でしょう(笑)