情報工学科ブログの過去記事を、Twitterへ自動投稿する
情報工学科ブログの過去記事を、1日1通、Twitterアカウントに公開しています。
大学の行事は季節ごとに変わります。
これを感じてもらえるのではないかということで、行っています。
学生は毎年変わってしまい、年ごとに学生のカラーも違います。
しかし、外部から見た人にとってはそれほど大きく割らないだろうと思っています。
そして、有益に感じてもらえるのではないかと思っています。
Twitterの自動投稿部分
Twitterへの投稿はWebブラウザを操作しています。TwitterAPIを使えるようにする方が、プログラムを作る面では楽です。
しかし、あえて、Webブラウザを操作する方法を選びました。理由は以下の通りです。
- Twitterアカウントごとに申し込まなくちゃいけないのが面倒
- Webブラウザの自動操作を覚えれば、Twitter以外も操作できる
- Webブラウザの自動操作を覚えれば、Webアプリの自動テストなども実現可能?
Internet Exploler上でActive XとJavaScript
ブラウザを操作して、Tweetを書き込む方法はネットにあふれています。
たまたま参考にした記事がJavaScriptを使ってActive X経由でInternet Explolerを操作するものでした。
これで2年ほど運用していました。しかし、Internet Explolerの寿命が来てしまい、動かなくなりました。
Google Chrome上でselenium
Webスクレイピングするには、Seleniumが良いと学生さんに聞いていました。
そこで、今度はSeleniumを使って操作することを試みます。
Pythonを使って操作できるので、プログラム作成は非常に楽でした。
Web全般に入れることですが、説明に使われている時のTwitter.comのHTMLのソースと、現在のHTMLソースが違うようで、そこそこ苦労しました。
苦労した点を詳細に書いて、プログラムとして公開するべきところだと思います。
しかし、この手のツールは悪用もあり得ますので、(気にしすぎかもしれませんが)ここでは控えさせていただきます。
実際に動いているところは以下の通りです。
- ログインするところ(リンク)
- セキュリティ対策から、実際はでたらめなIDとパスワードを入力して、ログインが失敗する動画です
- (パスワードの文字数がばれることを気にしています)
- ツイートするところ(リンク)
- ツイートを試みますが、過去に同じ内容のツイート文を送信しており、エラーになってます
- 通信環境が遅くても良いように、待ち時間が多くなっています
難しかった点が1点あります。
それはログインするたびに、Twitterから新規のログインがあったと報告があることです。
これは結構煩わしいです
想像ですが、以下のような感じだと類推しました。
- Twitterのサイトはクッキーを発行していて、ブラウザがそのクッキーを添えてアクセスすると2度目のアクセスとみなす
- seleniumでのアクセスは、毎回まっさらな状態でアクセスする
これはJavaScriptでアクセスしたときには、ブラウザをそのまま捜査しているためか、このようなことはありませんでした。
そこで、ユーザー情報を参照する形でSeleniumでアクセスすることにしました。
これにより、1回目のアクセスでは新規のログインとみなされましたが、2回目以降は指摘されなくなりました。