はじめに
みなさんこんにちは
Twitter大好きさんたろーです
今回はTwitterのTLからワードをとってきて、ツイートするBotをつくってみました。
つくったBotはこちら↓
https://twitter.com/PositiveYellBot
何から何まで初めて触るものばかりでしたので、もっと良い方法は山のようにあるはずです。むしろ教えてほしいです(´;ω;`)
少しでも他の人の参考になれば嬉しいですね
ちなみにソースコードはGitHubで公開しています↓
https://github.com/Papyrustaro/PositiveYellBot
具体的な機能
①ツイート機能
TLから最新10件のデータ取得
→固有名詞があれば固有名詞を、なければ名詞群を抜きとる
→用意された定型文に抜き取った名詞を入れツイート
②フォロバ機能
フォロワーの中でフォローしていない人をフォローする
①を15分ごとに、②を1日ごとに実行する
開発環境
WSL(Ubuntu 18.04.3 LTS)
Python 3.6.8
pip 9.0.1
TwitterAPI認証アカウント
tweepy
MeCab
mecab-ipadic-NEologd(MeCabで使う辞書のようなもの)
cron
環境構築
1.TwitterAPI認証済アカウントの作成
APIKeyやAccessTokenを取得するために、TwitterAPIの認証アカウントをつくる必要があります
「なんのために使うのか」「どのように利用するのか」など英語で書かなきゃいけないんです...
私は翻訳突っ込んでも問題なかったですが、知り合いの中で認証されなかった人もいるのでお気を付けを
詳しい手順はこちらを参照→https://qiita.com/kngsym2018/items/2524d21455aac111cdee
ここでひとつ気を付ける点が
アプリを作成する際のApp Nameがツイート欄にも表示されます(画像右下の青色になってる部分)
2.WSLのインストール
私はこちらの記事を参考にしてWindows10にWSLをインストールしました(少し前ですが)
そこまで手間じゃなく、とても優秀な子です^^
https://qiita.com/Aruneko/items/c79810b0b015bebf30bb
3.pip, tweepy
※注意: 私は安易にpipを利用しましたが、Pythonの環境構築には次の2つの記事を参考にしてもらったほうがいいです
https://qiita.com/Aruneko/items/c63ed3f5770569fb5e11
https://qiita.com/Aruneko/items/796d7eeb61e1f36ae4a0
以下私のやった環境構築を軽く
まずPythonですが、Ubuntuにはすでにinstallされていました
<バージョン確認>
python3 --version
pipのインストール
sudo apt install python3-pip
tweepyのイントール
pip3 install tweepy
4.MeCab(mecab-ipadic-NEologd)
MeCabとは
オープンソースの形態素解析エンジン
これを利用することにより、文を解析、品詞分解してくれる(ざっくり)
他にも形態素解析エンジンは様々ですが、
・Pythonに対応
・ipadic辞書を使うことにより流行りの単語もわかる(辞書は週2回更新されているらしい)
という点からMeCabを採用しました
インストール
こちらの記事を参考にしました
https://qiita.com/ekzemplaro/items/c98c7f6698f130b55d53
https://qiita.com/SUZUKI_Masaya/items/685000d569452585210c
sudo apt install mecab
sudo apt install libmecab-dev
sudo apt install mecab-ipadic-utf8
sudo pip3 install mecab-python3
mecab-ipadic-NEologdのインストールはこちらを
利用方法や環境ごとの注意なども書かれています
https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
sudo apt install git make curl xz-utils file
cd /tmp
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n
(途中でyes/noきかれるのでyesと入力)
PythonからMeCabを利用する
標準入力された文字列を形態素解析し、表示するサンプルプログラム
import sys
import MeCab
# ipadic辞書を利用する
# install先は echo `mecab-config --dicdir`"/mecab-ipadic-neologd" コマンドで確認
mt = MeCab.Tagger("-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd")
def showPartOfSpeech():
str = input("解析したい文: ")
res = mt.parseToNode(str)
while res:
print(res.feature)
res = res.next
if __name__ == '__main__':
showPartOfSpeech()
実行例
解析したい文: みりあスマブラやんないよ
BOS/EOS,*,*,*,*,*,*,*,*
名詞,固有名詞,人名,名,*,*,みりあ,ミリア,ミリア
名詞,固有名詞,一般,*,*,*,スマブラ,スマブラ,スマブラ
助動詞,*,*,*,不変化型,基本形,やん,ヤン,ヤン
形容詞,自立,*,*,形容詞・アウオ段,基本形,ない,ナイ,ナイ
助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
BOS/EOS,*,*,*,*,*,*,*,*
実装
プログラム
冒頭でも書きましたが、ソースコードはGitHubに公開しているので
こちらを参照してください
https://github.com/Papyrustaro/PositiveYellBot
cronによる自動化
WSLでcronを使うということ
まず仕様の話をしなければなりません
cronによってPythonのプログラムを定期的に実行する、
ということで自動ツイートを実現しています
しかしWSLが起動していない間は動かないんです
つまり、WSLを起動していれば自動で呟くBotになります
私はそれでいいと感じましたが、常に動かすならサーバー借りたりしないとですかね...
WindowsのPCを起動をしてさえいれば、WSLを立ち上げなくても動かせる方法もあるみたいです
実行
crontab -e
でcronで実行したいコマンドと時間を記述
sudo service cron restart
で動きます
service cron status
でcronが現在動いているかチェック
今回私が書いたものを紹介
tweet.pyを15分に1回
follow.pyを1日に1回実行
標準出力をtweet_log.log, follow_log.log
エラー出力をtweet_log_err.log, follow_log_err.log
に書き込む処理
LANG=ja_JP.UTF-8
*/15 * * * * python3 /home/papyrus/positive_yell_bot/tweet.py >>/home/papyrus/positive_yell_bot/tweet_log.log 2>>/home/papyrus/positive_yell_bot/tweet_log_err.log
0 0 * * * python3 /home/papyrus/positive_yell_bot/follow.py >>/home/papyrus/positive_yell_bot/follow_log.log 2>>/ home/papyrus/positive_yell_bot/follow_log_err.log
記事はたくさんあります。どれ見てもかけるはず
https://qiita.com/onomame/items/71646c5517a39bcd01cc
つまづいた点
ツイートテキストにURLなども含まれる
home_timelineなどでstatus.textを持ってくるが中身を覗くと
RTやら@アカウント名やらURLが入ってます
正規表現を利用したりして取り除くしかなかったです...
特定のツイートにリプが来ているかわからない
これは私が知識不足なだけで、本当はそういう機能があるのかもしれないです
statusにはin_reply_to_status_idというものがある
これはこのツイートが誰かにリプライしているものか、を判断するもの
リプライされているか、判断できるようなものはなかった(statusの中身を全て見たがそれらしきものはない)
フォロー上限
実は最初フォロバ機能も一緒に15分に1回呼んでいました
しかし、少しして「フォロー上限に達しましたよー」とエラーが
どうやらapi.create_friendship()はすでにフォローしている人もフォロー処理をするようだ
フォロワーが自分をフォローしているかどうかの処理、全探索は処理が大変そうだったのでおとなしく24時間に1回呼ぶことにしました...
(賢い書き方募集中)
python'3'
UbuntuはpythonコマンドではPython3系ではなく2系が呼ばれるのがデフォ
今回のインストールは3系用にやっていたので
間違ってpythonコマンドを呼ぶとわけのわからないエラーがでます
これのせいで「なにもしてないのに壊れた」と何度かなりました
cronが動かない
service cron restart
をしても「can't open or create /var/run/crond.pid: Permission denied」というようなエラーが出るかもしれない
詳しい原因はわからなかったが、sudoをつけることで解決
おわりに
Python自体初めて書いたのですが、いやあ便利ですね
Python!Python!と世間で言われているのがわかった気がします
Twitter以外のAPIでもPythonを使って遊べるみたいなので、興味のあるかたぜひ!!