Python

【コピペ可】Python3でTwitterを自動BOT化!【2020版】

こんにちは、ひきたウチマキです。

私は、大学時代にPythonを用いて人工知能の内部パラメータ関連の研究をしていました。

今回は、Pythonを使ったTwitterの自動ツイートBotを作ってみましたので、紹介させていただきます。

本記事で分かること
・Pythonを使った自動ツイートBotのプログラム内容(コピペOK)
・Pythonの書き方(今回使ったコードのみの解説です)
 

TwitterのBot化プログラムの内容と解説

Pythonのインストールはこちらからどうぞ


Pythonを書くためのエディタはこちらからどうぞ


 

今回のTwitterのBot化に必要なファイル数は3つになります。

1つ目は、メインプログラム[bot.py]です。

[bot.py]では、全体の中核となるプログラムです。

動作内容は、指定した時間にTwitterに自動ログインしツイートする内容となっています。

2つ目は、ログイン用のプログラム[config.py]です。

[config.py]では、Twitterにログインするための4つの鍵(TwitterAPI)を記入しておくプログラムになります。

3つ目は、文章格納用のプログラム[stock_twitter.py]です。

[stock_twitter.py]にツイートしたい文章を格納しておきます。

さらに、[bot.py]から要求があった時に格納された文章からランダムで1つ選びだすプログラムも含まれています。

以上の3つのプログラムをこれから解説させていただきます。

プログラム紹介

 

メインプログラム[bot.py]

こちらがプログラム内容です。

pythonを使う上で重要な設定がありますので、先にこちらを参考に

「schedule」←こちらと「requests_oauthlib」←こちらをインストールしてください。

ファイル名:bot.py

# -*- coding: utf-8 -*-
from time import sleep
import schedule
import json, config, stock_twitter
from requests_oauthlib import OAuth1Session

CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
url = "https://api.twitter.com/1.1/statuses/update.json"
def tweeting():
    twitter = OAuth1Session(CK, CS, AT, ATS)
    tweet = stock_twitter.choise_tweet()
    params = {"status" : tweet}
    res = twitter.post(url, params = params)
    if res.status_code == 200:
        print("投稿できました")
    else:
        print("投稿失敗 : %d"% res.status_code)
def morning():
    twitter = OAuth1Session(CK, CS, AT, ATS)
    tweet = stock_twitter.morning_tweet()
    params = {"status" : tweet}
    res = twitter.post(url, params = params)
    if res.status_code == 200:
        print("投稿できました")
    else:
        print("投稿失敗 : %d"% res.status_code)

def main():
    schedule.every().day.at("05:00").do(morning)
    schedule.every().day.at("12:15").do(tweeting)
    schedule.every().day.at("19:15").do(tweeting)

    while True:
        schedule.run_pending()
        sleep(59)
main()

ログイン用プログラム[config.py]

 

ファイル名:config.py
CONSUMER_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
CONSUMER_SECRET="XXXXXXXXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN="XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN_SECRET="XXXXXXXXXXXXXXXXXXXXX"

XXXXXの部分には

事前に取得したTwitterAPIの鍵(CONSUMER_KEY、CONSUMER_SECRET、ACCESS_TOKEN、ACCESS_TOKEN_SECRET)

を4つそれぞれ記入してください。


TwitterAPIの取得はこちらから


 

文章格納用プログラム[config.py]

 

ファイル名:stock_twitter
# -*- coding: utf-8 -*-
import random

def choise_tweet():
    tweet_stok = stock_tweet()
    tweet = str(random.choice(tweet_stok))
    return tweet

def morning_tweet():
    tweet = 'おはようございます!\n'\
    '今日も1日頑張りましょう!\n'\
    '\n'\
    '残りの人生で一番若いのは今日です!\n'\
    '思い立ったら即行動!'
    return tweet

def stock_tweet():
    tweet_stok = [
    '1つ目のテスト文章1行目\n'\
    '1つ目のテスト文章2行目',

    '1つ目のテスト文章1行目\n'\
    '1つ目のテスト文章2行目'
    ]
    return tweet_stok

今回は実際に使用している文章を朝ツイートの用の1つと昼夜ランダムツイート用2つを用意しています。

プログラム解説【完全初心者向け】

 

[bot.py][stock_twitter.py]の順で解説していきます。

([config.py]はそれぞれのキーに名前=”XXXX”を4つ書くだけなので省略します。)

 

 

[bot.py]で使われているプログラムのポイント

# -*- coding: utf-8 -*-

まず、コードにはこちらの行を先頭に書きましょう。

これは互換性に関する記述になるので、書いておいた方がいいと思います。


from time import sleep
import schedule
import json, config, stock_twitter
from requests_oauthlib import OAuth1Session

次に、モジュールをインポートします。

モジュールとは、関数やクラスなどをまとめて書いたもので、簡単にいうと、携帯でいうアプリのようなものです。

例えば、2行目のスケジュールモジュールをインポートすることで、日時等のスケジュールに関するデータを簡単に扱うことができるようになります。

import ○○ という形で記述することでインポートができます。

また、1,4行目の様にモジュール××内の△△だけをインポートする場合は、

from ×× import △△というような記述になります。

3行目には、「JavaScript の表記をベースにしたデータ形式」を扱うためのjsonと先ほど紹介した、2つのファイルをインポートしています。

これを書くことで、[bot.py]から、[config.py]と[stock_twitter]の中身を使うことができるようになります。


CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
url = "https://api.twitter.com/1.1/statuses/update.json"

ここで、[config.py]が登場しましたね。

CK = config.CONSUMER_KEY を人間の言葉に訳すと

「CK」という箱に「config」というファイルの中にある「CONSUMER_KEY」の値を入れますよ。

となります。

[インポートしたモジュール]. [モジュール内の関数]という形ですね。

最終行の url はBotがツイッターにログインするためのアドレスですので、コピペで大丈夫です。


def tweeting():
    twitter = OAuth1Session(CK, CS, AT, ATS)
    tweet = stock_twitter.choise_tweet()
    params = {"status" : tweet}
    res = twitter.post(url, params = params)
    if res.status_code == 200:
        print("投稿できました")
    else:
        print("投稿失敗 : %d"% res.status_code)

tweetingという関数を作っています。

def ○○( ): はとある機能を持ったまとまりのことで関数(function)といいます。

○○を呼び出すと、その中身のプログラムが動き出すというような感じです。

上から順に機能を説明します。

1.OAuth1Sessionモジュールに先ほどの4つのキーを渡して、ログインしてもらいます。

2.ツイートする文章を1つ呼び出します。

  ([stock_twitter]内のからランダムに1つ選び出してきます)

3.選び出した文章をjson形式に直します。

  (json形式では、{”名前”:データ}の形で処理します。)

4.OAuth1Sessionでログインしている場所に先ほど成型した文章を入れてツイートして貰います。

4.OAuth1Sessionでログインしている場所に先ほど成型した文章を入れてツイートして貰います。

paramsの部分の説明がややこしいので省きます。
paramsだけでも動きますが、処理を分かりやすくするためにこのような書き方をしています。

5.ツイートした結果どうだったのかは res の status_code に入っています。

  (ツイート出来た場合は200という数字が返ってくるようです)

  if ○○ == ××: の形で分岐を記述できます。

  訳すと、「もしresが200だったら「投稿しました」を画面に表示する」

  その下の else は、上記の if 以外の場合に行う処理を書いています。

  内容は「それ以外の時「投稿失敗」と帰ってきたエラーコードを表示する」


def morning():
    twitter = OAuth1Session(CK, CS, AT, ATS)
    tweet = stock_twitter.morning_tweet()
    params = {"status" : tweet}
    res = twitter.post(url, params = params)
    if res.status_code == 200:
        print("投稿できました")
    else:
        print("投稿失敗 : %d"% res.status_code)

こちらは、朝用ツイート用です。

内容はほぼ同じですが、違う部分は3行目。

[stock_twitter]に朝用で別に文章を用意しており、それを呼び出しています。


def main():
    schedule.every().day.at("05:00").do(morning)
    schedule.every().day.at("12:15").do(tweeting)
    schedule.every().day.at("19:15").do(tweeting)

これがBotプログラムの軸になります。

ざっくり内容を書くと、

「毎日、〇時に【関数】を行う」です。

細かい使い方はこちらをどうぞ


    while True:
        schedule.run_pending()
        sleep(59)

ここで、ツイートする時間までプログラムが待機をしてくれます。

もしこれを記入ていなかった場合、起動と同時にプログラムが終わってしまいます。

sleep(59)で59秒ごとに動いてくれるようになります。

60にしてしまうと、稀にに時間設定通りツイートしてくれなかったりするので、59秒にしています。

main()

最後に、プログラム開始後にmeinを起動するようにします。

流れとしては、

59秒ごとにmainが起動し、morningとtweetingが設定時刻に作動する

といった感じです。

[stock_twitter.py]で使われているプログラムのポイント

m# -*- coding: utf-8 -*-
import random

ランダムで文章を選べるようにランダムモジュールをインポートしておきます。


順番が前後しますが、まず格納場所の説明からします。

def morning_tweet():
    tweet = 'おはようございます!\n'\
    '今日も1日頑張りましょう!\n'\
    '\n'\
    '残りの人生で一番若いのは今日です!\n'\
    '思い立ったら即行動!'
    return tweet

朝用に1つ文章を用意しました。

tweetという箱に文章を入れており、returnで外に出せるように準備しておきます。

外からこれを呼び出して使えるように、tweetという箱の中身を準備しておくイメージです。

しかし、ただ文章を入れるだけでは、改行できません。

改行したい場合は、’ 文章¥n’¥ の様に ¥n と ¥が必要なので注意しましょう。

def stock_tweet():
    tweet_stok = [
    '1つ目のテスト文章1行目\n'\
    '1つ目のテスト文章2行目',

    '1つ目のテスト文章1行目\n'\
    '1つ目のテスト文章2行目'
    ]
    return tweet_stok

3つ目の関数で昼用の文章を格納しています。

tweet_stockという箱に入れていきます。

基本形は、箱 = [ ’文章1’ , ’文章2 ’ , ・・・ ] です。

忘れやすいのが、文章間の「 , 」
これを忘れると正常に動かないので注意です。


def choise_tweet():
    tweet_stock = stock_tweet()
    tweet = str(random.choice(tweet_stock))
    return tweet

ここで、昼用の格納場所からランダムで1つ文章を選びだします。

選び出す用に tweet_stock という箱を準備して、先ほどの格納庫を入れておきます。

random.choice(tweet_stock) で(tweet_stock)の中から一つだけ選びます。

また、str( )に入れることで文章として処理できます。

まとめ

これで、Bot化のためのプログラムの解説を終わります。

ご自身で設定を変えていく中で、エラーが出たりで悩んだりするとは思いますが、それもプログラマーの壁の一つ!

調べながら、自分の中に落とし込んでいってくださいね!

無料エディタAtomのおすすめ初期設定【初心者向けプラグイン】前のページ

【見た目重視】ダイエットサプリで本当に痩せる【体験談あり】次のページ

関連記事

  1. Python

    【2020最新版】PythonをWindowsにインストールして使ってみよう

    こんにちは、ひきたウチマキです。私は、大学時代にPython…

  2. Python

    【2020年度最新版】TwitterAPIの取得方法【例文コピペで超簡単】

    こんにちは、ひきたウチマキです。私は、大学時代に人工知能の内…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

アーカイブ

2021年6月
 123456
78910111213
14151617181920
21222324252627
282930 

最近の記事

  1. 筋トレ&ダイエット

    ウチマキのボディメイク
  2. Python

    【2020最新版】PythonをWindowsにインストールして使ってみよう
  3. ガジェット

    SONY:WH-1000XM3から雑音がする話
  4. ThouGht

    自己肯定感を高くできる?【自己肯定感は作れる】
  5. Python

    【コピペ可】Python3でTwitterを自動BOT化!【2020版】
PAGE TOP