1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

heroku + tweepyを使ってbotを作る際に大変だったところ(備忘録)

Last updated at Posted at 2022-04-04

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で扱うとき

$マークっぽいところにコマンドを入力して定期実行することができます。

image.png

このときにpythonのプログラムを実行する場合は、

py something.py

ではpythonが実行できないため、

python something.py

と記述してプログラムを実行しましょう!

最後に

初めてのbot作りでAPIの申請やなんやかんやで大変だったので備忘録を残しました。
自分を振り返れば公式ドキュメントを不自由なく読めれるようになればもっと解決がスマートにいったと思います。なのでもっと英語の勉強も頑張りたいと思います!

いまだQiitaでの記事作成に慣れておらず見づらい箇所などがあるかと思いますので是非修正などがありましたらご指摘お願いします!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?