まず、取得したいページのIDを取得します。
取得方法は、Facebookページのサブドメイン(www)部分を graph に変更することで確認することができます。
例)https://graph.facebook.com/FacebookDevelopers
アクセスして表示されたページの2行目にあるIDをコピーします。
“id”: “xxxxxxxxxxx”,
IDが分かれば、RSSフィードのアドレスにパラメータとして渡すことで取得が可能となります。
下記は、FacebookDevelopersのRSSフィード例です。
https://www.facebook.com/feeds/page.php?format=atom10&id=19292868552
このフィードをPHPの simplexml_load_file() 関数などで、そのまま処理しようとしても
Facebook側でアクセスが拒否される為、使用することができません。
そこで、処理の中に下記を追加し、file_get_contents関数で取得します。
$context = stream_context_create(array( 'http'=>array( 'user_agent' => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11' ) ));
サンプルコード
<?php // xmlファイル設定 $context = stream_context_create(array( 'http'=>array( 'user_agent' => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11' ) )); $xml = file_get_contents('https://www.facebook.com/feeds/page.php?format=rss20&id=xxxxxxxxxxx', FALSE, $context); $xml = simplexml_load_string($xml); $items = $xml->channel->item; if($items){ $count = '0'; echo '<ul>'; foreach ($items as $item){ $title = trim(str_replace(array("\r\n","\n","\r"), '', (string)$item->title)); if( $count < 3 ){ echo '<li><time datetime="'. date('Y-m-d', strtotime($item->pubDate)) .'">'. date('Y/m/d', strtotime($item->pubDate)) .'</time><span><a href="'. $item->link .'" target="_blank">'. $title .'</a></span></li>'; $count++; } } echo '</ul>'; } ?>
このままだと、写真投稿の場合にタイトルが出ず、日付のみになってしまいますので、
17行目の件数を判定しているところにタイトルが存在するかどうかも含めます。
if( $count < 3 && $title != '' ){
参考サイト
http://stackoverflow.com/questions/11620932/simplexml-load-file-problems
コメント