shinobi access log

web Font

2010年12月28日火曜日

【Pipes】Pipes講座02を読んで(My lesson-02)

おおー!もうPipes講座02が始まっていた!!

[Pipes] Yahoo! Pipes講座02(Text/URLInput、Yahoo!Search、Filter、Regex) | 普通のサラリーマンのiPhone日記a??a?Re¨?ao?a?Ra? ̄a?|a?ae¢≪a??a??a? ̄a??a??a? ̄a?°

さっそく読んでいく!

このエントリは自分自身への備忘録と演習となっています。ひとつひとつ自分なりに理解しながら進めていくので、ヒロさん(@hiro45jp)のページに書いてあることが「まんま」出てきますがご了承ください。本家Pipes講座と対比しながら読むと完結する形式になってます。

ココから先は「Pipes講座02」を読みながら反芻していく過程になります。読みながら思いついたことを書き残していくことにします。特に「⇒」矢印以降は私の考察となります。

・Pipes: 講座02(Yahoo! Search)を読んで思いついたことあれこれ


前回の補足(デバッガーの見方)
・デバッガーの見方が少しわかって来た!(完成系を確認しながら)
・どのRSSフィードも共通的に持っている情報がある。title、description、pubDateは代表選手。これらの情報を総称して「item」という。

・代表的なアイテム(item)
「link」元サイトへのリンクが入ってる。
「description」RSSフィードの中身。この中身を加工していく。
「dc:creator」RSSフィードの投稿者。たまに使う程度。
「title」RSSフィードのタイトル。この中身も良く加工する。
「category」タグとか入ってくる。iTunes情報だとジャンルが入るみたい。
「pubDate」配信された日時が入ってる。並び順変更とかで使う。

・なのでitemの中見をPipeの中で指定して使う場合は「item.pubDate」のように記載される。
⇒なるほど!


AppHtmlの解説(iTunesリンクの取得)
・いよいよ「AppHtmlの解説」はじまる!
・AppHtmlは、検索のヒット率を重要視してたのか。
・App検索は3つの手法を用いて行っていたのか!さらに3つの検索を同時並行に走らせているのね。初めて知りました。

3つの検索手法
1.Yahoo! SearchによるiTunesリンクの取得
2.Google APIによるiTunesリンクの取得
3.Google Web検索(Dapper経由)によるiTunesリンクの取得


「Yahoo! Searchモジュールを使う」
6種のモジュールを駆使して、Yahoo! Searchの結果を返すPipeを作っていきます。

1.Text Inputモジュール(手順1)
Text Inputを使うと「Run Pipe」時に入力欄が出てきます。この入力欄に値を入れることでひとつのPipeでも複数の結果を返してくれるようになります。
⇒おおーなるほど!

「Name」Pipe内で使う呼び名。「kwd」と入れる。
「Prompt」入力値のラベル名。こちらも「kwd」と入れる。
「Position」入力値の表示順番。「1」と入れる。
「Default」入力値の初期値。「textforce」と入れる。アプリ名の指定。
「Debug」Pipe内の初期値。Defaultと同じ値を入れる。

・Pipe内で挙動確認する際には、この「Debug」の中身を色々と変更して動作確認。⇒なるほど!

2.URL Inputモジュール(手順2)
先ほどのText Inputと属性が違うだけで指定する箇所や意味は一緒。
・Textと何が違う? Pipeでは同じURLでもTextに書かれたものと、URLは分けています。Textを必要とするもの、URLを必要とするものがあるので、適宜使い分けていくと良い。
⇒なるほど!次のモジュールは何を必要としているのか?を考えて使い分けるのね。

3.Yahoo! Searchモジュール(手順3)
今回の目玉モジュール。Yahoo!の検索結果をRSSにして返してくれる神モジュール!⇒おおー、そなのかー!

手順1と手順2で作成したInputモジュールとYahoo! Searchモジュールを繋ぎます。

Site restriction = サイト規制
⇒つまり検索キーワード(手順1)でYahoo!検索した結果をhttp://itunes.apple.com(手順2)に関係するもので規制すると言うことかな?
⇒でもデバッグ見ると必要以上にヒット。そこでフィルタリングが必要になるのね。


「結果をフィルタリングする」
4.Filterモジュール(手順4)
・Filterモジュールは、指定した条件(複数指定可)に合致するものを、許したり、ブロックしたりが指定できます。

Filter条件について
「Permit」は合致するものを許す「Block」は合致するものをブロック。
「all」は条件の全てが合致条件「any」は条件のどれかが合致条件。
「Rules」の左辺はチェック対象。「item.link」を入れる。
「Contans」は含まれるという意味。他にも指定できますが、これしか使わん。
「text」ここにURL Inputの結果を紐付ける。
⇒「Contans」しか使わなくても出来るのねw

⇒で、もいっかいリンクでフィルタリング。URLインプットした条件「http://itunes.apple.com/jp/app」でフィルタをかけるのか。
すっげー!たしかにデバッグ結果が「iTunes App Store で見つかる…」だけになってる!

5.Regexモジュール(手順5)
Regexモジュールは、対象となるitemを特定条件で置換することができる。

手順4のフィルタリングで日本のAppStoreだけの結果になった。しかし……変なアプリもヒットしてる。
ということでノイズ除去の為に、もうひと工夫がはいってる。
⇒ほほーデバッグ結果を見ると本物(検索したいもの)以外には「description」内に本アプリ名以外のアプリが入ってますね。

文章の法則性を発見した。「についての情報…」以降のdesctiptionをカットしちゃえば、余計な単語を拾ってこなくなるはず!!
⇒なるほど!ココは手作業で法則を解析そしてフィルタリングすべき条件を抽出。さすがです。

Regexモジュール。条件指定には「正規表現」というのが使えるんですが……∑(O_O;)
これが奥が深い。AppHtmlでも正規表現をたくさん使ってます。今回は、もっとも簡単なところだけにします。
⇒なんとか回避(o´д`o)=3

※「正規表現」については今後の講座で何度も紹介し、最後にまとめもしたいと思ってます。それくらい重要です。

今回は「item.description」の中で「についての情報.*」を「空」に置換してます。「についての情報.*」の「.*」にご注目。これが正規表現です。意味的には「についての情報」という文字以降の全てを指し、これらの文字列を「空」にしちゃいます。
⇒「.*」これが正規表現!

無事にメインとなるアプリ名以外は除去されました
⇒なるほどメインのアプリ名が本リンク以外の検索結果の中に表記されないように消すことがRegexモジュールの役目なのね。
⇒ここはキモだなー。検索に引っ掛からないようにするためにフィルタリングで広く拾い過ぎた結果から不必要なものを振り落とすひと手間が必要。そこで拾い上げの条件を探し出してメイン以外を引っかからないように一部結果を書き変える。今回は不要に出てくるところを消してます。
⇒単純にFilterモジュールで一発解決出来るわけではないのね。人の思考をプログラムに反映させることが大事そう。この時に何を使って欲しい条件を吸い上げるかを考えてモジュールを使い分けていくんだな。_φ(・_・

6.Filterモジュール(手順6)
最後に更にFilterモジュールを追加し「descriptionの中に指定したアプリ名称が含まれているか」という絞込条件を入れます。Text部分は、Text Inputの値と紐付けます。

⇒なるほどこれでフィルタリングかけると「description」内にあるアプリ名はメインアプリのみとなるのか!さすが。


「見つかった課題と対処の方針」
今回のようにPipeはモジュールを駆使し、結果を途中で確認しながら、ちょっとずつ手直しして作っていきます。うまくいかないことも多いのですが、法則性を発見し、その法則を当てはめることで目的に達する。そんな頭のトレーニングにもなります。


今回のメインテーマはこれだ!「頭のトレーニング」


⇒「description」RSSフィードの中身。この中身を加工していく。
これをどうやって書き変えて(フィルタリングして)欲しい条件に達するか。こうやって目的の結果を導き出すのね!

お疲れ様でした。

Kazwoo

0 件のコメント:

コメントを投稿