自分の分身を作りたい

自分の分身を作りたい

理系の大学院生だよ

twitterbotをpythonで作る。

ぜひフォローしてください

何かAPIを使ってみたかったというのと作ったスクリプトを自動で実行してみたいという動機があったので、TwitterAPIを使って自動的にツイートする仕組みを作ってみることにしたのだが、成功するに到るまで結構時間がかかってしまったのでその過程をまとめることにした。

 

 

 

今回作成したもの

まずは簡単なものを作ってみようということで、30秒に1回ランダムなワードの中から1つをツイートするというbotを作ってみることにした。

 

f:id:daigakukabuu:20180611195015p:plain

まさに自分のツイートを見ているようだ

 

↓作成したスクリプトだけ見たいという方はこちら。

GitHub - SoyaManabe/tweetblog

 

手順

手順としては、

  1. TwitterAPIを用いてツイートをするスクリプトをPythonで作る。
  2. そのスクリプトをlaunchdを用いて一定の間隔で実行する。

という流れになっている。

 

材料

TwitterAPI

アカウント上のタイムラインやプロフィール、ステータスなどをいじること、

また、ツイートやリプライを外部からすることができる。 

 

↓ドキュメント

Docs — Twitter Developers

 

launched
launchdはデーモン、アプリケーション、プロセス、スクリプトの起動・停止・管理を行う、オープンソースのサービス管理フレームワークである。アップルのDave Zarzyckiによって作られ、Mac OS X Tiger (Mac OS X v10.4) で導入された。

 というのがWikipediaの紹介である。

 

mac内に導入された、アプリやスクリプトなどの起動を管理することができるフレームワークということで、正直僕も初めて勉強したのでそれくらいのことしか説明できない。

 

はじめに「python 定時実行」みたいなワードでググっていた時真っ先に出てきたのがlaunchdではなくcrontabだった。

 

crontabというのはLinux上で、コマンド実行を時間管理するコマンドがあり、最初はそれを使うのかと思っていたのだが、macで使うのはあまり推奨されていないらしい。

というかmacにはlaunchedがあるからいらないのか。

 

作ってみた

Tweetbotの作成

$ pip install twitter

でtwitterAPIを簡単に使うためのモジュールをインストールします。

そのあとbotにしたいアカウントでtwitterAPIのAPIキーなどを取得します。

やり方はこちらを参考にしました。

 

PythonでTwitter API を利用していろいろ遊んでみる

 

コードは以下のような感じです。


#!/usr/bin/python
# -*- coding: utf-8 -*-

import twitter
import random

auth = twitter.OAuth(consumer_key="XXXXX",
consumer_secret="XXXXX",
token="XXXXX",
token_secret="XXXXX)

t = twitter.Twitter(auth=auth)

list = ["バイトやあ", "眠い", "こんにちは","おやすみ"]

i  = random.randint(0,len(list))

#ツイートのみ
status=list[i] #投稿するツイート
t.statuses.update(status=status) #Twitterに投稿

random.randint()でlist内の要素から1つを選んで、

statuses.update(status="")でstatusに定義された変数なりコメントをツイートしてくれます。

 

tweetbot.pyをlaunchdで定期的に実行させる

ここからが一苦労しました。

 

launchdの設定ファイルの作り方や登録方法は以下を参考にしました。

 

 

そして作成した設定ファイル(.plist)がこんな感じです。

 

f:id:daigakukabuu:20180611201638p:plain

 

何がうまくいかなかったかというと、launchdに登録して実行してもerr.logに

 

「twitterっていうモジュールなんてねえぞ。」

 

というエラーが30秒ごとに出てきていたのだ。

 

上のコードではもう修正済みなのですが、何がいけなかったかというと実行するたびにmacOSにデフォルトで入っているpython2.7を参照し続けていたのであった。

 

tweetbot.pyに

 

import sys
print(sys.version_info)

 

を付け足してバージョンを返させて見たら判明した。

 

plistファイルの方の12行目でpythonのパスを指定する必要があったのである。

 

 

 

 

ということでなんとか実行させることができた。

 

errorのログをしっかり見てあげることが大事だなと思いました(小並感)。

 

近いうちにgithubの方に詳しいlaunchdの使い方なんかをもう少しまとめて見たいと思う。