【メモ】SimplePieでdescriptionとcontentを扱うコツみたいなもの

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にエンコードするときにタグを変換する


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

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

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


配列を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);



まとめ


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