ラベル goo の投稿を表示しています。 すべての投稿を表示
ラベル goo の投稿を表示しています。 すべての投稿を表示

2007/05/16

Pipes でらくちんマッシュアップ♪〜その弐

Pipes のステップ2。(Pipes 第一弾は、こちら

自分のかかわったプロジェクトがどんな風に世の中に受け入れられているのか気になるでしょ。そんなときどうする?Yahoo! JAPANや Google のウェブ検索でチェックしてみる? でもちゃんと口コミを集められるかどうかはわかんないよね。口コミチェックならやっぱりブログ検索! ブログ検索は、ウェブ検索と違って、いろんな会社が参入している。ウェブ検索の覇者、GoogleYahoo! JAPAN はもちろん、livedoorgoo などのポータルでも早期からサービスインしている。TechnoratiAsk.jp なんかもある。NAMAAN というスタートアップも参入している。ウェブ検索が、Google と Yahoo! に席巻されていることを考えれば、ありえないほどの敷居の低さ。

まあ、それはさておき、こんどは検索窓を設置して。検索語を自由に受け付けるモデルを作ってみる。各社のブログ検索サービスに自分の気になるトピックを一気に問いあわせちゃおう……という Pipe。各社のブログ検索は、検索結果自体を RSS として配信している。それを使っちゃおうというわけ。普通の RSS は新着ニュースなんかを更新情報として流しているってのが多いけど、ブログ検索はキーワードに対する検索結果を RSS 配信しているって言うんだから、使わない手はない。

今回使うモジュールは、検索語を入力するインターフェイスモジュール、各社のブログ検索の検索結果にその検索語で問いあわせるモジュール、そこから RSS を取得するモジュール。あとは、前回同様、重複削除処理、時系列での並べ替えのモジュール。中核となる部分は、スクリーンショットを用意しているので、見てみてください。

検索語の入力モジュールは、「User Inputs」の「Text Input」を利用。このモジュールをキャンバスに持ってくると、いくつかのオプションが表示される。

  • Name
  • Prompt
  • Position
  • Default
  • Debug
の5項目。わかるようなわからないような……。「Prompt」は、きっとユーザインターフェイスの検索窓の横に表示される説明書きなんじゃないかな。「Default」は、初期値。ここに「大泉洋」と記入しておけば、最初から検索窓に「大泉洋」って記入されて表示されるんだろうな。「Debug」。これは、ここに記入した文字列でうまくいくかどうかを試すことができるんだろう……と想像しながら、作業を進めていく。

次に必要なのは、各社のブログ検索の結果 RSS を引き出すための URL。例えば、Google で「温泉」と検索してみる(検索結果)。Google は他社のサービスと違って、関連度順にランキングされるのが初期設定なので、画面右上の「日付順に表示する」をクリック。それで得られた検索結果のURLは、以下のとおり(クリックして URL を参照のこと)。
なんだかごちゃごちゃいろいろ文字の含まれている長い URL。検索結果画面の左カラムを見てほしい。ここに「フィードを取得 Atom | RSS」とある。「Atom」と「RSS」の違いは別の機会に譲るとして、「RSS」をクリック。すると、こんな URL(クリックして URL を参照のこと)。
これが今回の Pipe で使う素材のひとつになる。これを前回の「Fetch Feed」に入れることもできるけど、それでは毎回「温泉」の検索結果しか出てこない。それではダメなので、別のモジュールを使う。「URL」の「URL Builder」モジュール。これをキャンバスにもってくる。すると、
  • Base
  • Path Elements
  • Parameters
といった入力項目が表示される。ここにさっきの RSS の URL を分解して入れていく。こういった URL は、特定のプログラムとパラメータの組み合わせでできていることが多い。Base や Parameter に下記の要素を放りこんでみる。

  • Base:Google ブログ検索の検索結果 RSS を生成するプログラムの URL を指定(一般的には長い URL の「?」より前の部分)
    http://blogsearch.google.co.jp/blogsearch_feeds
  • Parameters:上記のプログラムにどういう挙動をさせるかを決定するパラメータ(引数とか環境変数とか呼ばれる)
    • hl=ja(日本語のページってことかな。素直に入れておきましょう)
    • q=%E6%B8%A9%E6%B3%89(最重要アイテム! 検索語はコレ!)
    • lr=lang_ja(日本語のページってことかな。素直に入れておきましょう)
    • scoring=d(? 素直に入れておきましょう)
    • ie=utf-8(input encoding の略かな。入力文字コード。素直に入れておきましょう)
    • num=10(出力件数? もしかしたら面白いことができるかも)
    • output=rss(出力フォーマット。素直に入れておきましょう)
Parameter の入力は、「hl=ja」だったら、左の箱に「hl」、右の箱に「ja」といった感じで。ここでいちばん大事なのは、「q」。これが検索文字列用の箱なので、ここの右の箱は空にしておく。で、この右の箱の脇にある「○」と、さっきの「Text Input」をパイプでつなげてやる。おまけで出力数を指示する「num」を受け付ける「User Inputs > Number Inputs」もくっつけてみた(初期値50件で)。

仕上げに、前回も登場した「Fetch Feed」モジュールの再登場。これを「URL Builder」モジュールとパイプで接続。あとは、重複処理、時系列並べ替えをして、ひととおりのフローは完成。

マッシュアップということで、その他各社の RSS を「URL Builder」で作り込んでいって、パイプでつなげて、完成〜♪ 検索語を入力して、いろいろ試してみてください〜。

2007/05/15

Pipes でらくちんマッシュアップ♪〜その壱

Yahoo! inc. の Pipes がおもしろいよ……という話をエン友(エンジニアのおともだち)から聞いたのが、ことしの初旬。ちらっと覗いてみて確かにおもしろそうだなとは思ったものの、「必要は発明の母」ではないが、さして必要でもなかったので実験にはいたらず(この辺がダメなんだよね……)。

Pipes は、いくつかの RSS を好きなように組みあわせて、自分好みの RSS を作っちゃおう……というサービス。ブログとかニュースサイトとかで新着記事のチェックを RSS リーダーでやったりするよね。Asahi.com と、ZAKZAK と、なんとかと、かんとかと……といくつも RSS リーダーに登録しちゃうこともできるけど、それだとバラバラに RSS が飛び込んできて、ちょっと鬱陶しい。Pipes を使うと、もろもろの RSS がさくっと一本の RSS にまとめられちゃう。それがあんまり高度な技術的な知識もなく、いくつかのモジュールを組みあわせるだけでできちゃうってのが、このサービスの特徴。いくつかのモジュールって言うのが、RSS の取得だったり、検索文字列入力窓みたいなインターフェイスだったり、並べ替えの処理だったり。これらをパイプでつないでやる。パイプでつなげることによって、データがモジュールからモジュールに流れていくわけ。方眼紙状のキャンバスの上に、自由にモジュールをならべて、パイプでつないでやる。モジュールにしてもパイプにしても Ajax でぐりぐり動かせたりして、プログラムを組み立てていく楽しみもある(ブラウザ上でこういうことができることだけでも楽しい)。

社内で Q&A サービスを立ち上げたいという話があり、それだったらまずは既存のサービスでどんな Q&A が飛び交っているのかリサーチした方がいいんじゃないかと思ったわけ。で、Pipes に行ってみると、人気の Pipe に「Yahoo Unanswered Questions」なんてのがある。Yahoo! inc. 版『知恵袋』の『Yahoo! Answers』のまだ誰も回答をつけていない質問だけをピックアップしてくれる Pipe。な〜るほど。そういう使い方があるか。確かに、Q&A サービスは誰よりも早く回答したい!というアツい(ヒマな?)人たちがたくさんいるので、そういう人たちにはうってつけのサービスかも。Pipes には、人の作った Pipe の設計図を見る機能があって、それを見るとどんな風にこの Pipe が作られているかがわかる。これがまたいい機能。

となると、俄然ヤル気が出てくる。まずは Yahoo! 知恵袋をチェック。ここが RSS を配信しているのは知っている。で、見てみると、質問のカテゴリごとに RSS が配信されていることがわかった。「回答受中の質問」、「投票受付中の質問」、「解決済みの質問」の3つ。例えば、「インターネット、PCと家電 > デジタルカメラ」カテゴリだと、こんな感じ。

今回作りたいのは、「どんな Q&A がやりとりされているかが何となくわかる」Pipe なので、これらを全部マージしてみる。左カラムに「Sources」というのがあるが、これが元ネタの RSS を取り込むためのモジュール群だ。この中にある「Fetch Feed」が使えそう。「Fetch Feed」をキャンパスに展開して、さっきの3つの URL をコピペ。「+ URL」で入力欄が自由に増やせる。これで、全部の RSS が取り込めたことになる。

これをこのまま出力してもいいんだけど、それぞれの RSS に同じ Q&A がダブっていたりすると嫌だな(そんなことはなさそうな感じだけど)……と思い、「Operators」メニューの「Unique」というモジュールを「Pipe Output」(出力モジュール)に送る前にはめこんでみる。これで重複しているものを削除してくれるはず。でも何をもって重複していると判断するの?……ってのを Pipe に教えてやらなくてはいけない。そこで「Filter non-unique items based on [......]」のオプションを使ってやる。「[......]」の部分がプルダウンメニューになっている。ここでどれを選ぶのが適切かよくわかんないけど「item.title」にしてみる。タイトルが違ってれば、別の質問だとみなしてもいいでしょ……という安易な判断。ダメならあとで直せばいい。「Fetch Feed」と「Unique」をパイプでつないでやる。

これで概ね完成なんだけど、最後の仕上げに表示順をいじってみる。「Operators」メニューに「Sort」っていうのがあるので、これも使うことに。オプションは、「Sort by [......] in [ascending | descending] order」となっている。「[......] をキーに昇順・降順に並べろ」ってことらしい。だったら、投稿日時の「item.pubDate」をキーに降順にしてやれば、新しいもの順になるはず。最後に、「Sort」と「Pipe Output」をパイプでつないでやる。

これでひとまず完成。「Save」ボタンをクリックして保存したら、「Run Pipe」をクリック。プログラムが稼働する。出来映えを見て、いまひとつの動きだったら、各モジュールの値を調整したり、途中のモジュールを追加したり、削除したり。ステップごとに変な動きをしていないか、思ったとおりの動きをしているかも開発途中でチェック(Debug)できるのもうれしい。

せっかくだったら、『教えて!goo』のデジカメの Q&A も取り込んじゃった方がマッシュアップっぽくて、おもしろいかなと思い、RSS を追加(あんまり情報量多くないけどまあいいか)。はてなの『人力検索』は、カテゴリの粒度が粗すぎて、ちょっと使えないかも。これでひとまず完成! お試しはこちらから〜。

※Pipes を作ったり、設計図を見たりするには、Yahoo! inc. の ID (Yahoo! JAPAN の ID ではダメ)が必要。

※※LEGO のパーツと小さなコンピュータを組みあわせて作る LEGO Mindstorms ってのがあるんですが、このコンピュータのプログラミング環境とこの Pipes、ユーザインターフェイスが似ていると思う。