あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

Live Dwango Readerが終わってしまったのでFastladderを自分用に再び整備した話

以前Livedoorがサービスを終了するとなった時にFastladderを動かし始めて、Dwangoが引き継いでからも適当に動かしつつDwangoの方をメインに使用していたのですが、Dwangoもいよいよ終了してしまったので再びFastladderをいじることにしました。

akkiesoft.hatenablog.jp

当時と比べると、mikutterのクソプラグイン作成で多少の経験値が積まれたと思われるので、諸々の問題が解決できたような気がします。おもにクローラー周りに取得できない問題が色々あって、そこを集中的に直しました。成果物はForkしたリポジトリのcrawlerブランチに置きました。

github.com

プルリクまでできれば良いのですが、修正よりもコミット文の英語のほうが怪しくて気が引けたので、していません。もしアレでしたらなんかいい感じになりますように。

インストール環境はざっくりUbuntu16.04+MySQL+Apacheです。Dockerのことはよくわからないのでそのままインストールしています。

また、このブログを書くもとにしたメモ書きはこちら。

fastladderをいじるやつ · GitHub

絵文字(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でサービスを上げ下げできたほうがうれしいので適当に書きました。

[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
[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

新規ユーザー登録を潰す

お一人システムなので知らん人がたくさん入ってくるとまずいです。ので、新規ユーザー登録を潰しました。ブランチを分けてあります。

github.com

ロゴ

せっかくなのでロゴでも差し替えようかなと思ったんですが、いい感じのミク絵がないですね……。

f:id:Akkiesoft:20171009142210p:plain