日記

PythonでTwitterBot作成してみた

こんばんわ。秋鐘です!(*^▽^*)ノ

今日は非プログラマが全く無知の状態からPythonを使ってTwitterBOTを作成してみた記録を残します👏

Pythonとは

皆さん、Pythonってご存じですか??AI分野が盛んになってから流行ってきてるプログラミング言語らしいんですけど、前々から興味があったので勉強してみました。実践に勝る勉強はなし!ということでいきなりAIもどきを作ってみました👍

Python2とPython3では文法が違うようなので要注意🤔

TwitterBOTとは

TwitterBotとは予め設定した条件に従って勝手にツイートしたりリツイートしたりしてくれるAIロボットです。Twitterが用意してるAPI(tweepy)によって動作します🦜tweepyを制御する命令はPythonで書きます🐍

お手軽にBotを作成してくれる基本無料の代行サービスもありましたが、Sweet☆Home公式Botの要求を満たす制御だと月500円程度の保守料が必要になってしまうので諦めました🤦‍♂️💦

制作環境

  • windows 10
  • Visual Studio Code 1.43.0
  • python 3.8.2
  • tweepy 3.8.0

テキストエディタ

pythonコードを書くにはテキストエディタが必要。テキストエディタなら何でも良いらしく、サクラエディタで開発してました🤪

後に会社の先輩からVisual Studio Cordを紹介してもらいました🤓❣️

python導入

pythonのインストールや基本的な使い方の解説はこちらのサイトを参考にしました💁‍♂️

Let’sプログラミング
https://www.javadrive.jp/python/

tweepy導入

tweepyのインストールはこちらを参考にしました💁‍♂️

pipでtweepyをインストールしてAPI1.1に対応させて使う
https://qiita.com/lacolaco/items/f2a8928ef54626a75ae1

TwitterDeveloperのライセンス

TwitterBotを作成するには、Twitter公式から許可をもらう必要があります。申請の仕方はこちらを参考にしました💁‍♂️

Twitter Developerの開発者申請(例文あり)とAPIキー取得方法まとめ【2019年版】
https://digitalnavi.net/internet/3072/

頑張って英文考えたんですよ😚褒めて欲しい✨

自作Botの仕様を検討

【目標】夫婦2人のtweetを自動でリツイートして1アカウントに集約する

  • 最新tweetから50件前まで検索してリツイートする
  • コメントへの返信はリツイートしない
  • 既にリツイート済みだった場合のエラーは例外処理でスキップする
  • リツイートが成功したら♥を付ける
  • 夫婦2人分まとめて実行する
  • 1日1回自動で実行する

Bot作成

完成したコードを自慢❗️👏#テキストの部分がコードの説明になります🤗

コピペで役立ててくれたら嬉しいけど、ド素人が書いたコードなのでヒント程度に生ぬるく眺めて下さい😅#の説明も間違ってるかも・・・

完成コード

#Sweet☆Home公式Bot(プロトタイプ)
import tweepy

#-----------------------------------------------------------------------------
# KEYの指定
CONSUMER_KEY = "*****"
CONSUMER_SECRET = "*****"
ACCESS_TOKEN = "*****"
ACCESS_TOKEN_SECRET = "*****"

# tweepyの設定(認証情報を設定)
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
# tweepyの設定(APIインスタンスの作成)
api = tweepy.API(auth)

print("------------------------------------------------------------------")
print("秋鐘の最新ツイートをリツイート")
akikane = api.user_timeline(screen_name="SweetHo84497180",count=50)    #秋鐘のタイムラインを取得し、akikaneに格納

for status1 in akikane:                #countの回数だけ繰り返し実行。タイムラインから繰り返しstatusを取得する。
    def if_in1(a):                     #関数if_in1を定義。文中に特定の文字列があった場合の分岐処理
        if '@' in a:                   #aに代入する文中に@があった場合
            print('skip retweet1.tweetに@が含まれていたため除外処理')    #コマンドプロンプトに skip retweet .とプリントし、twitterでは何も実行しない
        else:                          #それ以外の場合
            try:                       #とりあえずapi.retweetを試してみる
                api.retweet(status1.id)              #retweet済みエラーが出なければリツイートする
                api.create_favorite(status1.id)      #いいねを付ける
                print('success retweet1.')           #ログ
            except tweepy.error.TweepError:                    #retweet済みエラーが出た場合は以下を実行する
                print('skip error1. You have already retweeted this Tweet.')    #コマンドプロンプトに skip error1.をプリントし、次のtweet検索に進む
    
    if_in1(status1.text)               #status1に格納したtweetをaに代入して関数if_in1を実行


print("------------------------------------------------------------------")
print("琉偉の最新ツイートをリツイート")
rui = api.user_timeline(screen_name="SweetHo21619667",count=50)

for status2 in rui:
    def if_in2(b):
        if '@' in b:
            print('skip retweet2.tweetに@が含まれていたため除外処理')
        else:
            try:
               api.retweet(status2.id)
               api.create_favorite(status2.id) 
               print('success retweet2.')
            except tweepy.error.TweepError:                    
               print('skip error2. You have already retweeted this Tweet.')  

    if_in2(status2.text)

実行時のコマンドプロンプト

実行が成功した場合はコマンドプロンプトに何も表示されません。

それがどうにも気持ちが悪いので成功したのか、リツイート済みエラーを例外処理したのか、返信だったから除外処理したのかログを出すようにしました。

C:\■■■>cd C:\▲▲▲\Python
C:\▲▲▲\Python>python sweethome-official-bot.py
------------------------------------------------------------------
秋鐘の最新ツイートをリツイート
skip error1. You have already retweeted this Tweet.
success retweet1.
success retweet1.
skip retweet1.tweetに@が含まれていたため除外処理
skip retweet1.tweetに@が含まれていたため除外処理
skip retweet1.tweetに@が含まれていたため除外処理
skip retweet1.tweetに@が含まれていたため除外処理
skip error1. You have already retweeted this Tweet.
skip error1. You have already retweeted this Tweet.
skip retweet1.tweetに@が含まれていたため除外処理
skip error1. You have already retweeted this Tweet.
・・・中略・・・
------------------------------------------------------------------
琉偉の最新ツイートをリツイート
skip error2. You have already retweeted this Tweet.
skip retweet2.tweetに@が含まれていたため除外処理
skip retweet2.tweetに@が含まれていたため除外処理
skip retweet2.tweetに@が含まれていたため除外処理
・・・中略・・・

1日1回自動で実行

コードが完成しても毎日手動で実行してたら全く意味がありません💦目指したいのは完全自動化です🐉

レンタルサーバーを借りる、自宅にサーバーを買うなどいろいろ方法はあるようですが、Sweet☆Home公式Botに求めるのは完全無料👻

タスクスケジューラで十分だった

一番お手軽なのはWindows10のタスクスケジューラを利用する方法です。詳しくはこちら💁‍♂️

Windowsのタスクスケジューラを使ってpythonスクリプトを定期的に自動実行しよう!
https://ryota-trade.com/?p=4610

Windowsタスクスケジューラーのスリープ解除実行でハマったこと
https://qiita.com/yoinhu/items/8a1d49f17207d40a68dc

BIOSでPC自動起動

一見上手く行ったかに思えましたが、タスクスケジューラが起動するための条件としてPCが起動中かスリープ状態である必要があります🌛つまりPCの電源が入ってないとタスクスケジューラが起動出来ないんです😅

そこでPCの電源を定時に自動でONにできないか調べたら出来ました😃

『BIOS設定』で検索🤖メーカーによって設定方法や設定項目や、そもそも設定可能かどうか違ってるらしいです。

Sweet☆Homeでは『DELL』のノートPCを使っていますが、分単位で自動起動設定が出来ました✨

電源プラグ🔌に接続していればノートPCの蓋を閉じた状態で放置しててOK🙆‍♂️定時にPC起動→タスクスケジューラ起動→スリープ状態に移行→電源OFFとなることが確認出来ました😇

実装しながら学んだこと

文字列とは何か?・・・が超大事だった

「文字列なんて知ってるよ!文字が並んでるやつだろ!?」なんて思ってたら一生プログラミングできないと思いました🤯

python初心者は必ずこの記事を読むべきだと思います😤ここから一気に道が開けたような気がします🐲

Pythonで文字列を扱うには?文字列の基本操作を解説
https://www.sejuku.net/blog/28147

やりたい事に対して実装方法は複数ある

コメントへの返信まで全部リツイートしちゃって大変なことになりそうだったので、返信を除外する命令を検討しました。基本的にはtweet内に”@”が含まれていた場合に返信と判定できるのですが、”@”の検索方法はいろいろあるようです🎲

会社の先輩にfindを教えてもらいましたが、結果的に in を使うことでfindよりスマートな実装になったと思ってます🤺詳細はこちら💁‍♂️

【3分でPython入門】if文である値が含まれているか知る方法
https://www.sejuku.net/blog/15588

API実行の前にprint()で動作確認する

いきなりリツイートする命令を書くのではなく、print()を使ってifとinの動作を確認しながら書いていくようにしてからスピードが一気に上がりました🚴‍♂️

  • “@”がヒットした場合はprint(“ヒット!除外!”)
  • “@”がヒットしなかった場合はprint(“リツイート!”)

こんな感じです。すべての実装でprint()を使ったチェックが有効でした。狙った通りのコメントを取得できたらprint()を実際の命令に書き換えていきます🎨

開発裏話

最後に、開発中にtweetしてた内容を張り付けておきます🦜毎日がとてもエキサイティングでワクワクキラキラしていました✨

毎日進化し続けるSweet☆Homeを今後もご期待ください!🐉🦊

ちなみに2万円で自宅にサーバー設置できるらしいです😳

ABOUT ME
akikane
akikane
2016年5月に夫婦共通の趣味として共同ブログを開設。その後1男授かり子育てメインのブログとして発展してきました。 ⭐️ブログ:【Sweet☆Home】 ⭐️Twitter【Sweet☆Home-夫】【S☆H-Rui】 ⭐️YouTube:【SweetHomeチャンネル

COMMENT

メールアドレスが公開されることはありません。