はじめに
今回の記事は技術的なことになります。どのようなbotかなどは別途以下の記事をみてください。
parco1021.hatenablog.com
また、今回は全体的なことのみ書いて具体的なことを書いたものは別途書いてこのブログへリンクを追加していこうと思っています。
使用環境
conda 4.7.10
Python 3.7.3
Twitter api
Fortnite Tracker api
処理の流れ
今回作成したbotの処理のフローが以下です。
この図の①~⑧までの処理を後で別々に書いていこうと思います。
プログラム
import requests
import twitter
import urllib.request
import requests
from requests_oauthlib import OAuth1Session
import json
import time
from datetime import date
key=''
URL='https://api.fortnitetracker.com/v1/store'
CK=''
CS=''
AT=''
AS=''
twitter = OAuth1Session(CK,CS,AT,AS)
url_media = "https://upload.twitter.com/1.1/media/upload.json"
url_text = "https://api.twitter.com/1.1/statuses/update.json"
def tweet(media_id,j,result): #⑦、⑧
now_date = date.today()
y = now_date.year
m = now_date.month
d = now_date.day
len_pic = len(media_id)
if len_pic == 4:
tweet="{}年{}月{}日のショップその{}\n{} {}vBucks\n{} {}vBucks\n{} {}vBucks\n{} {}vBucks\n#Fortnite #フォートナイトショップ"
status = tweet.format(y,m,d,j+1,result[j*4]['name'],result[j*4]['vBucks'],result[j*4+1]['name'],result[j*4+1]['vBucks'],
result[j*4+2]['name'],result[j*4+2]['vBucks'],result[j*4+3]['name'],result[j*4+3]['vBucks'])
elif len_pic == 3:
tweet="{}年{}月{}日のショップその{}\n{} {}vBucks\n{} {}vBucks\n{} {}vBucks\n#Fortnite #フォートナイトショップ"
status = tweet.format(y,m,d,j+1,result[j*4]['name'],result[j*4]['vBucks'],result[j*4+1]['name'],result[j*4+1]['vBucks'],
result[j*4+2]['name'],result[j*4+2]['vBucks'])
elif len_pic == 2:
tweet="{}年{}月{}日のショップその{}\n{} {}vBucks\n{} {}vBucks\n#Fortnite #フォートナイトショップ"
status = tweet.format(y,m,d,j+1,result[j*4]['name'],result[j*4]['vBucks'],result[j*4+1]['name'],result[j*4+1]['vBucks'])
else:
tweet="{}年{}月{}日のショップその{}\n{} {}vBucks\n#Fortnite #フォートナイトショップ"
status = tweet.format(y,m,d,j+1,result[j*4]['name'],result[j*4]['vBucks'])
media_id= ','.join(media_id)
params = {"status": status, "media_ids": media_id}
print(params)
twitter.post(url_text,params=params)
time.sleep(5)
def pic(media_id,i,j,result): #⑤、⑥
img_url = result[i+4*j]['imageUrl']
print(img_url)
headers = {"User-Agent": "Mozilla/5.0"}
request = urllib.request.Request(url=img_url,headers=headers)
response = urllib.request.urlopen(request)
print(response)
data = response.read()
files = {"media" : data}
req_media = twitter.post(url_media,files = files)
media_id.append(json.loads(req_media.text)['media_id_string'])
print(media_id)
return media_id
def call():
#②、③、④ここから
headers = {'TRN-Api-Key' : key}
r = requests.get(URL, headers = headers)
result = eval(r.text)
print(len(result))
print(result)
num = len(result) // 4
mod = len(result) % 4
#ここまで
for j in range(0,num):
media_id = []
name = []
vbucks = []
for i in range(4):
pic(media_id,i,j,result) #⑤、⑥
tweet(media_id,j,result) #⑦、⑧
media_id = []
name = []
vbucks = []
for k in range(0,mod):
pic(media_id,k,j+1,result) #⑤、⑥
tweet(media_id,j+1,result) #⑦、⑧
if __name__ =='__main__':
call()
データ数は毎日異なるのでそれに対応させるように書きます。4つずつデータを呟きたいのでまずは4枚ずつできるだけ呟きます。例えば17個のデータだったらnum=17//4=4となります。なのでまずはfor文のところのjを4回まわすことで16個呟きます。そして残りの1を呟く方法としてmod=17%4=1となるのでfor文のところのkをmodの数だけまわします。
それぞれ値を関数に渡して処理をします。本当は呟く文章の箇所でif-elifを多用したくなかったのですがよくわからなかったのでゴリ押しました。
各処理の説明
①毎日定時に実行
parco1021.hatenablog.com
②、③呟くデータをAPIを叩いて取得する
parco1021.hatenablog.com
④~⑧データを呟く
parco1021.hatenablog.com
全体のコードはgithub見てください。コードが汚いのは許してね。
https://github.com/tnb1021/fortnitebot
おわり。
もしよければ↓ぽちっと↓お願いします。
にほんブログ村