Botを作りてぇ!!(唐突)
題名のまんまです。
TwitterでBotアカウントを初心者ながら作ってみたくいろいろ調べながら作成していく上で大変だったところをいくつかピックアップしていきたいと思います。(備忘録として)
今回作成したBotは以下のアカウントになります。
https://twitter.com/No_baibain
そうです。
ツイート内容を見たらわかるのですが一日づつ栗饅頭が二倍になっていくというだけのbotになっています。
英語があまり読めない私にとってこれだけの内容でもかなりてこずってしまったので、今回はその中でも大変だった部分をまとめていきたいと思います。
環境
- Windows 11
- python 3.8.12
pythonプログラムをheroku上で動かす場合、pythonのバージョンに注意してください。
対応バージョン
https://devcenter.heroku.com/ja/articles/python-support
ファイル構成
ファイル構成は以下のようになります。
app/
┣ src/
┣ img/
┃
┣ runtime.txt
┣ Aptfile
┗ requirements.txt
srcにはbotのためのプログラムが格納されていて、imgには栗饅頭の画像が保管されています。
それぞれのテキストファイルですがpythonをherokuを扱う際には必要なファイルとなっています。(Aptfileは必要な人だけ)それぞれの役割ですが
runtime.txt : pythonのバージョンを記述
requirements.txt : pythonで使用するモジュールを記述
これらは必要になってくるのでherokuを扱いたい場合は注意してください!
tweepyを使って画像を投稿する
現在、(2022/04/04)
api.update_with_media(filename = "hogehoge.jpg")
では投稿できません。
※apiはtweepy.api()で生成されたオブジェクトです!
投稿するためには以下の手順を踏む必要があります。
ret = api.media_upload("hogehoge.jpg")
api.update_status(media_ids=[ret.media_id_string])
一度、投稿したい画像をupdate_uploadでかましてから動かすとうまくいきました。
heroku上でopencvを使う
heroku上でpythonのプログラムを走らせるためには使用するモジュール(
もとからpythonに入っているモジュールは除く)をrequirements.txtに記しておく必要があります!
opencvを扱う場合ももちろんrequirements.txtを下記のようにフォルダ内に残しておく必要があります。
opencv-python==4.5.4.58
(モジュール名==バージョン)
しかし、opencvをheroku上で扱うためにはこれだけではNGです!!
requirements.txt以外にもAptfile(拡張子なし)を作成しなければなりません!
今回自分の場合は、opencvを利用するためにAptfileには以下のような内容を書き込みフォルダに残すとうまく機能しました。
libsm6
libxrender1
libfontconfig1
libice6
libgl1
herokuで一時的にファイルを保存する場合
自分の場合、一番困ったのがこの部分で栗饅頭を2倍に増やした後にその画像をツイートするため一時的に保存しておく必要があったのですが、何も考えずに適当な場所に保存するだけではその画像は保存されません!!!
これを解決するためには一度、プログラムを動かしている中でtmpディレクトリを生成したのちにその場所に保存する必要があります。
※もとからtmpディレクトリを作成するのではないことに注意!
つまり、pythonを扱う場合では、
#osの操作をするためにインポート
import os
#メディアを保存するために一度、tmpディレクトリを作成
os.system("mkdir tmp")
#その後、tmpファイル内にプログラム実行中に作成したメディアを保存する
#save("hogehoge.jpg")
という操作を行う必要があります。
参考にしたサイト
https://stackoverflow.com/questions/19253031/heroku-how-to-write-into-tmp-directory
herokuのタイムスケジューラをpythonで扱うとき
$マークっぽいところにコマンドを入力して定期実行することができます。
このときにpythonのプログラムを実行する場合は、
py something.py
ではpythonが実行できないため、
python something.py
と記述してプログラムを実行しましょう!
最後に
初めてのbot作りでAPIの申請やなんやかんやで大変だったので備忘録を残しました。
自分を振り返れば公式ドキュメントを不自由なく読めれるようになればもっと解決がスマートにいったと思います。なのでもっと英語の勉強も頑張りたいと思います!
いまだQiitaでの記事作成に慣れておらず見づらい箇所などがあるかと思いますので是非修正などがありましたらご指摘お願いします!