Yahoo! Pipes講座の5回目。これまでのエントリーはこちら。
- [Pipes] Yahoo! Pipesを勉強したい方へ
- [Pipes] 講座01(FetchFeed、Sort)
- [Pipes] 講座02(Text/URLInput、Yahoo!Search、Filter、Regex)
- [Pipes] 講座03(String/URLBuilder、FetchData、Rename)
- [Pipes] 講座04(MyPipe、Union、Unique)
前回までで、アプリ名からiTunesリンクを取得するところまで作成できました。今回の講座では、いよいよiTunesリンクからLinkshareリンクを作成するところまで紹介します。
Linkshareの詳細はこちらから。
AppStoreのLinkshare用のURLを作成するには、Linkshareが提供している「iTunes Link Maker」というWebサイトを使うように言われています。しかし、このサイトは大量にリンクを作成するには正直、不向き。毎回、途方もない時間を費やしてました。
Linkshareリンクの法則
ここから先はいかなる問題が発生しようと自己責任にてお願いします…。
「iTunes Link Maker」はぶっちゃけ不便。なのでPipeで「iTunes Link Maker」が作るLinkshareリンクと同様のリンクを作ってしまおうというのが講座05のテーマです。
一方、リスクもあります。
iTunesのアプリへのリンクは過去にも何度も変更されています。又、Linkshareのリンクもいつ構成が変更になるのか分かりません。だがしかし、もし変更されたらこのPipeをいじって修正すればいいじゃん!ということで今の仕様で作成しちゃいます。
こちらが「iTunes Link Maker」で作ったTextforceのLinkshareリンク。長いんです…。しかし、法則性があるっぽい。法則を探るのがクイズのようで楽しいです。
- 「http://click.linksynergy.com/fs-bin/stat?」これがベースURL。
- 「id=Rfg6nizvNEs」id以降はLinkshareのサイトid。各自違う。
- 「&offerid=94348」固定値っぽい。どのアプリでも一緒。
- 「&type=3」固定値っぽい。どのアプリでも一緒。
- 「&subid=0」固定値っぽい。どのアプリでも一緒。
- 「&tmpid=2192」固定値っぽい。どのアプリでも一緒。
- 「&RD_PARM1=…..」…..の部分はiTunesリンクっぽい (´・ω・`)
ということでサイトidは各自のidによって異なります。後は「&RD_PARM1=」以降の法則が分かればPipeでも作れるということになる。以下のURLに注目してみる。
http%253A%252F%252Fitunes.apple.com%252Fjp%252Fapp
%252Ftextforce-dropbox-text-editing%252Fid396444947%253Fmt
%253D8%2526uo%253D4%2526partnerId%253D30
黒字はどのアプリでも一緒っぽい。違いがあるとすれば、赤字の部分。実はこの赤字の部分、iTunesリンクを2回ほど加工すると作り出すことができちゃうのです。
http://itunes.apple.com/jp/app/textforce-dropbox-text-editing/id396444947?mt=8
上記がiTunesリンク。ここに以下の変換を噛ませてみる。
「% → %25」「 → %20」「” → %22」「& → %26」「’ → %27」「/ → %2F」「? → %3F」「\ → %5C」「: → %3A」「= → %3D」
そして更にもう一回。
「% → %25」「 → %20」「” → %22」「& → %26」「’ → %27」「/ → %2F」「? → %3F」「\ → %5C」「: → %3A」「= → %3D」
すると…。さっきの赤字の部分になります(゚Д゚ )!
http%253A%252F%252Fitunes.apple.com%252Fjp%252Fapp
%252Ftextforce-dropbox-text-editing%252Fid396444947%253Fmt
%253D8
後は赤字部分の前に「http://click.linksynergy…..」の部分をくっつけ、後ろに先ほどの黒字部分「%2526uo%253D4%2526partnerId%253D30」をくっつける。
これでLinkshareリンクが完成です!
PipeでiTunesリンクを加工する
Linkshareリンクの法則をPipesを使って実現してみます。
手順1(Text Inputモジュール)
iTunesリンクをPipeの外から指定する為にText Inputを使います。
ライブラリから「Text Input」を選び、キャンパスへドラッグ&ドロップします。
Text Inputは以下のように設定します。
- 「Name」Pipe内で使う呼び名。「url」と入れる。
- 「Prompt」入力値のラベル名。こちらも「url」と入れる。
- 「Position」入力値の表示順番。「1」と入れる。
- 「Default」入力値の初期値。「http://itunes.apple.com/jp/app/textforce-dropbox-text-editing/id396444947?mt=8」と入れる。
- 「Debug」Pipe内の初期値。Defaultと同じ値を入れる。
手順2(Item Builderモジュール)
Text Input(URL、Numberも同様)で入力した値をそのまんまitemに変換してくれるのがItem Builderです。変換しないままだと、例えばRegexモジュール等で、右辺にしか入力値は使えませんが、itemにすれば左辺でも使えるようになります。「入力値をRegexを使って加工したい」そんなニーズがある場合、Item Builderを噛ますと良いです。
ライブラリから「Item Builder」を選び、キャンパスへドラッグ&ドロップします。
入力値を「description」に命名します。
手順3(Renameモジュール)
descriptionを後々は、LInkshareリンクにしていきますが、オリジナルのiTunesリンクを控えておく為に「temp」というitemにコピーしておきます。
ライブラリから「Rename」を選び、キャンパスへドラッグ&ドロップします。
「item.description」を「Copy As」で「temp」にコピーします。
手順4(Regexモジュール)
いよいよ、Linkshareリンクの法則に基づいた変換をしていきます。「description」にはiTunesリンクが入っているので、このitemに変換をかけていきます。
ライブラリから「Regex」を選び、キャンパスへドラッグ&ドロップします。
1回目の変換です。ここでRegexの「g」にチェックが付いてるところにご注目。「g」は繰り返しを意味してます。例えば、descriptionに「%」が複数存在する場合、その全てを「%25」に変換する。そういった場合に「g」にチェックを入れます。チェックを入れない場合、最初にヒットした1つだけを変換します。用途に合わせて使い分けて下さい。
更に、ライブラリから「Regex」を選び、キャンパスへドラッグ&ドロップします。
2回目の変換です。これで法則のところで紹介した赤字部分が完成しました!デバッガーで結果を確認してみましょう。あともう少しです。
手順5(Text Input、String Builderモジュール)
Linkshareリンクを完成させるべく、今度は「http://click.linksynergy….」の部分を作ります。途中にLinkshareのサイトidがあるのでText Inputでidを繋げます。
ライブラリから「Text Input」を選び、キャンパスへドラッグ&ドロップします。
Text Inputは以下のように設定します。
- 「Name」Pipe内で使う呼び名。「id」と入れる。
- 「Prompt」入力値のラベル名。こちらも「id」と入れる。
- 「Position」入力値の表示順番。「2」と入れる。
- 「Default」入力値の初期値。各自の「サイトid」を入れる。
- 「Debug」Pipe内の初期値。Defaultと同じ値を入れる。
サイトidの調べ方は以前になしこさんがまとめて下さってます。
ライブラリから「String Builder」を選び、キャンパスへドラッグ&ドロップします。
String Builderには入力欄を3つ用意します。
- 1行目には「http://click.linksynergy.com/fs-bin/stat?id=」と入れる。
- 2行目にはText Inputの値(=サイトid)を入れる。
- 3行目には「&offerid=94348&type=3&subid=0&tmpid=2192&RD_PARM1=」を入れる。
以上で、手順4の赤字部分の前に入れる文字列が完成しました。
手順6(Regexモジュール)
最後に手順4の赤字部分の前に「http://click.linksynergy….」後ろに「%2526uo%253D4%2526partnerId%253D30」を追加し、Linkshareリンクを完成させます。
ライブラリから「Regex」を選び、キャンパスへドラッグ&ドロップします。
「description」には手順4の赤字部分が既に入ってます。赤字部分の前に手順5で作った文字列を追加します。「^」は正規表現で「先頭」を意味します。これも良く使います。with以降は、手順5で作ったString Builderを紐付けます。
文字列の最後を示す正規表現が「$」。これも良く使います。赤字部分の後ろに文字列「%2526uo%253D4%2526partnerId%253D30」を追加します。
以上で完成です!
サイトidが「DMY」だった場合の情報の分岐
AppHtmlを使う人の全てが、Linkshareをしている訳ではありません。していない人も数多くいると思ってます。そういった人達の為に、サイトidに「DMY」が指定された場合だけ、Linkshareリンクを作らず、そのまんまのiTunesリンクを返すようにしてます。
手順7(Regexモジュール)
ライブラリから「Regex」を選び、キャンパスへドラッグ&ドロップします。
現在、descriptionにはLinkshareリンクが入ってます。
このリンクの中に「id=DMY」という文字列が存在する場合、手順3でコピーしておいたiTunesリンクで置き換えます。もし、きちんとしたidが入っていた場合は、この置換はスルーされるのでLinkshareリンクのままになります。
「id=DMY」を「.*」で挟むことで、文字列の中のどこかに「id=DMY」があるならば、全てをitem.tempで置き換えるという指定ができます。Regexの右辺にitemを指定する場合には「${temp}」というように記載します。
最後、手順3でコピーした「item.temp」を「空」に掃除して終了です。
以上で完成です!Pipeが大きくなってきたんで全部表示できん…(゚Д゚;)
完成系はこちら。
Text Inputの「id」のDebug部分を「DMY」にすると、iTunesリンクが返されます。逆に「DMY」以外だとLinkshareリンクが返されます。尚、Linkshareリンクは「iTunes Link Maker」で生成されるリンクと一緒だと思います。
心配な方は確認してみて下さいまし。
あとがき…
今日の講座は、Pipeの講座というよりも、URLの法則性に従ってデータを加工することを主眼に説明をしてきました。又、idに何が指定されるのかによって、結果も変わってくるという、条件分岐もしてみました。いかがでしたでしょうか?
次回は、Yahoo! Pipesで挫折することの多い「Loop」モジュールを解説します。
こうやって欲しいとか要望があれば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との連携)
年内にどこまでいけるだろうか…。講座06まではいきたいなぁ。
-
タグ: Bookmarklet, Dapper, Google, hiroスタイル, Yahoo!Pipes
[...] iPhoneに関する、はてなブックマーク新着情報です。 [Pipes] Yahoo! Pipes講座05(ItemBuilder) | 普通のサラリーマンのiPhone日記 [...]
[...] Turn it on in Settings › Safari to view this website. [Pipes] Yahoo! Pipes講座05(ItemBuilder) | 普通のサラリーマンのiPhone日記 12月 30th, 2010 @ 10:25 pm › tyudon ↓ Leave a comment [Pipes] Yahoo! Pip [...]
[...] [Pipes] 講座05(ItemBuilder) [...]
[...] [Pipes] Yahoo! Pipes講座05(ItemBuilder) | 普通のサラリーマンのiPhone日記 [...]
[...] 講座01(FetchFeed、Sort)[Pipes] 講座02(Text/URLInput、Yahoo!S…[ このサイトへ ] [ ニコニコ風に見る ][ ブックマーク ] はてブ:0 / Livedoor:0 / [...]
[...] [Pipes] Yahoo! Pipes講座05(ItemBuilder) ソース投稿日 2010/12/31 20:55:04 Source: 普通のサラリーマンのiPhone日記 @ttachiコメント: 第5回きた! #macjp #iphonejp [...]
[...] [Pipes] 講座05(ItemBuilder) [...]
[...] [Pipes] Yahoo! Pipes講座05(ItemBuilder) [...]
[...] [Pipes] 講座05(ItemBuilder) [...]
[...] [Pipes] Yahoo! Pipes講座05(ItemBuilder) [...]
[...] [Pipes] Yahoo! Pipes講座05(ItemBuilder) [...]
[...] [Pipes] 講座05(ItemBuilder) [...]
[...] [Pipes] 講座05(ItemBuilder) [...]
[...] [Pipes] 講座05(ItemBuilder) [...]