サイドバーに最近読んだ本(ブクログに追加した本)のアソシエイトリンクを追加


昨年の11月より、ブクログの無料ユーザーは、アマゾンのアソシエイトIDを設定できなくなりました(参考:ブクログ、無料ユーザーは「AmazonアソシエイトID設定」が利用不能に(2013年11月6日15:00より) | Synthetic LOG)。
とはいっても、自分にはほとんど関係ない話で、アマゾンの紹介料レポートをみても、ブクログ経由でクリックされたものはなさそうです。

ところで、今までサイドバーにて使っていたブクログのブログパーツ(ミニ本棚)。最近読んだ本(というより、最近登録した本)を一覧で表示してくれるのはいいのだけれども、リンク先がブクログのURL。当たり前だろと言われそうですが、個人的にはアマゾンに直接とんでくれるほうがうれしい。
というわけで、自分でやってみることにしました。

利用したデータはブクログで配信されているRSS(http://booklog.jp/users/amano225/feed)。ブクログでは非公式APIとしてjsonも配信しているようですし(参考:ブクログのAPI(非公式)を使って本の情報をjQueryで取得してみた :: backyard.weblog)、そちらのほうが多分簡単に実装できるとは思うのですが、今回はRSSのほうを利用することに。
また、今回のやり方では『PHP Code Widget』というプラグインを使っています。PHP Codeのウィジェットをサイドバーにいれて、下記のように入力。

今回困ったことに、simplexml_load_fileを使って直接RSSのXMLをパースできなませんでした。ブクログのRSSでの表示は、HTTPリクエストヘッダにユーザーエージェントが必要なようです(7~12行目で設定)。ユーザーエージェントは空文字でもいいようなのですが、とりあえず”am-yu.net”と設定しておきました。HTTPリクエストヘッダをつけてsimplexml_load_fileで取得する方法はあるのだろうか。調べてみても分かりませんでした。

23行目ではアマゾンへリンクできる本かどうか、25行目ではレビューがあるかどうかを見て、26行目で両方そうであればリンクを作成するようにしています。これは、自分がhontoの電子書籍を購入してブクログに登録することがあるため。やろうと思えばhontoのアフィリエイトリンクも作れるとは思うのですが、hontoのアフィリエイトIDを持ってないのでやってません。レビューがあるかないかは別に見る必要はないかもしれませんが、あまり触れてほしくない本はレビューをしてないのでレビューしてるかどうかで表示するか判断することに。
また、掲載する本は最大5冊にしています。

amazonへのURLについては下記のページを参考にしました。
AmazonのURL短縮|最新版
“ref=nosim/”はつけたほうがいいのかな? とずっと思ってたけど、今は別に関係ないようです。

関数にしてるのは、PHP Codeの動きがよく分かっていないため、変数名の衝突する可能性もあるのではないかと思ってそうしました。PHPはあまり詳しくないのでこうしましたが、もっと良い方法があるかもしれません。

ところで、最後に一つだけ言っておくと、自分のブクログのレビューは、たまに日記や雑記みたいなことを書いてしまっています。

Rで、ニコ動のタグやカテゴリを取得してみる


またまたRとニコニコ動画ネタ。というより、前回のつづき。
前回、タグがうまく取得できなかったので、今回はタグやカテゴリタグの取得に挑戦。
ちなみに、自分はRを使うのに、RStudioを利用しています。

前回は簡易的にXMLをデータフレーム化するxmlToDataFrameという関数を利用しましたが、どうやらXMLをDOMにパースするxmlParseというものがあるよう。

文字化けしてますが、このまま続けます。ところで、純正のRの開発環境で試すと、XMLのコードが表示されなかった。また、このnicoという変数は、externalptr(外部ポインターオブジェクト)という型になっているよう。このあたりはよく分かってません。

とりあえず、XPathが使えるgetNodeSetという関数があるようなので、それを使ってタグを取得してみることに。

ありゃ。文字化けしてない。よく分からない仕様だなぁ・・・。これはlistという型になっているようなので、また違うのかもしれない。
とりあえずこの値を取得したい場合は、xmlValueという関数をつかえばいいらしい。

正直、Rはまだまだ分からないことだらけなので、どうしてこうなるのかわからないのですが、とりあえずタグの値は取得できたので目標達成です。

さてじゃあ次にカテゴリタグを取得・・・。ってよく見たらsm9にはカテゴリがないようです(カテゴリ化してる、ゲームタグも音楽タグもあるというのに)。とりあえず、sm1097445(【初音ミク】みくみくにしてあげる♪【してやんよ】)で試すことに。

というわけで、前回作成したデータフレーム(nicoFrame2.txt)にカテゴリーを追加してみる。
まず、上記ファイル内を全て選択してコピーし、Rに読み込むことに。

これでできたファイルが以下。
nicoFrame3

な・・・。カテゴリーがうまく取得できてない動画がやけに多い・・・。
さっきはカテゴリーを取得できたみくみくにしてあげるも、『カテゴリーなし』に・・・。
カテゴリー取得してやりたいことあったけど、これは困った。ロックしてるタグの一番始めが、カテゴリーにある名前かどうかを見ていくという手法でなんとかなりそうではあるけれども・・・(多分、カテゴリータグの仕様はそれであってる)。
なんでこんなに、カテゴリーかどれかという情報がとれたりとれなかったりするのやら・・・。