以前Livedoorがサービスを終了するとなった時にFastladderを動かし始めて、Dwangoが引き継いでからも適当に動かしつつDwangoの方をメインに使用していたのですが、Dwangoもいよいよ終了してしまったので再びFastladderをいじることにしました。
当時と比べると、mikutterのクソプラグイン作成で多少の経験値が積まれたと思われるので、諸々の問題が解決できたような気がします。おもにクローラー周りに取得できない問題が色々あって、そこを集中的に直しました。成果物はForkしたリポジトリのcrawlerブランチに置きました。
プルリクまでできれば良いのですが、修正よりもコミット文の英語のほうが怪しくて気が引けたので、していません。もしアレでしたらなんかいい感じになりますように。
インストール環境はざっくりUbuntu16.04+MySQL+Apacheです。Dockerのことはよくわからないのでそのままインストールしています。
また、このブログを書くもとにしたメモ書きはこちら。
絵文字(4bytes UTF-8)対応
気がついたらいまどきの絵文字は4バイトで表現されているそうで、MySQLではutf8を使うと絵文字でやられるようです。代わりにutf8mb4を使うと良いみたいです。
create database fastladder charset=utf8mb4;
あとから変更するならこう
ALTER TABLE <<テーブル名>> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
URLが長すぎるフィードの取得対応
「URL 長いフィードクロールできない · Issue #188 · fastladder/fastladder · GitHub」に相当する問題ですが、linkの型をvarchar(255)からtextに変更して対応してみました。
alter table items modify link text;
fastladder/lib/fastladder/crawler.rbの改良
以下の通り改良しました。
- カテゴリーがないフィードの考慮漏れに対応。Engadget JapaneseのRSSで見られた
- cut_off()メソッドの引数にfeedが足りないので足した
- リンクタグの加工時にリンクではない文字(typoとかで不正になってるリンク)が混じるとフィードのクロールに失敗する問題を解消
- delete_old_items_if_new_items_are_many()をコメントアウト
- そもそもcut_off()と同様feedが足りない、Items.where(feed_id: feed.id).delete_all →Item.whereのtypoがある
- が、そもそもこの処理がない方が挙動としてはいい感じになった
- systemdで動かすように、SIGTERMを受け取ったらTerminateするように書きくわえた
systemdで動かす
いまどき的にはSystemdでサービスを上げ下げできたほうがうれしいので適当に書きました。
- /etc/systemd/system/fastladder-crawler.service
[Unit] Description=Fastladder crawler After=syslog.target network.target [Service] Type=simple ExecStart=/usr/bin/ruby2.3 script/crawler -e production -l /var/log/fastladder/crawler.log WorkingDirectory=/var/www/fastladder KillMode=process Restart=always User=*** Group=*** [Install] WantedBy=multi-user.target
- /etc/systemd/system/fastladder-web.service
[Unit] Description=Fastladder web frontend After=syslog.target network.target [Service] Type=simple ExecStart=/usr/local/bin/rails server -b 127.0.0.1 -e production WorkingDirectory=/var/www/fastladder KillMode=process Restart=always User=*** Group=*** [Install] WantedBy=multi-user.target
ロゴ
せっかくなのでロゴでも差し替えようかなと思ったんですが、いい感じのミク絵がないですね……。