#今回やること
こんにちは、Lily.Mameokaです。今回はAWS EC2から自動でツイートしたいと思います。私自身EC2を使ったことすらなかったので、Pythonの環境をサーバ上に作ったりするところから書きたいと思います。
#前提
・AWSの登録を済ませている
・macOS Mojave 10.14.4
・TwitterDeveloperアカウントを取得している
#サーバ関連の前に、今回実行するコード
今回は以下のコードを実行します。内容は簡単です。単にツイートするだけ。ただ、ツイート内容が被ってしまうので最後に実行した時刻を加えます。
# -*- coding:utf-8 -*-
import tweepy
import time
CONSUMER_KEY = 'こんしゅーまー きー'
CONSUMER_SECRET = 'こんしゅーまー しーくれっと'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
ACCESS_TOKEN = 'あくせす とーくん'
ACCESS_TOKEN_SECRET = 'あくせす とーくん しーくれっと'
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
ut = time.time() #時刻の取得
api.update_status("ようりこ警察だ!!なんだそのけしからんようりこは!今すぐ投降しろ!投降してそのようりこを渡せ!母さんが泣いてるぞ!なんなら本官の母さんも泣いてる!!ごめんな母さん!!これが証拠品だな…ハァ〜たまんねっ…これ本官が持って帰る!本官が持って帰るゥ〜! \n"+str(ut)) #ツイートする
#インスタンスの作成とか
まずはインスタンスを作成します。以下の記事が非常にわかりやすいですので、、、参考にしてインスタンスを作成し、そんで、SSH接続の手前までやってクレメンス
http://tech.lexues.co.jp/archives/1668
#SSH接続
SSH接続する方法、正直なところ調べてもよくわからなかったので、試行錯誤した結果うまくいった方法を書いときます。
$ ssh [ユーザ名]@[パブリック DNS (IPv4)] -i ~/.ssh/[キーペア名].pem
これをターミナルに打ち込めばOK
(一応書いとくと、[ ]←括弧は不要)
###[ユーザ名]
前記インスタンス作成の説明の記事通りに「Amazon Linux AMI 2015.03 (HVM), SSD Volume Type 64ビット」を選択しているなら、
ec2-user
とする。
###[パブリック DNS (IPv4)]
EC2ダッシュボードのインスタンスの説明にあるやつ。〜〜〜amazonaws.comみたいなやつ。
###[キーペア名].pem
パブリックキーとプライベートキーの作成ってやったやろ?「新しいキーペアを作成」ってのを選択したり、キーペアのダウンロードをしたりしたやつ。あれの名前をここに書く。
これができると、SSH接続が完了する。うまくいくとターミナルに"EC2"って文字を立体的にした感じの文字がでてくる。
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
#pyenvのインストール
$ sudo yum install git -y
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
確認してみる
$ pyenv -v
#Pythonのインストール
まず必要な依存関係をインストールして、、、
$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel -y
Python本体をインストールする。
$ pyenv install 3.6.2
Pythonのバージョンを宣言する。
$ pyenv global 3.6.2
$ pyenv rehash
確認してみる
$ python --version
これで「Python 3.6.2」って出てきたら成功。やったね。
#ローカル環境にあるファイルをサーバにアップロードする
ローカル環境にあるファイルをEC2にアップロードするので、ここで一度ログアウト。
$ exit
これでログアウトできる。
次に、アップロードしたいファイルがあるディレクトリに移動して、SCPコマンドでファイルをアップロードする
$ scp -i ~/.ssh/[キーペア名].pem [ファイル名][ユーザ名]@[パブリック DNS (IPv4)]:~/.pyenv
[キーペア名]とかは前述の通り。ファイル名にはアップロードしたいファイルの名称を。
これができたらもう一度SSH接続して.pyenvの中にちゃんとファイルがあることを確認する。
#ちょっと待ってな
ここでTweepyを入れておこう(忘れてた)。折角なのでpipを入れる。.pyenvに移動して
$ sudo easy_install pip
一応確認
$ which pip
Tweepyを入れる。
$ pip install tweepy
これでOK。
#cronの設定
(.pyenvのまま)
cronを編集するために、
$ crontab -e
そして、iを押して編集モードにする。
cronの書き方は
分 時 日 月 曜日 cd ~/.pyenv; bash -l -c 'コマンド'
日時指定した後、ファイルがあるディレクトリに移動して、そして実行するコマンド。
だから、~/.pyenvにあるTest01.pyというファイルを10分おきに実行したいなら以下のように書く。
*/10 * * * * cd ~/.pyenv; bash -l -c 'python ~/.pyenv/Test01.py'
cronを設定できたらescキーで編集モードを終了し、
:wq
で保存・終了。
念の為、cronがちゃんと動いているか確認する。
$ service crond status
crond (pid xxxx) is running...
って表示されればOK
#実行結果
こんな感じで実行されました!!(やりすぎには注意。やりすぎるとそのアカウントからの通知が相手に行かなくなる)。それにしても、この文面が10分に一回流れてくるの、狂気だな()。
#終わりに
いやぁ〜結構簡単にできるんですね。これは色々応用できそうだ。
#ちょっとこんなことをやってみた
import tweepy
CONSUMER_KEY = 'こんしゅーまー きー'
CONSUMER_SECRET = 'こんしゅーまー しーくれっと'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
ACCESS_TOKEN = 'あくせす とーくん'
ACCESS_TOKEN_SECRET = 'あくせす とーくん しーくれっと'
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
q = "@LilyMameoka_VF 脱糞"
count = 20
search_res = api.search(q = q,count = count)
for res in search_res:
userid = res.user.screen_name
user_id = res.id
print(user_id)
username = res.user.name
print(userid)
tweet = res.text
print(tweet)
try:
api.create_favorite(user_id)
TweetContent = "あああああああああああああああああああああああああああああああ!!!!!!!!!!!(ブリブリブリブリュリュリュリュリュリュ!!!!!!ブツチチブブブチチチチブリリイリブブブブゥゥゥゥッッッ!!!!!!! ) \n https://twitter.com/"+str(userid)+"/status/"+str(user_id)+"\n"
api.update_status(TweetContent)
sys.stdout.write(username)
print("をチェックした")
except:
pass
print("------------------")
print("Done!")
これを10分間隔で実行するのをやりました。(現在進行形)
私に「脱糞」の含まれるメンションをすると私が脱糞します。汚いねぇ