EC2を使ってTwitterを定期的に動かす

#今回やること
　こんにちは、Lily.Mameokaです。今回はAWS EC2から自動でツイートしたいと思います。私自身EC2を使ったことすらなかったので、Pythonの環境をサーバ上に作ったりするところから書きたいと思います。
#前提
・AWSの登録を済ませている
・macOS Mojave 10.14.4
・TwitterDeveloperアカウントを取得している
#サーバ関連の前に、今回実行するコード
　今回は以下のコードを実行します。内容は簡単です。単にツイートするだけ。ただ、ツイート内容が被ってしまうので最後に実行した時刻を加えます。

~~~python
# -*- 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

#実行結果
![IMG_2403.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334730/39e6484c-91b6-2a23-aaeb-0a2218849e5c.jpeg)
　こんな感じで実行されました！！(やりすぎには注意。やりすぎるとそのアカウントからの通知が相手に行かなくなる)。それにしても、この文面が10分に一回流れてくるの、狂気だな()。
#終わりに
　いやぁ〜結構簡単にできるんですね。これは色々応用できそうだ。

#ちょっとこんなことをやってみた
```python:twitterDappun.py
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分間隔で実行するのをやりました。（現在進行形）
私に「脱糞」の含まれるメンションをすると私が脱糞します。汚いねぇ