gotin blog

Whatever gotin wanna write

amazon検索するlingrボットをGreasemonkeyで作ってみた

というわけでlingrクライアントに続いてボットを作ってみました。
こちら↓です。
lingr_bot.user.js
lingrのroomページで実行できます。
Shiftキーを押しながらaを押すか、ページ上部のroom名が書かれているところの右側あたりに"bot"ボタンをクリックするかすると、"gm_bot"のニックネームのボットがそのroomに参戦します(もう一度同じことをするとボットが退室します)。
その状態で、


amazon javascript

なんて発言があると、javascriptをキーワードとしてamazon検索した結果をgm_botが発言してくれます。
詳細ページへのリンクも発言してくれるのですが、ちゃっかりあさましURLになってます(笑)
(amazonとlingrの規約的にOKなのかはまだ調べてません。やばいんでしたっけ?^^;)

それから一度に一件しか結果は発言しませんが、同じキーワードで検索発言をすれば順に結果を返してくれます。

例によってバグがあります。^^;;;
一度このスクリプトを動かすと、一旦動作をやめたあとwww.lingr.comへのアクセスがおかしくなります。原因を探って入るのですがよくわかってません。firefoxを再起動すれば元通りなのでブラウザの設定を壊してしまうような致命的なバグではありませんのでご心配なく(でもちょっと心配(笑))

↑このバグ修正しました。
In Browser Implementation Notes in Lingr Developer Wikiに載っているんですが、ひとつのHTTPクライアントは2つ以上同じ場所にコネクションをつなぐべきでないというHTTPの仕様(HTTP 1.1 RFC)からFirefoxもそのような実装になっているようで、 それがひとつの原因になっておりました。発言待ち処理でkeep-aliveになってしまっていたためにそのコネクションが残ってしまい、↑のバグのような症状が出てしまったのだと思われます。
ということで発言待ち処理をkeep-aliveにせず、かつ別www.lingr.comの代わりにgotin.bot.www.lingr.comにアクセスするようにして上記問題を回避しています。それでも複数つなごうとすればやはりバグが発生すると思います。その回避策もつくればなんとかなると思いますが、まぁそんなに一度に使わないでねってことで修正は気が向いたらやることとします。
→アクセス先のgotin.botのところに時刻+乱数でもつけてあげればある程度の解決になるかも。

↑この問題についてはLegendes.jpの方(であってますよね?^^;)にLingr 関連の開発(at Lingr)でいろいろと教えていただきました。ありがとうございました!