Published Date : 2019年5月12日4:53


TwitterBot・Part1



前回の記事の簡単なおさらい

モーニング娘。の メンバー達のブログ記事を使って、

なんちゃって 文章自動生成WEBアプリ を作りました。


一億番煎じ

数多の戦士達が Pythonを使って Twitter Botを作ってきました。

それの恐らく1億番煎じ目くらい の記事です。

やりたいこと

1 自動ツイート
2 自動リツイート
3 自動いいね
4 自動フォロー
5 自動フォロバ
6 デプロイ、定期実行

まずはTwitter API


サクサクとAPIの準備

このURLにアクセスして、 https://developer.twitter.com デベロッパーアカウントを作成。

下の画像の順番でアプリを作成して、 APIキーもろもろをゲットだぜ!


Responsive image


Responsive image


Responsive image


Responsive image


Responsive image


Responsive image


Responsive image


第一関門

とりあえず第一関門。 デベロッパーアカウント作成が、 非常にややこしくなっている。

とにかくこの人のブログを見て、 https://qiita.com/rev84/items/95592de627a581a49738 乗り切ってくれ。

Responsive image


Responsive image


Responsive image


Generate Access Token

あとは簡単。 支持通りメールから コンフォーム。

適当な名前と、 適当なURL(無ければ) を入力して
Access Token and access toke secret をジェネレート。

Responsive image


Responsive image


Responsive image


Responsive image


Responsive image


Responsive image


Responsive image


Tweepy


自動ツイート

ツイッターの自動操作で調べ、 色々と出てきましたが、
今回はTweepyが 簡単で分かりやすいと思ったので、 こちらを採用しました。

まずはサクッと自動ツイート をやりましょう。

# DateTimeで”年”、”月”、”日”などを
# 表示させようとしたら
# エラーになったので、
# こちらの方法を使うとエラーが出なくなりました。
import local
locale.setlocale(locale.LC_ALL, '')

# 日付情報などを扱うためインポート
import datetime
# こちら本題のツイッター自動操作用パッケージ
import tweepy

# 上の画像で説明した、
# 各種4つの必要となるキーを変数としてセットする。
CONSUMER_KEY = 'Your Consumer Key'
CONSUMER_SECRET = 'Your Consumer Secret Key'
ACCESS_TOKEN = 'Your Access Token'
ACCESS_SECRET = 'Your Access Secret Token'

# apiを取得
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

#利用制限にひっかかた時に必要時間待機する
api = tweepy.API(auth, wait_on_rate_limit = True)


# ツイートする文字列を決めておく。
# 別にこの方法でなくても
# Input関数を使ったり、
# 直に書いたり、色々試してみてね。
tweet = "ツイート"

# 数は適当、今回は6回ツイート。
for i in range(6):
    # 今の日時を取得して、
    # それをStrftime関数で文字に直す。
    now=datetime.datetime.now().strftime('%Y年%m月%d日 %H時%M分%S秒')
    
    # 文字列に直した日時と
    # ツイートする文字と回数を合体。
    status=f"{tweet}{i+1}回目 -> {now}"

    # update_statusメソッドを使い、
    # 自動ツイートさせる。
    api.update_status(status=status)

    # 同時にコンソールにもどんな感じに
    # ツイートされたか確認のため表示。
    print(status)

    # 別にやらなくてもいいけど、
    # 一回のツイートごとに10秒間待機させてみた。
    time.sleep(10)
こんな感じ。


Responsive image


APIって??

APIとは、 【 Application Programming Interface 】

アプリケーションプログラム インターフェイスの略です。

Responsive image



ツイッターなら、ブラウザに表示されている ツイートを行う部分がツイッターアプリ。

ツイッターの色々な情報を管理している データベースのサーバー等があります。

とどのつまり、APIとは インターフェイスを通して、 (USBの接続部分みたいなもの)

アプリを操作したり、 データを貰ったりする ことができる機能のこと。

# ここでAPIを作る為の認証作業を行うイメージ
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)

# ここでAPIを通してデータやアプリを操作できるようにするため
# 必要となる2つのキーをセットする。
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

# 最後にAPIを作成すると同時に、
# PythonプログラムとAPIを繋げることができる、
# apiという名前のオブジェクトを作る。
#(便宜上の名前なのでなんでもよい helloでもいいよ)
# ちなみにツイッターでは一回に使用できる制限
#(例えばツイート数)などがあり、
# その制限を超えてしまった場合、
# 強制的にお預け期間を設けるように設定できる。
# APIを作成する関数に
# wait_on_rate_limitというキーワード引数を入れ、
# Trueに設定するだけ。
api = tweepy.API(auth, wait_on_rate_limit = True)

フォロー、いいね、リツイート

今後自動ツイートは使いません。

自動ツイートの鬼だよあたしゃ!

って人は、文章自動生成ソフト を作ったり、 買ったり、拝借するなりして、
(前回みたいな適当なやつではなく) やると面白いかも。


つーことで、続いては、 キーワードで検索をかけて、
そのツイートをしている人に 「いいね」を贈り、

フォローをするという 機能をつけていきまっしょい。

例のごとく一気にコードを書いて、 コード中で説明していきます。

# 全てが揃っている用語
# つまり、ツイート等にモーニング娘とハロプロが
# 一緒にあることが条件。
words=['モーニング娘','ハロプロ']


# うるせぇ!男は黙って一つに集中
# って人はこんな感じでやっちゃいなYO!
# word='モーニング娘'

# 何件取得するか選ぼう!
# 今回は様子見で10件
set_count = 10

# apiは上で作ったAPIのオブジェクト。
# 用意されているsearchメソッドを使い、
# 結果を取得。
# q=には探すワードが入る。
# count=には何件探すかが入る。
results = api.search(q=words, count=set_count)


# resultsには取得したユーザーの情報が一つずつ格納されている。
for result in results:

  # user._json['screen_name']にはユーザーの@から始まる名前が入っている。
  username = result.user._json['screen_name']

  # 一意の数字の羅列であるIDナンバー
  user_id = result.id

  # 出力
  print("ユーザーID:"+str(user_id))

  # ユーザー名取得。
  user = result.user.name

  # 出力
  print("ユーザー名:"+user)

  # ツイートの内容
  tweet = result.text

  # 出力
  print("ユーザーのコメント:"+tweet)

  # 例外は嫌いだよ。
  # 40秒で支度しな!
  # もし、フォローしてたら、
  # もし、リツイートしてたら、
  # 例外が投げられるので、
  # そこで処理を止めないため、
  # Try Except 文を使いMASU。
  try:

    # create_favoriteメソッドで「いいね」するよ!
    api.create_favorite(user_id)

    # create_friendshipメソッドで「フォロー」するよ!
    api.create_friendship(username)

    # 出力!
    print(user+"をフォローと「いいね」をしました\n\n")
  
  except:

    # フォローしてたらこっちを表示。
    # で、処理を続ける。
    print(user+"はもうフォローしてます\n\n")

  # 今度はリツイートの処理。  
  try:

    # リツイート実行
    api.retweet(user_id)
    print(user+"をリツイートしました\n\n")
  except:
    print(user+"はもうリツイートしてます\n\n")
こんな感じ。

Responsive image


フォロバ

フォロバ だけややこしいので、 分けるよ!

フォローを既にしてるか、 してないなら、フォローする。 などをしていくよ!

# Cursorとはページネーションをしてくれるよ!
# これを使わないと表示範囲内だけでフォロワーなどを取ってくるので
# 全体の数が合わないよ!
followers = [follower for follower in tweepy.Cursor(api.followers).items()]
following = [friend for friend in tweepy.Cursor(api.friends).items()]

# idは一意の値なので、判断材料にするよ!
followers_id=[follower.id for follower in followers]
following_id=[follow.id for follow in following]

# IDが格納されたリストをインデックス番号と一緒にループさせる。
for i,follower_id in enumerate(followers_id):

  # もし、フォローしている人達に含まれていれば、
  if follower_id in following_id:
      print(f'{followers[i].name} はもうフォローしてるよ!')
      
  # そうでないなら、フォローしてないので、
  # followメソッドで「フォロー」するよ!
  else:
    followers[i].follow()
    print(f'{followers[i].name} をフォローしたよ!')

こんな感じになるよ!

Responsive image

フォローしてればこうなるよ!

Responsive image


後半へつづく

次回はCORESERVERに このスクリプトをアップして、
CRONジョブというものを使って 定期的な実行をしていきます。

それではまた次回。


See You Next Page !