Yahoo! Pipes講座の4回目。これまでのエントリーはこちら。
- [Pipes] Yahoo! Pipesを勉強したい方へ
- [Pipes] 講座01(FetchFeed、Sort)
- [Pipes] 講座02(Text/URLInput、Yahoo!Search、Filter、Regex)
- [Pipes] 講座03(String/URLBuilder、FetchData、Rename)
今日は、講座02と講座03で作ったPipeを合体します。今回の講座で、AppHtmlでアプリ名を検索するまでの部分は完了します。
2つの検索結果を合体する
講座02と講座03は、同じ入力パラメータ(kwdとurl)を必要とします。同じkwdとurlを両Pipeに渡すことで、同一条件での検索が並列で動きます。その結果を合体します。
手順1(Text Input、URL Inputモジュール)
講座02と講座03に渡す入力パラメータを準備します。Text Input(=アプリ名を入れる)とURL Input(=サイト縛りの為)を使います。
ライブラリから「Text Input」を選び、キャンパスへドラッグ&ドロップします。
Text Inputは以下のように設定します。
- 「Name」Pipe内で使う呼び名。「kwd」と入れる。
- 「Prompt」入力値のラベル名。こちらも「kwd」と入れる。
- 「Position」入力値の表示順番。「1」と入れる。
- 「Default」入力値の初期値。「textforce」と入れる。アプリ名
- 「Debug」Pipe内の初期値。Defaultと同じ値を入れる。
次、ライブラリから「URL Input」を選び、キャンパスへドラッグ&ドロップします。
URL Inputは以下のように設定します。
- 「Name」Pipe内で使う呼び名。「url」と入れる。
- 「Prompt」入力値のラベル名。こちらも「url」と入れる。
- 「Position」入力値の表示順番。「2」と入れる。
- 「Default」入力値の初期値。「http://itunes.apple.com/jp/app」と入れる。
- 「Debug」Pipe内の初期値。Defaultと同じ値を入れる。
手順2(My Pipeモジュール)
Yahoo! Pipesは、自分が作ったPipeを別のPipeで呼び出すことが可能です。ライブラリの中に「Favorites」や「My Pipes」のタブがありますが、この中には自分が★を付けたPipeや作ったPipeがずらっと並んでます。
「講座02」と「講座03」を選び、キャンパスへドラッグ&ドロップします。
手順1で作ったText Inputを、講座02のkwd、講座03のkwdに紐付けます。同様に、URL Inputを、講座02のurl、講座03のurlに紐付けます。このように、モジュールは複数モジュールと紐付けることが可能なんです。同じ条件が二つのPipeに渡されます。
手順3(Unionモジュール)
今のままですと、講座02と講座03は、互いに検索を並列で実施してるだけなので、結果を合体させる必要があります。結果の合体には「Union」を使います。
ライブラリから「Union」を選び、キャンパスへドラッグ&ドロップします。
講座02と講座03をUnionと紐付けます。ひとつのUnionで5つまで紐付けることができます。今回は2つだけなので、ひとつのUnionで問題ありませんが、もし仮に、5つ以上を紐付けたい場合、Unionを更に追加し、Unionの結果をUnionに紐付ければOKです。
Unionモジュールを選択し、デバッガーで確認。無事に合体できました。
検索結果の重複を省く
Yahoo! SearchとGoogle APIが同じiTunesリンクを返していた場合、結果は重複しているはず。重複を省いておかねば、2重で結果が出てきてしまいます。
手順4(Uniqueモジュール)
重複データを取り除くには「Unique」を使います。
ライブラリから「Unique」を選び、キャンパスへドラッグ&ドロップします。
入力欄には、どのitemで重複判断をするのかを入れます。今回、講座02も講座03も「item.link」にiTunesリンクを入れてますので、このitemで重複チェックすれば良いんです。講座03で、itemの名称をurlからlinkに変えていたのはこの為です。
Uniqueモジュールを選択し、デバッガーで確認。重複が除かれました。
タイトルと中身を変更する
デバッガーを見ると、講座02の結果と、講座03の結果はitemの構成が異なることに気付きます。後々使うitemだけにしておいた方が良いので、ここで綺麗にしておきます。
以下は講座02(Yahoo! Search)のitemの構成。
上記itemの中で「y:repeatcount」「updatedon」は今後使わない為、不要です。
以下は講座03(Google API)のitemの構成。
上記itemの中で「GsearchResultClass」「content」「visibleUrl」「CacheUrl」「y:repeatcount」「titleNoFormatting」「unescapedUrl」も不要です。
とみくんから質問がありました。「itemの構成が異なる」という部分、補足します。
私はずっと、Unionで繋げた各itemは、出所がどっちかに依らず、itemの構成は一緒になると思っていたんです。しかし、下記を見ると出所によって異なると知りました。
で、今回の場合、Pipeを作る目的は「複数の検索結果を合体してiTunesリンクを取得する」だけだったので、他の色々なitemはその後も使わない(使うのはiTunesリンクだけ)と判断し、不要なitemを「空」にして大掃除したのでした。A型より。
手順5(Regexモジュール)
不要なitemを消すには、値を空にすると消えます。ということで「Regex」を使って、itemの中身を書き換えることで、itemを消していきます。
ライブラリから「Regex」を選び、キャンパスへドラッグ&ドロップします。
今回使う正規表現も「.*」のみ。先ほど不要としたitemを左辺に並べ、Replaceの部分には「.*」を記載。右辺は「空」。これで、itemにどんな値が入っていようとも消すことができます。試してみて下さい。
ついでなんで、結果のtitleと中身も今後の為に統一しておこうと思います。titleにはアプリid、descriptionにはiTunesリンクをセットしたいと思います。
descriptionを作るのは簡単。descriptionの全て「.*」をitem.linkの値で上書きしてあげれば良い。尚、Regexというか、Pipeのルールなんですが、左辺にitemを指定する場合は「item.description」と記載。一方、右辺でitemを使う場合は${link}と記載します。
titleはアプリidにしたい。このアプリidですが、iTunesリンクの「id」以降「?mt」までの間の数字の文字列が相当します。iTunesリンクからこの部分だけ抜き出すこともRegexを使って行います。最初にiTuneリンクをコピーし「id」以前を削除、そして「?mt」以降も削除。そうすれば残った値はアプリidだけになります。
尚、replaceの部分は「?」は正規表現では予約語でして、別の意味で使われます。
「?mt」をそのまま文字列として認識させるには「?」の前に「\」バックスラッシュを付ける必要があります。バックスラッシュが付くと、その後の「?」は単なる文字として扱われるんです。replace欄に予約語を記載する時には「\」が必要。これ重要です。
以上で今日のPipeは完成です!
結果をデバッガーで確認して下さい。item構成が綺麗になってるはず(・∀・)!
完成系はこちら。
あとがき…
元々の情報が、Pipeの中で変わっていく。合体したり、重複を省いたり、不要なitemを削除したり、全く違う値にしたり。これがマッシュアップの醍醐味です。好みの情報へ加工できることの楽しさが伝われば幸いです。私はパズルを説くように楽しんでます。
次回は、iTunesリンクからLinkshareリンクを作り出す部分を説明します。
こうやって欲しいとか要望があればTwitterやコメントにてご指摘下さい。今後のカリキュラムですが、またまた構成を入れ替えて以下のようになってます。
講座01(FetchFeed、Sort)講座02(Text/URLInput、Yahoo!Search、Filter、Regex)講座03(String/URLBuilder、FetchData、Rename)講座04(MyPipe、Union、Unique)←今ココ- 講座05(ItemBuilder)
- 講座06(Loop)
- 講座07(Dapperの使い方)
- 講座08(Dapper情報の取得、FetchPage)
- 講座09(NumberInput、SimpleMath)
- 講座10(良く使う正規表現まとめ)
- 講座11(MyPipeの可読性の向上)
- 講座12(Javascriptとの連携)
最後の講座12までのPipeのサンプルが完成しました。
このまま講座を続けていけば、AppHtmlが完成します。お楽しみに♪
-
タグ: Bookmarklet, Dapper, Google, hiroスタイル, Yahoo!Pipes
[...] Turn it on in Settings › Safari to view this website. [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) | 普通のサラリーマンのiPhone日記 12月 30th, 2010 @ 03:54 pm › tyudon ↓ Leave a comment [Pipes [...]
[...] iPhoneに関する、はてなブックマーク新着情報です。 [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) | 普通のサラリーマンのiPhone日記 [...]
[...] [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) | 普通のサラリーマンのiPhone日記 [...]
[...] [Pipes] 講座04(MyPipe、Union、Unique) [...]
[...] [Pipes] 講座04(MyPipe、Union、Unique) [...]
[...] [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) [...]
[...] [Pipes] 講座04(MyPipe、Union、Unique) [...]
[...] [Pipes] 講座04(MyPipe、Union、Unique) [...]
[...] [Pipes] 講座04(MyPipe、Union、Unique) [...]
[...] [Pipes] 講座04(MyPipe、Union、Unique) [...]
[...] [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) Categories: App開発 Tags: Bookmarklet, Dapper, Google, hiroスタイル, Yahoo!Pipes [...]
[...] [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) [...]
[...] ◆ 普通のサラリーマンのiPhone日記 [Pipes] Yahoo! Pipes講座06(Loop) ◆ 普通のサラリーマンのiPhone日記 [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) [...]