3.Facebookページの記事を取り出して別サイトに表示させてみる

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でかっこよく表示させるようにするのが吉でしょう(笑)
