はてなブックマークのRSSがSimpleXMLElementで取得できない問題【#np2020】

LaravelLogo.pngのサムネイル画像

RSSフィードを取得して何らかの形で出力するようなアプリケーションを設計中。その動作テストの過程で、はてなブックマークのRSS(RSS1.0)を読み込ませようとしたらなぜだか、次のようなエラーが出てしまって取得出来ない。



Exception
String could not be parsed as XML
Previous exceptions
SimpleXMLElement::__construct(https://b.hatena.ne.jp/nobodyplace/bookmark.rss): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden (0)


実行したコードはこんな感じ(抜粋)。実行環境はローカルのVagrant上。


$xml = new \SimpleXmlElement($url,0,true);


このシンプルなコードに対して403と申されましても……他のRSSだったら何の問題もなく取得できる。はてなだけ取得出来ない。単純にRSSに特殊な記述があるのかなと思ったけど、それだったら403ということにはならないと思うし……これはあれか、何らかの方法でローカル環境からはアクセス出来ないようになってんの?Vagrantのネットワーク周りはいじってないし、よくわからない。こっちのせいかもはてなの事情かもわからない。うーむ。


ダメ元で、LaravelのRSSフィード取得用ライブラリ(中身は「simplepie」)である「awjudd/feed-reader」をインストールして試して見た。参考にさせて頂いた記事はこちら。

LaravelでRSSフィードを読み込む|プログラムメモ

composerでインストールして、最低限の設定を行う。で、コントローラで実行。


28_01.png

普通に取得出来た。あれ。中ではcURLを使っているらしいので、それなら接続出来るということなんだろうか……


イマイチ腑に落ちないけど、どちらにしてもRSSのバージョン違いを吸収するための仕組みは必要だったし、これで楽にやれるならその方がいいかなってことで、このまま「awjudd/feed-reader」を採用していくことに決定。今回のテーマは「少ない手間で開発を行う」なので、この件はひとまずこれ以上追求はしない。


……でも気にはなるなあ。