金利0無利息キャッシング – キャッシングできます

 | 

2010-02-03

Page2FeedっていうAPIを作った件

17:37 | Page2FeedっていうAPIを作った件 - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - Page2FeedっていうAPIを作った件 - 金利0無利息キャッシング – キャッシングできます

http://ic.edge.jp/page2feed/

別の大きめの機能のリリース準備中なんですが、片手間に作ってみました。フレーム使ってるサイトとか今のところ動きませんが、おおむね上手く動くと思います。有志が作ってくれた野良フィード、と同程度のクオリティのものを自動で作れます。

リリースが早かったので「前々から作ってたのかな」みたいな反応もいくつか見ましたが、そういうわけではないです。ただ、過去に似たようなコードを書いたことがあるのですんなり出来ました。

アルゴリズムはこれに改良を加えたものです http://la.ma.la/blog/diary_200705301424.htm

実装開始 http://twitter.com/bulkneets/status/8240819145

リリース http://twitter.com/bulkneets/status/8358993519

twitterでフィードを吐いてないサイトのURLを募集して参考にしました。協力してくれた方に感謝します。よく考えたらなんでもRSSで購読されてるサイトを使えば良いので必要なかったかもしれない。

とりあえず動くものは3時間ぐらいで出来たと思います(面接試験に調度良い)、あとは2日ぐらいかけて精度の調整をやりました。既存のサービスと何が違うの、みたいなのがFAQだと思うのでいくつか比較してみます。

livedoor専用のAPIではない

既存の似たようなサービスは沢山あると思うのですが、

  • ユーザー登録が必要
  • URLからfeedのURLが求められなかったり(サービス独自のidを付ける)
  • なんか勝手に広告とか入ったりしそう or 有料サービスに誘導したがる
  • アクが強い(サービスのロゴとかクレジットとかデカデカと表示する)
  • いつサービス終了するか分からない
  • 予告なく止まったリBANされたりしそう
  • そもそもサービスの品質が微妙

というような具合で、タダ乗りしても良さそうなのが無かった。タダ乗りしても良さそうなサービスはこれらと逆の条件を満たしているサービスです。既存のサービスでタダ乗りしても良さげなのがあるならリンク張って終わりというのも考えたのですが、上記と逆の条件を全て満たすようなサービスが無かったので、片手間に作れそうだしせっかくなのでこの際作っておくか、ということになりました。

単体で収益挙げられるような要素が無いですけども、readerの付加価値が上がるので利益が出なくてもまあ問題ないでしょう。ラボですし。

Google Readerのと何が違うの

日本語のサイトでも変換出来ます。

http://googlereader.blogspot.com/2010/01/follow-changes-to-any-website.html

http://blogs.itmedia.co.jp/saito/2010/01/google-reader-6.html

any websiteって言うので、なんかインパクトが大きかったみたいで「LDRにも似たような機能を希望」とか要望が飛んできた。それで作ったので、後追いといえば後追いですが、

http://www.google.com/support/reader/bin/answer.py?hl=en&answer=172963

"Currently, only English-language content in HTML format is supported."としっかり書いてあります。英語のサイトに関しても、生成されたフィードが読みやすいとは思えなかった。実際に試さないで「これはすごい」とか「これは便利」とか記事を書くのは止めませんか。

現状英語のサイトにしか対応してないのを知らないで試して残念な思いをしている人がチラホラいる。

http://d.hatena.ne.jp/Imamura/20100202/googlereaderRSS

http://dullneko.typepad.com/blog/2010/02/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%89%E3%82%A2rss%E3%83%95%E3%82%A3%E3%83%BC%E3%83%89%E3%82%92%E8%87%AA%E5%8B%95%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bpage2feed-api%E5%85%AC%E9%96%8B--internet-watch.html

Page2FeedはGoogle Readerでも上手く動くみたいです。独立したAPIなのでタダ乗り歓迎です

http://bardiche.posterous.com/bbrss

なんでもRSSでは無い

なんでもRSSの問題点をいくつか挙げます。

  • フィードのURLと記事のURLが汚いです。
  • フィードのURLに解析した抽出すべき要素のXPathが含まれている
    • HTMLの構造が変わると以前に生成したフィードのURLが無効になります。
  • 日付情報が含まれていないと変換出来ません。
    • 名前のインパクトは大きいですが、全てのページを変換出来るわけではないです。
  • url#guid形式の独自のPermalinkを作ります。
    • Page2Feedでは要素中にhrefかidがあるならば、なるべくそれを使います。

フィードリーダーから記事をそのまま開いたり、ソーシャルブックマークの情報を参照しやすくするために、なるべく記事のリンクを抽出します。実用性を重視してます。

逆になんでもRSSとは違って日付情報を解析してないので、記事の更新時刻が正確ではありません。フィードリーダーが取得した時刻になるでしょう。

クロールして差分を記録するタイプでは無い

クロールして差分を記録するタイプ(page2rss.comやGoogle)は

  • ページが更新されるまで生成されるフィードの質が確認出来ない(プレビュー出来ない)
  • 過去のデータを蓄積しないと行けないので、ストレージが必要になる(著作権等への配慮も)

過去記事の蓄積と新着部分の判別はRSSリーダー側に任せて、HTMLをフィードに変換する処理は切り分けてしまった方が良いだろうと判断しました。必要なのは帯域とCPUパワーなので、もしアクセスが異常に増えても対応しやすい。1世代分は保存して学習に使った方が精度が上がるかな、とは思ってます。

本文抽出ではないです

スコアが高いのだけを出力すれば本文のみのフィードも作れるのですが、意図的に本文以外も入れています。生成されたフィードは未読管理機能があるフィードリーダーで使う前提です。本文以外の要素もフィードに入る場合がありますが、一度既読になってしまえば現れないからです。なので、例えばティッカーやFirefoxのライブブックマークには適さないでしょう。

学習やサイトごとの定義を(今のところ)使ってません

今のところしてません。例えばサイトごとの定義を作るとメンテナンスコストがかかります。ベースとなるアルゴリズムが優秀であれば、上手くいかないサイトに対してだけパッチを作れば良いことになります。定義作るとしてもタイプ(ニュース、日記、掲示板、など)に応じて各種閾値を調整するみたいな感じになると思います。学習や人力による調整を行わなくても、デフォルト状態でとりあえず良い感じのフィードを出力するのを目的としてます。

今後

元のコードがJavaScriptなんで今度はPerlからJavaScriptに移植すれば何かと役に立つかもしれない。JS実行したDOM構築後のフィード作ったり認証が必要なページをブラウザで解析して送ったりとか。

もう少し技術よりの解説を書くかもしれない。

 |