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