ウェブ、ショウジン

Facebookのウォールの内容をパースしてhtml出力する

2012-11-14
facebook_icon_01
Category
Facebook PHP

Facebookページのウォールに流している内容を、そのRSS Feedをパースして別サイトで表示させる例。

パーサーはいつものようにMagpie RSS / RSS for PHPを使用。(いつもお世話になっています、超感謝)

Magpie RSS

Facebookページのfeedを取得する

まずはパースするためにFacebookページ(のウォール)のfeed URLを取得する。

feed(rss 2.0)のURLを取得するにはFacebookページのIDが必要。

下記のURLの末尾にFacebookページ名(ユーザ名)を付加してブラウザアクセスすると確認できる。

https://graph.facebook.com/Facebookページ名(ユーザ名)

自分のFacebookページを例にするとこんなふうに。

FacebookページのID確認

IDを確認できたら下記のURLの末尾「id=」の後ろにそのIDを付加。ブラウザでアクセスしてみて確認。

https://www.facebook.com/feeds/page.php?format=rss20&id=ここにIDを追加

ちなみに、このブラウザでの確認はFirefoxのほうがよいかもしれない。Google Chromeだと「page.rss」という名前でデータをダウンロードして、それを開いて確認になるのでちょっと面倒。その点Firefoxならブラウザ画面でこんなふうに確認できる。

FirefoxでFacebookページのウォールの投稿をRSSで確認

Magpie RSSを使う

Magpie RSSの使い方は基本的には「MagpieRSSを使って外部サイトのfeedを読み込む」こんな感じで。

準備ができたら取得したfeedの内容を表示したい場所に以下を記述。

Magpie RSSの記述例

レイアウトやデザインはCSSで調整。(あと、Magpie RSSではhttpsプロトコルだとfeedを取得できないようなので注意=httpに変更)

でも、このままだと投稿日時のpublicdate部分の書式がこんなふうになってしまう。(RSS 2.0の書式)

Facebookページのウォールの内容をMagpie RSSでパースして表示した例

これを一般的な、よく見かける

2012-11-13 12:18:29

こんな書式に変更する。

RSS 2.0の投稿日時の書式を変更する

さっきのコードにタイムゾーンの設定等、ごにょごにょして、以下のように変更。

<?php

// 必要モジュールの読み込み
require_once("_magpie/rss_fetch.inc");

// キャッシュは五分に設定
define("MAGPIE_CACHE_AGE", 60*5);

// キャッシュ保存ディレクトリ指定(事前にcache/ディレクトリを作成しておく)
define("MAGPIE_CACHE_DIR", "_magpie/cache");

// エンコーディングの設定
define("MAGPIE_OUTPUT_ENCODING", "UTF-8");

// 読み込むfeedのURL
$url = "http://www.facebook.com/feeds/page.php?format=rss20&id=203422199670668";
$rss = fetch_rss($url);

// 表示する件数の上限
$max = 2;

$i=1;

foreach ($rss->items as $item) {

// 記事本文へのリンクURLを取得
$href = $item['link'];

// 記事本文を全文取得(xmlのcontent:encoded部分)
// 一部抜粋なら["description"]でいい
$content = mb_convert_encoding($item['description'], "UTF-8", "auto");

// 投稿日時を取得
$date = $item["pubdate"];

$rssDate = $date;
date_default_timezone_set('Asia/Tokyo');
$date = strtotime($rssDate);

// 記事本文内のhtmlタグを除去
$content = strip_tags($content);

// &nbsp;と全角スペースの除去
$content = str_replace("&nbsp;", "", $content);
$content = str_replace(" ", "", $content);

// 本文の文字数を丸める
$content = mb_strimwidth($content, 0, 90, "(…続きを読む)", "UTF-8");8

// 取得した各要素をhtmlで出力
echo "<dl class=\"facebook-wall\">";
echo "<dt>";
echo date('Y-m-d H:i:s', $date);
echo "</dt>";
echo "<dd><a href=\"$href\" target=\"_blank\">$content</a></dd>";
echo "</dl>";

// ループ処理ごとに$iの値に1を足す
$i++;

// $iの値が$maxの値を超えたらループ終了
if($i > $max){break;}
}
?>

すると、こんなふうになる。

RSS 2.0のpubdateの書式を変更した例

オーケー。

今回は下記の記事のお世話になりました。
助かりました。ありがとうございます。

RSSの日付(pubDate)を一般のフォーマットに変換

Categories

Tag Cloud

AdMob Android Apache centos CodeIgniter EC-CUBE facebookアプリ facebookページ feed Firefox Flash google googleanalytics htaccess iPad iPhone JavaScript lamp mobile nginx ogp pear php plugin rollover rss sendmail setting smarty ssh Titanium Mobile Titanium Studio tutorial ubuntu vim VirtualBox vmware vps Windows WordPress xampp youtube さくらインターネット アクセス解析 カスタム投稿