【php】amebloのRSSのフィードから画像を取得する

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

php logo

amebloのRSSフィードには画像が含まれない?

現在amebloのRSSフィードからは画像が取得されません。有名人の登録が多いので著作権問題が大きな原因だと思うのですが、記事に掲載されている画像のサムネイル表示をしたいと思ったためphpで書いて見ました。

改訂版を公開しました。合わせてこちらも御覧ください。

デモ

amebloで一番上に表示されている市川海老蔵さんのフィードを取得してみました。(2015/07/06 12:07取得)著作権上の問題があればすぐに削除しますのでご一報下さい。
市川海老蔵さんのRSSフィード
スマホでのUIを考えてブロックタイプのリンクにしています。

ダウンロード

rss-phpから取得して下さい。

使用しているライブラリ

rss-php

rss-phpはRSSやAtomフィードを読み込むことが出来るライブラリです。
エラー処理部分が上手くいかなかったので少し書き換えています。

Simple HTML DOM Parser

Simple HTML DOM Parserはphp用HTMLパーサーです。HTMLをfind()関数で簡単にスクレイピング出来ます。

twitter bootstrap

みんな大好きbootstrap

使用方法

基本的には以下の3つを編集するだけで使えるようになっています。
RSS.phpの44行目から54行目です。rss.cssへのlinkは適宜入れて下さい。

フィードのURL

amebloのフィードを取得する前提なので取得したいページのamebloIDによって以下のように書き換えて下さい。
http://feedblog.ameba.jp/rss/ameblo/(amebloのID)/rss20.xml

PR

フィードの取得数

取得するフィードの数を入力して下さい。初期状態では3です。
おそらく5件を越えるとamebaの広告が取得されます。

画像が取得出来なかった時に表示する画像のパス

記事内に画像が一枚も無かった場合にサムネイルとして表示したい画像へのパスを入力して下さい。

解説

RSS.php内で個人的に詰まったところの解説です。

amebloから画像を取得する関数

RSSフィードから記事へのリンクが分かるのでそこからスクレイピングしています。
スクレイピングで得られた画像から絵文字などを取り除き、一番最初に取得された画像のリンクを返しています。
配列の初期化を忘れるという凡ミスで結構長い間同じ画像が表示され続けてました・・・。

画像位置の検索ですが人によって異なる場合があるようです。基本的にはdiv.articleTextでいいんですが、たまにdiv.contentsの人がいたりしました。取得したいページに合わせて書き換えて下さい。(Developper toolsとかで分かるはず)

ヒアドキュメント

表示部分の出力がとても長くなったのでヒアドキュメントを使ってみたんですが、そのままだとhtmlspecialcharsが使えないということでhtmlspecialcharsをヒアドキュメント内で使えるようにクラスを定義しました。

ヒアドキュメントの終了タグは必ず文頭に置かないといけないんですって。
個人的にはちょっと気持ち悪いんですけど仕方ないですね・・・。
何かいい方法があれば教えて下さい!

参考にしたサイト

PHPでRSSやAtomのフィードを取得する方法 – Syncer
PHPでアメーバブログのRSSから記事内容を取得して、記事内の画像を取得するプログラムを作る – 9ineBB
PHPのヒアドキュメント内で関数(htmlspecialchars等)を利用する方法 – 個人的自由帳
リンク(aタグ)をブロック要素(div)全体に効かせるCSS – JunkBlog

PR

この記事が気に入ったら
いいね ! しよう

Twitter で
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。