はてブの「お気に入りのお気に入りのお気に入り」Pipes

更新状況

「Fav Fav Fav」では最初のフィード以外飛んでこなくなった。とりあえず、今は「Fav Fav」の動作を検証中。
→「Fav Fav」も動かない。フィードを制限すべきか、あるいはIDだけ返すツールとみなすか。そもそも最後の段は「お気に入りのRSS」を取ってくればいいわけで、「お気に入りのブックマーカーのURL→そのRSS」という手順を踏む必要もなかったり。少しずつ試して修正していく予定。


まず「Fav Fav」の構造を変更して、「お気に入りのRSS」を「お気に入りのブックマーカーのURL→そのRSS」から「お気に入りのRSS一覧(favorite?mode=rss)」にした。LDRへの登録まで上手くいくことは確認。あとは「Fav Fav Fav」の方の変更と動作確認。
→「Fav Fav Fav」も変更終了。itemsが1000越えてるので、Fetch Feedのところを「Fetch Feed + 先頭の10件」みたいなモジュールで置き換えた方が良いかもしれない。
LDRに登録できなかったので、置き換えた(items=420)。登録まではいけたので、二つとも様子見に移る。


「Fav Fav」は正常に動いてる模様。「Fav Fav Fav」の反応がないので、来週の頭にでも制限を厳しくして再び反応を見る。
→「Fav Fav Fav」はいきなり200来た。やっぱり数をもう少し絞るべき。「Fav Fav」はひとまずこれでいいや。誰がブックマークしたかの情報がないのはやはり寂しいけど。

内容

はてなIDを指定すると、その人の「お気に入り」と、さらにその「お気に入り」と、さらにさらにその「お気に入り」のブックマーカーのフィードを集めて配信します。

使い方

http://pipes.yahoo.com/pipes/pipe.info?_id=b2e564d8543001c74a2cba1640b75086にIDを入れると結果が出力されるので、RSSアイコンをクリックすればあとは他のRSSと同様に扱えます。
504が返ってくる(タイムアウトする)ようなら、お気に入りの数が多すぎると思われるので、「お気に入りのお気に入り」までで止めたhttp://pipes.yahoo.com/pipes/pipe.info?_id=fa65355e86618be53696c68a50dc74ceをどうぞ。


基本的には自分のIDを指定して、お気に入りの連鎖をつかまえることを目的としているので、最初に指定したIDのフィードは含まれません。
また、「同じタイトル」でも別の人がブクマしてるものは別のフィードになっています。あとで直したり直さなかったりするかもしれません。(titleでUniqueをかますだけで良いはずですが)
あと、「ブクマした人」の情報が含まれていませんが、これはいつか(=来週〜来世に)直す予定です。

仕組み

概要

Yahoo!Pipesを使って、以下の手順でフィードを求めています。

  1. IDからその人のブクマのURLを生成
  2. そのURLを元に、お気に入りのブックマーカー達のURLを生成
  3. さらにそのURLをもとに、お気に入りのブックマーカー達のURLを生成(必要なだけ繰り返す)
  4. そうやって求めたURLからフィードを取得

以下はその詳細です。

ID→URL

IDの前に「http://b.hatena.ne.jp」をつけるだけです。「URL Builder」を使えば楽勝です。

URL→Fav URLs

これはhttp://pipes.yahoo.com/pipes/pipe.info?_id=ehLdFSHv3BGYTDBeOTY80Aとしてモジュール化しました。これにURLを投げてやれば、「link」に「お気に入りのブックマーカーのURL」が入ったフィードが返ってきます。


「お気に入りのブックマーカーのURL」の求め方は、以下の手順です。

  1. 元となるURLの最後にfavoriteをつける
  2. そのURLを「Fetch Page」に投げて、ブックマーカーのURLごとにフィードを作成
    1. favoritelistの中にリンクとして存在するという前提で処理
Fav URLs→Fav URLs

これも「URL→Fav URLs」とほぼ同じ内容ですが、重要な違いとして「URLが"URLとして"入ってくる」「URLが"フィードのリンク先として"入ってくる」という点があります。簡単に言うと、「フィードのリンク先として」の場合はそのままだとhttp://pipes.yahoo.com/pipes/pipe.info?_id=ehLdFSHv3BGYTDBeOTY80Aに入力できません。
そこで使うのが「For Each: Replace」で、これを使えば「フィードごとに中身を見て処理」ができます。「Loop」でも同じようなことを行いますが、「For Each: Replace」の場合は結果を新しいフィードとして作成できます。つまり、「1つのフィード(ブックマーカーのURL情報)」から「複数のフィード(そのお気に入り情報)」に変更できます。


「For Each: Replace」は「ブックマーカーのURL(1つのフィード)」から「そのフィード(複数のフィード)」への変更にも使えるので、そこでも使っています。

その他

まだしばらく自分では使わないので、作成する意味はあまりなかったんだけども。思いついたら作らざるをえない。


再起部分についてはhttp://chikura.fprog.com/index.php?UID=1175617938をだいぶ参考にした。というか、ここの「1件の入力が複数件に置き換わることもある」という文がなければ多分できなかった。