ツイッターbot作成の道(その2)
※本記事は別ブログで書いてた内容を多少の加筆修正の上、転載したものです。
どうも。前回、Tweepyを使ったツイートに失敗したものです。
- Tweepyを使わずにGAETweet
fujit33.hatenablog.com私と全く同じ苦労してる人がいて共感した。
で、この人の解決法を真似ることにした。
Tweepyを使わずに呟く!
この記事も参考にしながら。
AppEngine-OAuth-Libraryってのをダウンロードしてリネイムして、Tweepy代わりに使うわけですな。
ディレクトリ構造はうまく真似できかなかったが、とりあえずツイートに成功。
(後で理解したことには、空でもいいから「__init__.py」のファイルをフォルダ内に一緒に置かなければいけないってこと。)
regular tweet
— 栗bot (@yyy1980_bot) 2016年4月25日
定期botの完成もまもなくかと思った。
しかし、加工して日本語をツイートしようとするとエラー。
「SyntaxError: (unicode error) 'utf8' codec can't decode byte 0x82 in position 0: invalid start byte」
辛い。
- 文字コードとの闘い
勉強し始めた頃に、Pythonでは日本語の扱いが少々厄介って聞いたし、実際そうだったし。
(Python3系だと改善されてるって噂だけど。)
でも今までは自分用に使ってただけだし、Jupyter Notebookでプログラミングする分には気にならなくなってたので目を背けていた。
ここらで諦めて、少しだけ調べてみた。動いてくれと願いつつ。
文字列(str型)とユニコード文字列(unicode型)は別物。ふむふむ。
Encode/Decodeが何から何への変換を指しているか。ふむふむ。
自分自身が利用している環境について知っておくべきこと。はい、すみません。
その他の記事とかも一通り読んで、色々なパターンを試してみたけど、やっぱり何かしらのエラーが出続けた。
日本語を諦めかけようとしたその時、それは見つかった。
そのファイル、シフトJISで保存してませんか?
テキストエディタに秀丸使ってるけど、それがシフトJISで保存してるんかね。(よくわかってない。)
とりあえず冒頭部分にある「coding: UTF-8」を「coding: shift_jis」 に書き替える!
アップデート、更新。
・・・・・・
成功!!!
なるほど22:15:58じゃねーの
— 栗bot (@yyy1980_bot) April 26, 2016
ありがとうOKWAVE!
ありがとうkmeeさん!
ついでにありがとうkenta7859さん。
- Cronでスケジュールを指定
GAEを通してやっとまともにツイートできるようになり、いよいよ定期的に呟くように設定。
cron.yamlというファイルで指定してやればいいとの事。簡単、簡単。
細かい指定方法については公式の方で。
cron.yaml Reference | Python | Google Cloud Platform
作業完了。後は指定した時間に呟いてくれるはず。
あれ、時間が来ても呟いてくれない...。
現在時刻を取って来たらグリニッジ標準時だったからそのせいかも。
でも、timezoneは指定したけど...。
まあもう少し待ってみるか。
そして次の日になっても呟かないのであった。
- Deploy
次の日、飲みながら調べた。
前に読んだこの記事の最後にあるデプロイという言葉を。
qiita.comそう言えば、前回紹介したこの記事にも。
開発サーバとして便利なGoogle App Engine Launcher - ねずみとりんご
なるほど。いままでの作業は全部ローカルホストでやってただけで、
アプリケーションとして、これをGoogleにアップしないといけなかったのか。
そこでcronが働いてくれるわけか。
サク飲みを切り上げ、帰宅。
「Deploy」ポチッ。エラー...。┐(´д`)┌ヤレヤレ
探せば似たような経験をした人がいるネット社会。
d.hatena.ne.jpでも、これでも問題は解決しない。
色々、調べて分かったこと。
アプリをアップするGAEの方にも同じ名前でアプリを作っとかないといけないって事。
GAELauncherでDeployして勝手に出来上がるわけじゃないんだね。
Google App Engine Launcherへアプリケーションの登録 | 無料レンタルサーバ(格安・有料)情報のレンサバ.com
[Diary] GAE/pyとbulkloader - fukuitの日記
GAEアプリケーションを作ろう!(1/6):GAEで始めよう! JSP/サーブレット入門
GAE(Google App Engine)に登録してみるてすと。 - うみたんのアトリエ
操作画面とか少し変わったと思うんだ。
[Create Application]ボタンの代わりに何かのメッセージがあったような記憶が。
ボタンがあるならそこから。
とりあえず https://appengine.google.com/ にアクセス。
「Before getting started, you want to learn more about developing and deploying applications.」もっと学習してから来いと。
Creating a Guestbook Application | Python | Google Cloud Platform
あっ、こんな所にマニュアルが...これを最初に読むべきだったのではないか疑惑。
Google App Engine FAQ | App Engine | Google Cloud Platform
FAQの1項目目 -「How do I sign into my Google App Engine account?」
you can log into your App Engine account by visiting the Google Cloud Platform ここからいけるっぽい。
ちなみにマニュアルの和訳版もありました。対応が取れてないのは新旧の問題でしょうか。
必要なのかなと思って無料トライアルもポチってしまった。なくてもいけるっぽいのに。
cloud.google.comクレジットカードの登録がいる...。
というわけで、GAE(いまはGoogle Cloud Platformに統合されてる?)にも同名アプリケーションを作成した後に再びDeploy。
うん、成功。
なるほど19:56:21じゃねーの #定期ツイート
— 栗bot (@yyy1980_bot) 2016年4月27日
時間のずれはこの後スタッフ(私)がちゃんと修正しました。
ちょっと自分の体験をもとに時系列に並べちゃったり、書きながら新しいことがわかってきたので、特にGAEに関しては重複させながらまとめ記事を作ろうかな。予定は未定。(続く)
ツイッターbot作成の道(その1)
※本記事は別ブログで書いてた内容を多少の加筆修正の上、転載したものです。
前々からツイッターの自作botを作ってみたいなと思ってまして、
昨年から始めたPythonもある程度は使いこなせるようになったという勘違いの下、
今回作ってみた。
将来的には岡三マン(@okasanman)のような速報ツイートbotを目指したい所だが、
まずは他サービスを利用してもできるような定期ツイートbotから。
ちなみにこの手の記事はググったらいくつもヒットするので、
自分にとって良さげなやつをいくつか読めばいいと思うよ。
ということで、結構、備忘録目的に書いちゃう。
以下、Pythonの一定程度(どれくらいだそれ)を理解している事を前提に書いてます。
まずは、Pythonのプログラムを手動で実行することでtweetする方法。
を参考にしてサクサクッと。
TwetterのConsumer key等はこんな感じでゲット。
website-planner.com近年、twitterに携帯番号を登録しとかないと無理になったみたいで渋々登録...
出来た。
Hello, World!
— 栗bot (@yyy1980_bot) 2016年4月21日
- GAEでスケジューリング(前段階)
やりたいのはあくまで手動じゃなく自動ツイート。
まずは定期botなのでスケジュール管理する方法。
「Twitter bot」でググってみたら最初の方にヒットしたのが「Google App Engine」。
まあGoogleならって事でこれを使ってみる事にした。
Google AppEngine/Python入門 - サーバを作ってみよう | adamrocker
Google AppEngineに関しての説明はこれが良かったかな。
ただ後半部分がMacベースの説明だったので、
msitter29.hatenablog.comWindowsベースの私はこっちの方がインストールから使用に関して役に立った。
言われるがままに「Create New Application」からの「Run」、そして「Browse」。
まあ上手くいく。仕組みとしては指定したURLにアクセスするとプログラムが実行。
これを利用して指定したURLを定期的に叩いてツイートプログラムを実行するんだな、うんうん。
ここから加工していく長い旅が始まった。
- Tweepy(失敗)
で、改めて「Twitter bot」でググって目に付いたのがtweepyというモジュールを使ってのプログラミング。
d.hatena.ne.jpこのサイトを応用すればほとんど完成じゃないか、そう思いましたよ...。
GAEでtweepyを利用するためにはtweepyのソースコードもGAE上にあげる必要があります。
なるほど。そういう作業が必要なのね。アップロード、更新。
「No module named A」
あぁ、まだ足りてないか。ググってダウンロードしてアップロード、更新。
「No module named B」
あぁ、こんな感じで足りてないやつアップロードしていったら上手くいくかな。
アップロード、アップロード、アップロード...
早くエラーなくなれよ...
「No module named _ssl」
???
どれ入れたらいいの?えっ?えっ?上手くいかない。
ググる。
The Python 2.7 runtime includes some third-party modules. Some of these are available by default; others are only available if configured. You can specify which version you want to use.
うわー、今までと違う展開。まあ、仰せのとおりに。
「File "C:\Program Files\Google\google_appengine\google\appengine\dist27\socket.py", line 73, in <module>
ImportError: cannot import name RAND_egd」
えっ、知らんがな...
ちなみにsocket.pyをから無理やりRAND_egdを削除してみても同じエラー。
ここに書いてるようにはサクッといかない...。
qiita.com
tweepy保留...。
この人の追体験をしてしまった > PythonでTwitter Botを作るまでの長い長い物語(完結編) - からあげ定食 https://t.co/Jexg7oKZv4
— 栗(AI) (@yyy1980) 2016年4月23日
(続く)