下林明正のブログ

個人的かつ雑多なブログです。

年末年始なのでpixivをフィードに変換するプロダクトをリプレースした

Instagram

https://github.com/shimobayashi/i_love_pixiv

これまで運用していたやつのコードがヤバすぎて保守したくない上に実行効率も悪かったので、pixiv gemに乗っかれるところは乗っかりつつなるべくEventMachineの流儀に従って書きなおした。

前のはHTTPプロキシを拾ってきてとりあえず試すという酷い実装だったけど、torsocksという便利な存在を知ってそちらに乗っかることでスリム化できた。本当はコネクション個別にSOCKSプロキシの設定をしたかったのだけど、em-http-requestからSOCKSプロキシを利用する方法が分からなかった(em-http-requestの該当箇所のテストもいじっても通りそうになかった)。 そもそも、間違ってtorsocksを通さなくてもBANされなかったので、IPアドレスベースのBAN自体されなくなった?かなり緩くなってる?からこういう小細工は要らないのかも知れない。

https://github.com/shimobayashi/vimage

ついでにRailsでこしらえた画像アップローダーもたまに動かなくなるしレスポンスが遅いしem-http-requestからblobのままファイルをPOSTする方法が分からなかったので、Sinatraで書きなおした。

以前は偶然Rails触ってたからプラグイン適当にぶち込めば簡単にできるんじゃね?と思ってRailsで実装してたけど、あんまりメリットなかった。 Sinatraで書きなおしたところ、かなりコンパクトに実装できたしレスポンスもかなり改善されたので良かった。 ファイルアップロード部に関しても、ファイルデータをbase64エンコードして通常のパラメーターのようにPOSTさせることで回避できた。ブラウザからのファイルアップロードではFile APIを利用して裏でbase64エンコードすることで誤魔化している。ファイルアップロードのリクエストは不必要に複雑だから、この実装で単純になって便利な気がした。

とはいえどちらのプロダクトもテスト書いてないのでその内ぶっ壊れると思う。ぶっ壊れたらその頃にはまた別の良い書き方があるだろうから、フルスクラッチする良い機会だと思っている。