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作成まで)

Pipes: editing 'InstaReaderPipe' - Firefox

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なコンテンツを操作するモジュールはこれしかないみたい…

Pipes: editing 'InstaReaderPipe' - Firefox

最初にYQLモジュール用の文字列をつくっています。

select * from html url="Instapaper登録用のURL"

という文字列をつくって、YQLモジュールに渡します。
YQLが実行されると、Yahoo!PipesはInstapaper登録用のURLにコンテンツを取得しに行きます。
これで、Instapaperへ記事を登録することができます!

5.自動化のためのもう一手

作成したPipesのURLにアクセスすれば、Instapaperに記事を登録することができます。
ただし、これをInstaReaderもどきにするためには、自動化してあげないといけません。
これには、外部Webサービスの力を借ります(;^ω^)

かっこ悪いんですが、これもマッシュアップということで…

Pipes: InstaReaderPipe - Firefox

作成したPipesのURLをコピーして、定期的にURLにアクセスしてくれるサービスに登録します。
それには、twitterfeeddlvr.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サービスが作れるかもしれませんね。

改めまして、今年もよろしくお願いします(^-^)/