いまさらだけど、Yahoo Pipesが面白い。
大まかな使い方は他のサイトを参考してもらうとして、自分が使っていて気づいた点というかメモを書いていきます。
Fetch Pageについて
サイトのHTMLデータをスクレイピングするためのモジュールなのだが、サイトのencodingが、utf-8以外だとパースエラーとなる場合がある。ならない場合もある(謎)。仕方ないのでphpのスクリプトを1つかまして、mb_convert_encodingして渡すが、metaのcharsetもちゃんと変えてないとエラーになる。charset見てるんならutf-8以外も対応してほしいなー。
regexの正規表現について
Operators > regex
では、入力データを正規表現で置換できる。しかし、いわゆるPHPやPerlと完全互換では無いようだ。具体的には、一部のメタ文字や文字クラスが使えない。たとえば、
\w – 英数字
\W – 英数字以外
や、
[:alnum:] – 英数字
[:blank:] – ブランク
など。しょうがないので[0-9]{n}という感じで書くしかない。
Yahoo Pipesが改変するもの
Fetch Pageで取ってきた時点で、HTML中のアンカー(aタグ)において、相対パスは、絶対パスに置き換えられ、rel=”nofollow” target=”_blank”が追加される。targetに違うものが設定されていても、_blankに上書きされる。
まぁ、Yahoo Pipes師匠の言いたいこともわからんでもないが、Fetch Pageの時点でデータが改変されていることに注意したい。
相対パスが絶対パスに置き換わるという点においては、文字コード変換のプロクシスクリプトをかましている場合、そのスクリプトのホストが絶対パスのベースとなるので、RSS出力した際に、相対パスからのリンクがそのホストからになり、当然、404となる。Fetch Pageの後でその部分を再度regexして、オリジナルのホストに戻してやる必要がある。
基本、Fetch Pageしたあとはregexで置換するんだけど、古いサイトだと、HTMLもむちゃくちゃだから、簡単な正規表現ではなかなか置換できない。ここ数日、ひたすら正規表現の練習である。
正規表現は、パズルみたいで面白いけど。
あとは、if(exp)で分岐できたり、各モジュールに一言コメントを入力できると、便利なんだけどなー
[ 追記 ]
2年前にすでにYahoo! Pipes の Page Fetch モジュールでスクレイピングし放題 – てっく煮ブログ さんで同じようなこと書かれてた…僕は2年遅れてたってことか orz=3
Popularity: 3% [?]




