2019年09月一覧

技術書典用 被サークルチェック数チェッカー

毎晩、被チェック数が増えているかな?とページをアクセスして覗いていましたが、自動化の話を見かけたので自分もチャレンジしました。前記事の続きとなりますが、ようやく動く物ができたので共有します。自分は今これをつかって確認しています。

被サークルチェック数チェッカー

Selenium とヘッドレス Chrome で技術書典の被サークルチェック数を取り出すものを書いてみました。

最初は操作を確認しつつ、うまくいってからヘッドレス化してという作業手順でやっていました。このとき、ヘッドレス化してエラーが出た場合には進行状況を見るのにヘッドレス Chrome の画面を撮影してデバッグしていました。
基本的には、Google cloud function で動くチェックツールを公開されている方のコードを参考にして各テキストやボタンの操作をしていきました。

自分の場合には Microsoft Teams を普段のチャットツールとして使っていることもあり、チェック数をメール経由でチャットの方に通知するようにしています。
必要なものはメールサーバーがありますが、これは各自のメールサーバーを使えばいいと思います。 SMTP の STARTTLS 方式にもこのスクリプトは対応できています。

基本的には、ここまでと書かれた内容で各自の状況に合わせて変更してもらえればよいかなと思います。

定期ループ化

結局、自分のローカルPCでタスクスケジューラに登録して定期タスク化しています。
なのでしばらくは電源を入れっぱなしで処理を回していきます。どこかのクラウドVMで動かすにはちょっと勿体ないですし、そこら辺に転がっているラズパイで cron 設定するというのもひとつの手ですね。

おまけ

Google のスプレッドシートも使ってそちらにも記録していくと、被チェック数の推移を知ることができて面白いかと思います。
手元のスクリプトではこの改造もやりつつなのですが、gist に公開するまでは至っておらず。そのうち整えて次回の書典には公開できるようにしておきたいところですね。

最初は GAS (Google Apps Script) で全て処理できるんじゃないかと思っていたのですが無理でした。
GAS で技術書典のページにログインして、被チェック数を得ることが出来た人、是非教えて下さい。

参考

今回のことでいくつかのサイトの情報を参考にして実装しました。

まとめ

今回初めてこういったツールを準備してみました。Selenium を使って、操作するのも実は初めてなので、このスクリプトにまずい点があるかもしれませんし、もっといい方法があるかもしれません。こうするとよいよ、とアドバイスがもらえたら嬉しく思います。

それはそれとして、新しいものにチャレンジするって大変ですがワクワクしますね。


Selenium で Headless Chrome インストールに失敗した話

技術書典7向けの作業をしていて、ここしばらく追われてました。CEDEC 2019 とかでは、もう DirectX Raytracing を使っての話が多く、そろそろ本ブログでもやっていかないとなぁと思っている次第です。

さて技術書典のサイトで被チェック数が確認できるのですが、これを確認するのを自動化してみようと試行錯誤していました。既に、 GCP の Google cloud function で動くチェックツールを公開されている方が居まして、これを使えばそれで終わりです。
しかし、自分はGCPのほうは全く無知なので Azure や AWS で出来ないかなぁと思ってトライしていました。結果としては、これらの FaaS ではヘッドレスChrome が動作できないのと、元々のページが動的であることの2点より完全敗北しました。

最初の FaaS でなんとかやりたい!という野望は砕け散ったので、素直に Selenium と Chrome でなんとかすることにしました。Seleniumでヘッドレス Chrome を pip で次のようにインストールしたのですが、バージョン違いを言われて苦戦しました。

どうやら既に Chrome がインストールされている状況で、それと pip でインストールした Chrome のバージョン違いが起こると起動出来ないようです。自分の環境では次のようなエラーメッセージでした。

そこで既にインストールされている Chrome のバージョンを調べて、 chromedriver-binary のリポジトリ(サイト)を確認して、近いバージョンのものを選んでインストールすることにしました。コマンド例は次の通りです。

とりあえずはこれで Selenium から Chrome を起動して操作可能になったので、操作自動化を頑張ってみたいと思います。