普通のサラリーマンのiPhone日記 Rotating Header Image

[Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique)

Yahoo! Pipes講座の4回目。これまでのエントリーはこちら。

今日は、講座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

Similar Posts:

13 Comments

  1. [...] 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 [...]

  2. [...] iPhoneに関する、はてなブックマーク新着情報です。 [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) | 普通のサラリーマンのiPhone日記 [...]

  3. [...] [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) | 普通のサラリーマンのiPhone日記 [...]

  4. [...] [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) [...]

  5. [...] [Pipes] 講座04(MyPipe、Union、Unique) [...]

  6. [...] [Pipes] 講座04(MyPipe、Union、Unique) [...]

  7. [...] [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) Categories: App開発 Tags: Bookmarklet, Dapper, Google, hiroスタイル, Yahoo!Pipes [...]

  8. [...] ◆ 普通のサラリーマンのiPhone日記 [Pipes] Yahoo! Pipes講座06(Loop) ◆ 普通のサラリーマンのiPhone日記 [Pipes] Yahoo! Pipes講座04(MyPipe、Union、Unique) [...]

コメントをどうぞ

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>