Yahoo Pipes およびYQL経由でAjax による、Feedly の購読者数の取得が出来なくなったため、改修をおこないました。そのメモです。
これまで、以下のページにあるような方法で取得していたのですが、いつからか不明ですが、取得できないようになっていました。
先般、 Yahoo Pipes のほうで、Pipesの終了に向けてのアナウンスがありました。
とりあえず、このまま使っていても進展しないようなので、別の方法で取得するようにしました。
PHPによる取得
PHPの file_get_contents ファイルシステム関数を利用すれば、APIの返すソースを得ることができます。
基本的なものは以下のようなかんじに。
<?php
$url = "http://example.com/feed/"; // 対象URL
$json = @file_get_contents("http://cloud.feedly.com/v3/feeds/feed%2F".rawurlencode($url)); // データ取得
$feedId = json_decode($json, true); // JSONをデコードし配列へ
$count = isset($feedId['subscribers']) ? $feedId['subscribers'] : 0; // isset()で内容を調べ $count へ代入。登録されてないときは 0
print $count;
参考:
ウチのとこみたいに増減がほとんどないようなら、キャッシュいれたほうが、あちらのサーバーにはやさしいとおもいます(使ってるページ自体がアスセス少ないとか言わない)。
PEAR の Cache_Lite パッケージを用いた例です。
都合で、コメントに説明をいれています。
<?php
header("Content-Type: text/html; charset=UTF-8"); // text/plain でもいいような気もするけどとりあえず // チェックURL
$url = "http://example.com/feed/"; // フィードURL require_once "Cache/Lite.php"; // Cache_Lite 呼び出し // キャッシュオプション $cacheOptions = array(
'cacheDir' => '/var/www/tmp/cache/', // キャッシュディレクトリを指定。適切なパーミッションをセットしておく
'lifeTime' => '3600', // キャッシュ期限 (1時間)
); // キャッシュID と キャッシュオブジェクト生成
$id = "feedlysubscribers";
$Cache_Lite = new Cache_Lite($cacheOptions); // データ取得
if($count = $Cache_Lite->get($id)){ //
echo $count;
} else { // キャッシュがないときに、フィード購読者数の取得にいく $json = @file_get_contents("http://cloud.feedly.com/v3/feeds/feed%2F". rawurlencode($url));
$feedId = json_decode($json, true);
$count = isset($feedId['subscribers']) ? $feedId['subscribers']: 0; echo $count;
// キャッシュ登録でこの条件が真になるようにする
$Cache_Lite->save($count, $id);
}
参考:
これを、 subs_count.php とでもして、サイトのどこかに置きます。
で、取り出す側は jQuery でテキストファイル読み込みなんかを使っていきます。
jQuery本体の呼び出しは済ませてあるものとします。
ファイル呼び出し
表示ページが PHP なときは、include するとかでいいかと。 以下は、jQueryで先ほどのPHPファイルを取り込みます。
テンプレート上の購読者数表示する場所に以下の要素をいれておきます。
<div id="feedly_subscribers"></div>
複数あるようなときは、class属性にしておき、以下の読み込むときのセレクターもそれにあうようにしておきます。
単に読むだけなので、.load() にしてますが、各種処理が必要な場合は .ajax() のほうにします。
<script>
$(document).ready(function (){
$("#feedly_subscribers").load("//path/to/subs_count.php");
});
</script>