logo_simplepie_horizontal.png


Awjudd\FeedReaderを通してSimplePieを使ってRSSフィードを操作しようとして嵌まったのでメモ。


嵌まったこと

  • はてなブックマークのRSSを取得して処理しようとすると、contentにHTMLが結構な量書き込まれていて、JSONに直して書き出すと処理が大変
  • contentを書き出さないようにしても、get_description()してdescriptionがなかったら自動的にcontentを持ってきてくれる親切設計


コメント(description)だけ欲しいのにどうしたらいいんや……



解決策:get_description(true)とする

ドキュメントがすごい見づらいので、探しつつ使い方を学ばなければならないんですけど、SimplePie_Item::get_description()の部分にこうありました。

Parameters
    $description_only
    boolean
        Should we avoid falling back to the content?

つまり、$description_onlyがfalse(デフォルト)だと、descriptionがなかった場合に自動的にcontentを探すよってことらしいです。なので、その必要はない(descriptionが空なら空でOK)時には、trueを渡す必要があります。てか、そっちがデフォルトじゃないのか。



解決策:JSONにエンコードするときにタグを変換する

もっとよい解決策を知ったので追記。

[Laravel]レスポンスをJSON形式で返す方法2つ - Qiita

加えてContent-Typeもちゃんとapplication/jsonにしてくれる。



配列をreturnするだけでいいかんじに調整してJSONエンコードしてくれた上で、Content-Typeも調整してくれる!

マジかー。


「こんなことする必要はないよ」ということでそれを知る前にやってたことも一応残しておきます。
内部では同じようなことしてるんだろうか。

json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] ) : string

この$optionsに「JSON_HEX_TAG」を指定してやると、すべての < および > をそれぞれ \u003C および \u003E に変換します。同様に「JSON_HEX_AMP」「JSON_HEX_APOS」「JSON_HEX_QUOT」を指定してやると安心です。

こんな感じ。

return json_encode($data,JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);



まとめ

ドキュメントを読みましょう。ドキュメント読んで解らなかったらソースコードを読みましょう。でもドキュメントに書いてあると嬉しいなあ。
  • About

    I'm a web designer/programmer in Kyoto, Japan. Also work as a blogger, DJ.

    NOBODY:PLACE is my personal blog since 1998. Everything I'm interested in is here.

    See Also
    Other Works
    Feed
  • Recent Hatena Bookmark
  • Monthly Archives
    Categories