タグ「Gunosy」が付けられているもの

Gunosy RSSのURL変更その他

  • 投稿日:
  • by

久しぶりにgunosy-rssのコードをいじりました。

まず、URLを変更しました。新しいURLは、

http://gunosy-rss.axlight.com/

です。以前のURLでアクセスした場合は301 Redirectされます。 RSSリーダーがちゃんとURLを書き換えてくれればよいのですが、 おそらくすべてのRSSリーダー/アグリゲータが対応しているということはないでしょう。

今後、旧URLではアクセスできなくなることがあるかもしれません。 というのも、herokuの無料枠で動かしているのですが、その条件が変わるためです。 将来的にDNSでアクセス先を変更したりすることを想定してのことです。

しかし、当面はそんな面倒なことをするつもりはありません。 とりあえず、無料枠で動かし続けるためには、6時間スリープさせればよいようなので、 rssのttlを設定してみました。今後RSSリーダー/アグリゲータがttl正しく解釈してくれれば、朝の5時以降と夕方の5時以降に取得するようになるはずです。 しかし、これはもっと早く実装しておけばよかったですね。 ちょっと様子を見た感じだとアクセス頻度がだいぶ減ったように思います。 503 Retry-Afterが返ることも減ったようですし、本家Gunosyへのアクセス負荷も下がるかもしれません。

JavaScriptのDateのタイムゾーンが手元とherokuで異なっていて、はまりました。 ちょっとスマートでない方法で解決したのと、もともとのコードがスマートでないので見苦しいですが、ttlの算出周りに興味があればコードを見てみてください。 たぶんきっともっといい書き方があるはずです。

他にも今から見ると書き直したい部分があったり、そもそもライブラリのアップデータもしたいのですが、そこまでモチベーションがわきません。まあそのうち、ついでがあれば。


5/24追記。

タイムゾーンを設定する方法がありました。

$ env TZ=Asia/Tokyo node app.js

これでコードはシンプルになりました。

https://github.com/dai-shi/gunosy-rss

Gunosy RSS がしばらく前から調子悪く、RSSが取得できていなかったので調べました。

初めの原因は、GunosyページのHTML構造が変わったからでした。 (ところで、何で変わったのでしょう。前バージョンのクリーンで先進的な感じでした。)

HTML構造はすぐに対応できたのですが、大変なのはそれからでした。 なぜか、リクエストがタイムアウトしてしまう現象が発生しました。

https://devcenter.heroku.com/articles/request-timeout

に書いてあるように、herokuは30秒しか待ってくれません。 それを大幅にオーバーしているようなのです。

試しに、30秒ごとに1バイトずつデータを送ってタイムアウトしないようにしてみました。しかし、そのうちメモリがあふれてしまいました。

次に、リクエストを並列で処理しないようにしました。処理中にリクエストが来た場合には503レスポンスを返します。親切にRetry-Afterヘッダもつけました。

これで多少改善されましたが、それでも1つの処理に20秒くらいかかることもあり、30秒を超えることもしばしばでした。

ところで、なぜ、この問題が簡単に解決できなかったかと言うと、 ローカル環境では再現しないからです。ローカルでは数秒で処理が終わるものが、herokuにデプロイした状態では数十秒から場合によっては1分以上かかってました。

これは仕方ないと思い、本番環境でデバッグしました。直るまでは正常に使えないことには変わりないという割り切りで。

で、発見しました。遅さの原因はJSONPathというライブラリでした。これが数十秒もかかってました。ローカルでは数秒。

https://github.com/s3u/JSONPath/issues/14

で報告されているのを発見し、古いバージョンを使うことにしました。 そうしたら、なんと数秒で処理が終わるようになりました。 ローカル環境では、1秒もかかりません。めでたし、めでたし。

しかし、ローカル環境とherokuで10倍から100倍くらいの差があるのは、なぜでしょう。単なるスペックの問題でしょうか。そうであれば納得はしますが、その場合はローカルでも低スペックを再現できるような環境が欲しいですね。

リクエストを並列で走らせないようにする処理は残したままです。完全に取ってしまうと、また不具合があったときに波及が大きいと考えたためです。ただ、せめて数本同時に走らせるようにしないと、503になるケースが多すぎる気もするので、それは今後対応できたらよいかと思います。#2

ところで、Gunosy RSSの不具合は誰も気づいていなかったのでしょうか。 それはそれでいいような、さびしいような。

Gunosy RSS はオープンソースで提供されています。ライセンスの範囲内で自由に使うことができます。

慣れている人は説明なしですぐにできると思いますが、どれだけ簡単にできるかを示すため手順を書いておきます。

前提:

  • herokuのアカウントがあること(なければ作る)
  • heroku toolbeltがインストールされ、SSH鍵が登録済であること
  • GitHubのアカウントがあること(なければ作る)
  • gitがインストールされていること

まず、GitHubからソースコードを取得します。

https://github.com/dai-shi/gunosy-rss

にアクセスして、右上のForkボタンを押して、自分のリポジトリにします。自分のリポジトリのページに行ってリポジトリのURLを確認します。 仮に、git@github.com:<username>/gunosy-rss.gitだったとします。

% git clone git@github.com:<username>/gunosy-rss.git

をコマンドラインで実行するとダウンロードされます。

% cd gunosy-rss

でディレクトリを移動します。

次に、herokuにアプリケーションを作ります。

% heroku apps:create <appname>

を実行するだけです。<appname>は省略も可能です。 作ったアプリケーションの情報を確認するため、

% heroku apps:info

とします。そこで表示される、Git URLとWeb URLが重要です。 それぞれ、git@heroku.com:<appname>.githttp://<appname>.herokuapp.com/だったとします。

% heroku config:set SITE_PREFIX=http://<appname>.herokuapp.com/

として、環境変数を登録します。

% git remote add heroku git@heroku.com:<appname>.git

として、リモートリポジトリを登録します。

% git push heroku

として、herokuにアップロードして、完了です。 http://<appname>.herokuapp.com/<gunosyid>.rssでRSSフィードが生成されます。

いかがでしょう?


補足

実は、GitHubのアカウント作らずForkもしなくても、上記のことはできます。ですが、せっかくなのでpull requestが送れるようにForkするのが、GitHubらしいのではないでしょうか。

herokuのアプリケーション情報を表示するところでは、

% heroku apps:info --app <appname>

とする必要があるかもしれません。

つまらなくならないGunosy RSS

  • 投稿日:
  • by

本家GunosyによるとGunosy RSSを使うと、クリック情報が反映されないためつまらなくなる可能性があるということでした。

これに対処するため、ログインしてGunosyのページを見たのと同じリダイレクトリンクをRSSで生成する機能を3/13に作りました (参照) 。これは設定に相当の知識を必要としたため、「上級者向け」としました。

今回、ちょっと敷居を下げるためにGunosy RSS設定ページを作りました。

依然としてクッキーの知識など必要ですが、多少分かりやすくなったのではないか、と期待します。

Gunosy RSSフィード生成Webサービス

から、「設定ページ」を開いてください。

生成されたRSSリンクの確認方法ですが、

  • 記事のURLがhttp://gunosy.com/redirect?で始まっていれば、クッキーの設定は正常
  • 記事のURLを開いて404エラーにならなければ、ユーザIDの設定は正常

です。このあたりも自動化できたらよさそうとは思っています。

Gunosy RSSをサムネイル画像に対応させました

  • 投稿日:
  • by

y_sanagi's diary で、RSSに画像がないという指摘を見つけたので、対応しました。

http://dai-shi.github.com/gunosy-rss/

特に使い方は変わらないので、説明は変更していません。

もしかして、サムネイル画像は不要という利用者もいるでしょうか?オプション指定できるようにしてもいいですが、ちょっとシンプルさが損なわれてしまうかもしれません。


ところで、「上級者向け」の設定はあまり使われていないのでしょうかね。もうちょっと簡単に設定できるようになればいいのですが。もともとのクッキーに'%'が入っていると'%25'に置換しないといけないので、ちょっと面倒なのです。

上級者向けGunosy RSS

  • 投稿日:
  • by

RSSでGunosyを利用する際の懸念点 を受けて、リダイレクトURLを出力できるように改造しました。

と、言っても一日でできるには限界があります。よって、上級者向けとなりました。

Gunosy RSSフィード 生成Webサービス

これをだれでも使えるようにするには、ちょっと苦労するかも。 Gunosyで公式にRSSがサポートされる予定はあるのでしょうか?

Gunosy RSSの反響まとめ

  • 投稿日:
  • by

なんかたった一日ですごいことになっています。 経緯を簡単にまとめておきます。

3/4にGunosy RSSを開発して公開しました。

Gunosy RSSフィード 生成Webサービス

リツイートが数件あったけど、あまりRSSリーダーを使う人はいないのかな、と思ってました。

それが、3/12の夜あたりから、ブログで取り上げられたようです。

私がiPhone用のGunosy公式アプリを削除した理由

GunosyのRSSフィードを生成してRSSリーダーに登録して読むと超快適

GunosyをRSSで利用する方法が凄い!RSSを利用している人はこのほうがGunosyも鍛えられるかも!

GunosyをRSSで読む方法「Gunosy RSS」

GunosyをRSSリーダーで読む方法をまとめてみた

その後、Gunosyから公式見解が。

RSSでGunosyを利用する際の懸念点

それを受けて、各ブログの反応。

GunosyをRSSで利用する人は要注意!Gunosy開発チームよりデメリットの公式発表がありました!

RSSでGunosyを利用する方法に関して重大な懸念点があると公式に表明がありました

GunosyをRSSで取得して読むと「鍛えられない」と公式がファイナルアンサーで、あなたは選択を迫られるわけだ

Gunosyの中の人がGunosyをRSSで利用することをおすすめしない理由

GunosyをRSSで利用することは公式にオススメできないそうです! じゃあどうする?

さて、どうしましょう。


追記。

GunosyをRSSに登録する方法と、それによるメリット/デメリット