PythonでbitFlyerFXをつぶやくbotを作成

Python, プログラミング

Twitter bot を作るにあたり

なぜTwitter botを作ろうと思ったのか?それは格安スマートウォッチを入手したからだ!


Amazonで見る

ただ、こいつに通知しようと思っても対応しているアプリが少ないので自由にできない。

でも、Twitterの通知はできる。

ということで、Twitter botを作って、Twitter投稿→スマートウォッチで情報を確認。ということをやってみたいと思います。

参考サイト

こちらのサイトを参考にしていきます。

投稿テスト

予想以上簡単に、pythonから投稿することができました。TwitterAPIを取得するところが一番時間かかった程度です。

ちなみにソースコードは2部構成です。

CONSUMER_KEY = "XXXXXXXXX"
CONSUMER_SECRET = "XXXXXXXXX"
ACCESS_TOKEN = "XXXXXXXXX"
ACCESS_TOKEN_SECRET = "XXXXXXXXX"
#coding; utf-8

from requests_oauthlib import OAuth1Session
import json
import settings   #ここでトークンなどの設定ファイルを読み込む。
import random
import datetime

twitter = OAuth1Session(settings.CONSUMER_KEY,  settings.CONSUMER_SECRET, settings.ACCESS_TOKEN, settings.ACCESS_TOKEN_SECRET)

tweets = ["pythonによる自動投稿①","pythonによる自動投稿①", "pythonによる自動投稿③"]   #ここにツイートする内容を入れる

randomtweet = tweets[random.randrange(len(tweets))]
timestamp = datetime.datetime.today()
timestamp = str(timestamp.strftime("%Y/%m/%d %H:%M"))   #タイムスタンプを用意

params = {"status": randomtweet + " " + timestamp}
req = twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params)

ちなみに実行するには実行するには下記モジュールが必要です。

sudo pip3 install requests_oauthlib

自動投稿にしてみる

自動投稿のため、まずはcronで実施してみます。

crontab -e

エディタ選択になるので、vimを選んでcronを記載しました。

1分毎に起動に設定して実行したところ…

一応動いた模様です。とりあえず自動投稿まではいけたので、スクレイピングを絡ませていきます。

今回作るもの

bitFlyerの現在価格をつぶやくボットを作ってみたいと思います!わりと実用的です。

ちなみに、bitFlyerではこんな感じでAPIを公開していますので、これを叩けば作れます。

ソースコード

昨日作っていたものを改変しました。2部構成です。

CONSUMER_KEY = "XXXXXXXXX"
CONSUMER_SECRET = "XXXXXXXXX"
ACCESS_TOKEN = "XXXXXXXXX"
ACCESS_TOKEN_SECRET = "XXXXXXXXX"
#coding; utf-8

rom requests_oauthlib import OAuth1Session
import json
import settings   #ここでトークンなどの設定ファイルを読み込む。
import requests
from time import sleep
import sys

twitter = OAuth1Session(settings.CONSUMER_KEY,  settings.CONSUMER_SECRET, settings.ACCESS_TOKEN, settings.ACCESS_TOKEN_SECRET)

# データを取得
payload = {
	'product_code': 'FX_BTC_JPY'
}
url = 'https://api.bitflyer.com/v1/ticker'
while (1):
	r = requests.get(url, params=payload)
	# print(r.status_code, "-")
	if (r.status_code != 503) and (r.status_code != 429):
		break
	sleep(0.3)

resp = r.json()
# print(resp)

tweets = "{:,}".format(int(resp['best_ask'])) + "\n#ask #bitFlyer_FX"
params = {"status": tweets}
req = twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params)

実行結果

こんな感じで配信されます。10分毎に投稿するようになっているので、本垢だとうざそうです。

スマートウォッチに通知を表示するとこんな感じです。表示を絞ったので割と見やすいです。