Yahoo!PipesでInstaReaderを作ってみよう♪
ご無沙汰しています。本業の方がバタバタしてまして、本当に久々のエントリーになってしまいました。
今年もブログを書いていきますので、何とぞよろしくお願いします。
本年の第一本目は、昨年最後のエントリーがYahoo!Pipes系のものだったので、もいっちょPipesネタでやってみます。
0.はじめに
このエントリーのタイトルについて、釣りじゃねぇか?と思われた方!
半分正解です(;^ω^)
確かにInstaReaderっぽいものは、Yahoo!Pipesを使うことで作れるんですが、今回の目的はYahoo!Pipesを普段とは違う用途で使ってみて、可能性を探ってみようということ。
では、参りましょう!
1.InstaReaderってそもそも何?
ちょっと前に話題になったWebサービスです。
Google Readerで読んでいる記事にスターをつけると、あとで読むサービスとして有名なInstapaperに登録してくれるというものです。
2.Yahoo!Pipesの普段とは違う用途って?
ご存じの方も多いと思うので、詳細の説明は避けますが、Yahoo!Pipesを使えば、Web上のさまざまなリソースを参照して、自分が使いやすい状態に加工できます。
これが普段の使い方だと思うんですが、今回はアクセスするURLだけを加工しアクセス、返ってくる中身は一切使用しないという使い方をします。
つまり、特定のURLにアクセスさせるためだけに使います。
これをやることで、単純なGETで成立するような外部APIをコールすることができるので、うまくいけば外部Webサービス上のデータの更新なども行えるということですね。
今回は、その一例としてInstapaperのAPIを使用し、InstaReaderもどきを作ります。
3.InstapaperのAPI
早速、InstapaperのAPIを見てみます。InstapaperのAPIは私が知る中でもすごく簡単な部類に入ります(^^)
「Adding URLs to an Instapaper account」の部分を見ていただきたいんですが、
https://www.instapaper.com/api/add?username=****&password=****&url=****
というURLにアクセスすることで、urlに指定したページがInstapaperに登録されます。
4.Pipesの説明
今回作ってみたPipesの説明をしてみたいと思います。
4.1.前半(Instapaper登録用のURL作成まで)
InstaReaderもどきをつくるので、最初のインプットは、Google ReaderのStarred Item(Google Readerでスターをつけた記事のRSS)です。そこから各記事のURLを使ってやろうという作戦です。
その他、Instapaper登録用のURLに必要なInstapaperのユーザ名、パスワードをインプットとして使います。
ちなみに、使ってみたいという方がいましたら、Pipesをコピーして、矢印を引いたこの3点を変更して下さい。
Google Starred Itemの公開設定をお忘れなく!
ここまでのステップでスターを付けた記事をInstapaperに登録するためのURLの作成が完了です。
4.2.後半(Instapaper登録用URLへのアクセス)
実は、ここで問題が発生!
ここで作ったURLでアクセスすると、Instapaperはテキスト形式(text/plain)でHTTPのステータスコードを返すのですが、Yahoo!PipesのFetch〜モジュールではそれが扱えません。
なので、YQLというYahooのデータ操作用のマニアックなモジュールを使います。
Yahoo!Pipesでtext/plainなコンテンツを操作するモジュールはこれしかないみたい…
最初にYQLモジュール用の文字列をつくっています。
select * from html url="Instapaper登録用のURL"
という文字列をつくって、YQLモジュールに渡します。
YQLが実行されると、Yahoo!PipesはInstapaper登録用のURLにコンテンツを取得しに行きます。
これで、Instapaperへ記事を登録することができます!
5.自動化のためのもう一手
作成したPipesのURLにアクセスすれば、Instapaperに記事を登録することができます。
ただし、これをInstaReaderもどきにするためには、自動化してあげないといけません。
これには、外部Webサービスの力を借ります(;^ω^)
かっこ悪いんですが、これもマッシュアップということで…
作成したPipesのURLをコピーして、定期的にURLにアクセスしてくれるサービスに登録します。
それには、twitterfeedやdlvr.itなどのフィードをSNSに共有するサービスを使ってもいいのですが、ここでは単にURLにアクセスさせたいだけなので冗長です。
以下の様なサービスが、良いかもです。
Web版のcronです。
ただし、これらのサービスは、Twitter botなどの台頭により、各種Webサービスから目をつけられやすい存在なので、適度に間隔をあけて実行させるのが良いと思います。
6.おわりに(裏話)
やってみると、それほど難しいことでもないんですが、マッシュアップしていると本当にいろんな制約にひっかかります。
それと対峙して、どうクリアするかを考えるのは楽しいんですが、どうにもできないことの方が多いです(笑)
今回、作成したInstaReaderもどきですが、裏話をしておくと
- Instapaper上でタイトルが文字化けすることがあります
タイトルの取得はInstapaperに任せちゃってます - Yahoo!Pipesの制限にひっかかるかも…
twitterfeedやdlvr.itを自動化でオススメしなかったのは、これが理由です。Yahoo!Pipesにも呼び出し回数に制限があるらしく、有名なサービスからの呼び出しはかなり制限されているっぽいです。 - Instapaperは基本的にYahoo!Pipesから使用できない
Instapaperはロボット対策により、Yahoo!Pipesからのアクセスをはじくんですが、なぜかAPIの口は防がれていませんでした。なので、そのうち使えなくなるかも(;^ω^)
などなどです。
Instapaperであとで読むことなんて100%ないのに、APIの簡単さだけでInstapaperをチョイスして、悩みながらPipesとその記事を書いてみた私でした(;^ω^)
簡単なインタフェースのAPIを探しては、マッシュアップの道を探ってみる。
そうすれば、プログラミングとかできなくてもWebサービスが作れるかもしれませんね。
改めまして、今年もよろしくお願いします(^-^)/