Published Date : 2019年5月12日22:57


TwitterBot・Part2







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

Twitter Apiと、 Tweepy を使って、
ツイート、いいね、リツイート、 フォロー、フォローバック を自動化しました。


二億番煎じ

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

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

やりたいこと

1 自動ツイート 終了
2 自動リツイート 終了
3 自動いいね 終了
4 自動フォロー 終了
5 自動フォロバ 終了
6 デプロイ、定期実行 今回チャレンジ

環境変数


CORESERVERと環境変数

前回作ったPython スクリプトを CRONといったもので 定期実行するため
CORESEVER側で 設定していきます。

ログイン

バリュードメイン
もしくは
CORESERVER.JP
にログインして、 FTP設定をし、 Teraterm でサーバーにアクセスします。

詳しくは、 この記事か この記事 を参考にしてください。

サクッと設定

# Teratermで今の場所にどんなファイルがあるか見る。
[username@hostname ~]$ ls -al

total 41
drwx---r-x  12 username users    11 Feb 11 23:47 .
drwx--x--x 382 root     root    111 Feb 11 12:45 ..
-rw-------   1 username users 11111 Feb 11 11:02 .bash_history
-rwx---r-x   1 username users   111 Feb 11 18:52 .bash_profile
-rwx---r-x   1 username users   111 Feb 11  2018 .bashrc
drwxr-xr-x   3 username users     1 Feb  1 21:10 .cache
drwxr-xr-x   5 username users     1 Feb  1 17:36 .ipython
drwxr-xr-x   3 username users     1 Feb  1 21:00 .local
drwxr-----   3 username users     1 Feb  1 21:01 .pki
drwxr-xr-x  13 username users    11 Feb  1 21:08 .pyenv
-rw-------   1 username users   111 Feb 11 05:03 .python_history
drwx---r-x   2 username users     1 Feb 11  2017 log
drwxr-xr-x   2 username users     1 Feb  1 21:00 perl5
drwx---r-x   6 username users     1 Feb 11 01:13 public_html

上の場所で「.bash_profile というファイルがあります。

ここに、環境変数として ツイッターのアクセストークン などの情報を保存しておきましょう。

# viエディターでbash_profileを編集。
[username@hostname ~]$ vi .bash_profile

ファイルを開けたら、 以下のように編集します。

忘れずに、キーボードの 「I」を押して、
「INSERT」モードになっている ことを確認してください。

export CK="CONSUMER_KEY" 
export CS="CONSUMER_SECRET"
export AT="ACCESS_TOKEN"
export AS="ACCESS_SECRET"

Responsive image

書き終わったら、 キーボードの 「ESC」を押して、
「:wq」と入力して、 保存して外に出てください。

そして、忘れずに

# 電源オフにしても使えるようにセーブ。
[username@hostname ~]$ source .bash_profile

環境変数って??

環境変数とは、
単なるOSが持ってる パスや文字列のことです。

Responsive image

python test.py と打ち、実行すると、

OS(Win Macなど) 側が、まず

「Python」って何? 「食えるの?」 と疑問を持ち、

環境変数が格納してある 場所を順番に探します。 そこで、「Python= Pythonへのパス」
がちゃんと書かれていると、 「OK、Pythonの 場所が見つかった。
このパスの 「Python」を実行する」 となり、 ちゃんと「Python」が実行されます。

Responsive image

今度は「Pythonファイル」の中で 環境変数を見つける場合。

こちらもプロセスは一緒です。

OSが「VAR」という環境変数 を探して、

「Python」に渡してあげて、 それを「Python」が実行して、

「Wonderfull Spam!!」を 表示させます。

ちなみに「Python」 でよく使われる
「Spam」とは、 「Python」の作者である
グイド・ヴァンロッサム が好きだった
Monty Python の中の スパム というスケッチからきてます。


Pythonで環境変数を使う

さて、環境変数を 使えるようにしたので、

これをOSを操るPythonの 標準モジュールである

「OS」をインポートして Pythonスクリプトで 使えるようにしましょう。
# 環境変数名には、spamという文字列が入っている。

# OSモジュールをインポート
import os

# 環境変数名を指定して取り出す。
env=os.environ.get('環境変数名')

# それを表示させる。
print(env)

# 表示結果。
'spam'
これだけです。 あとは前回のスクリプトの
アクセストークンなどの部分を 書き換えるだけです。

スクリプトまとめ

import tweepy
import os

# 環境変数から値を取り出す。
CONSUMER_KEY = os.environ.get('CONSUMER_KEY')
CONSUMER_SECRET = os.environ.get('CONSUMER_SECRET')
ACCESS_TOKEN = os.environ.get('ACCESS_TOKEN')
ACCESS_SECRET = os.environ.get('ACCESS_SECRET')

# 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)

# 検索ワードを決める。
word='モーニング娘'

# 検索件数を決める。
set_count = 10

# 検索
results = api.search(q=words, count=set_count)

# 一人ずつ処理。
for result in results:
  username = result.user._json['screen_name']
  user_id = result.id

  # いいねとフォロー。
  try:
    api.create_favorite(user_id)
    api.create_friendship(username)
  except:
    pass

  # リツイートの処理。  
  try:
    api.retweet(user_id)
  except:
    pass

  
# フォロバ
followers=[follower for follower in tweepy.Cursor(api.followers).items()]
following=[friend for friend in tweepy.Cursor(api.friends).items()]

followers_id=[follower.id for follower in followers]
following_id=[follow.id for follow in following]

for i,follower_id in enumerate(followers_id):
  if follower_id not in following_id:
    followers[i].follow()

適当に名前をつけて保存。

そのPythonファイルを、 WinSCP などのFTPクライアントツールで サーバーに転送。

viエディターで直接書いても良し。

定期実行


CRONジョブ

さて、続いてはCORESERVER コントロールパネルに入って

定期実行のための CRONジョブというものの 設定を行っていきます。

Responsive image


Responsive image


Responsive image

順番通りに進めます。

詳しくは左上の赤枠部分の マニュアルに書いてあります。

シェルスクリプト

さて、CRONジョブの設定が 終わりましたが、 実行ファイルの拡張子が
「.sh」になっている ことに気がついたと思います。

これはシェルスクリプト ファイルで、 普段つかっている 「ls -al」や「cd」
などをまとめて書いて 一連の流れを 実行できるというだけです。

Pythonスクリプトファイルと 変わらないです。

サーバーに設置

CRONジョブの設定箇所で、 実行ファイルの 前の部分のパスは、
ホームダイレクトリ になっています。

ですから、 実行ファイルを作る場所は ログインしたところの フロアになります。
viエディターで、 サクッと書いていきましょう。

[username@hostname ~]$ vi test.sh

「I」を押して 「INSERTモード」 にするのを忘れずに

# ここが重要、この二行がないと
# 設定した環境変数を読み込んでくれないだー!

#!/bin/bash -l
source /virtual/username/.bash_profile

# 普段コマンドラインで打ってる実行コマンドを書く。
# Pythonファイルの名前は、各自上で保存した名前。
python test.py

「ESC」を押して、 「:wq」で保存。

実行

それでは、CORESERVER側で 好きな時間に設定して、
CRONジョブで 定期実行をしてみましょう。



実行前

Responsive image

実行後

Responsive image



とりあえず、 なんとかできました。

まだまだ改良点、 できることは山のように あります。

ただそれを考えるだけで ワクワクしてきますね!

それではまた次回。


See You Next Page !