프로야구 타자 성적을 매일 자동 게시 트위터 봇 만들기
18426 단어 트위터schedule파이썬TwitterAPI웹 스크래핑
소개
프로 야구의 성적 (타율, 타점 등)을 매일 자동으로 게시하는 트위터 봇을 만들어갑니다.
사용되는 기술은 주로 다음 세 가지입니다.
1. 트위터에 게시
2. 웹 스크래핑
3. 정기적 인 자동 게시
참고
사용하는 기술에 대해서는 기사로하고 있으므로 적절히 참조하십시오.
1. 트위터에 게시 - 트위피로 트위터에 올리기
2. 웹 스크래핑 - 파이썬으로 웹 스크래핑
3. 정기적인 자동 게시 - schedule 라이브러리에서 정기적으로 Twitter 검색 and 좋아요
실천
실제 코드는 다음과 같습니다.
우선 셀리그입니다.
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import tweepy
import schedule
import time
# 先ほど取得した各種キーを代入する
CK="Consumer Key"
CS="Consumer Secret"
AT="Access Token"
AS="Access Token Secret"
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)
def job():
# ループ用word
words = ['打率', '本塁打', '打点', '盗塁', '失策']
for word in words:
# URL指定用の辞書
web_dic = {'打率':1, '本塁打':9, '打点':13, '盗塁':20, '失策':22}
# 成績index指定用の辞書
list_dic = {'打率':3, '本塁打':10, '打点':12, '盗塁':19, '失策':26}
# 成績指定
seek = str(word)
web_num = web_dic[seek]
list_num = list_dic[seek]
# URL指定
url = "https://baseball.yahoo.co.jp/npb/stats/batter?series=1&type="+str(web_num)
# Responseオブジェクト生成
response = requests.get(url)
# 文字化け防止
response.encoding = response.apparent_encoding
# BeautifulSoupオブジェクト生成
soup = BeautifulSoup(response.text, "html.parser")
# 取得した情報を書き込む用のファイル
f = open('grade.txt', 'w')
# タグを取得
elems = soup.find_all("div", id='odr_play')
# 順にファイルへ書き込み
for i in elems:
f.write(i.text)
f.close()
### 以下, 取得した情報を整理しているのみ
grade = [[] for i in range(10)]
f = open('grade.txt', 'r')
lines = f.readlines()
flag =False
f.close()
num = 0
grade[0].append('1')
check = '2019年'
for line in lines:
line = line.strip()
if line == '':
continue
elif check in line:
start = line.find('2') # 最初の文
end = line.find('新') # 最後の文
date = line[start:end+1] # 更新日を格納
elif num > 9:
break
elif flag == True:
grade[num].append(line)
if len(grade[num]) == 27:
num = num+1
elif line == str(1):
flag = True
print('セリーグ'+str(seek)+'順位')
print(date)
tweet = []
for i in range(10):
print(str(grade[i][0])+" "+str(grade[i][1])+str(grade[i][2])+" "+grade[i][list_num])
tweet.append(str(grade[i][0])+" "+str(grade[i][1])+str(grade[i][2])+" "+grade[i][list_num])
# 好きな言葉をツイート
api.update_status('【セリーグ'+str(seek)+'順位】'+'\n'+str(date)+'\n'+tweet[0]+'\n'+tweet[1]+'\n'+tweet[2]+'\n'+tweet[3]+
'\n'+tweet[4]+'\n'+tweet[5]+'\n'+tweet[6]+'\n'+tweet[7]+'\n'+tweet[8]+'\n'+tweet[9])
schedule.every().day.at("23:59").do(job)
while True:
schedule.run_pending()
time.sleep(1)
실행하면 매일 자동으로 업데이트됩니다.
패리그의 경우 URL을 약간 변경하면됩니다.
이를 바탕으로 투수 성적 버전을 만들려고합니다.
Reference
이 문제에 관하여(프로야구 타자 성적을 매일 자동 게시 트위터 봇 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pontyo4/items/f53a09c6e405cee1a4c0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
사용하는 기술에 대해서는 기사로하고 있으므로 적절히 참조하십시오.
1. 트위터에 게시 - 트위피로 트위터에 올리기
2. 웹 스크래핑 - 파이썬으로 웹 스크래핑
3. 정기적인 자동 게시 - schedule 라이브러리에서 정기적으로 Twitter 검색 and 좋아요
실천
실제 코드는 다음과 같습니다.
우선 셀리그입니다.
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import tweepy
import schedule
import time
# 先ほど取得した各種キーを代入する
CK="Consumer Key"
CS="Consumer Secret"
AT="Access Token"
AS="Access Token Secret"
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)
def job():
# ループ用word
words = ['打率', '本塁打', '打点', '盗塁', '失策']
for word in words:
# URL指定用の辞書
web_dic = {'打率':1, '本塁打':9, '打点':13, '盗塁':20, '失策':22}
# 成績index指定用の辞書
list_dic = {'打率':3, '本塁打':10, '打点':12, '盗塁':19, '失策':26}
# 成績指定
seek = str(word)
web_num = web_dic[seek]
list_num = list_dic[seek]
# URL指定
url = "https://baseball.yahoo.co.jp/npb/stats/batter?series=1&type="+str(web_num)
# Responseオブジェクト生成
response = requests.get(url)
# 文字化け防止
response.encoding = response.apparent_encoding
# BeautifulSoupオブジェクト生成
soup = BeautifulSoup(response.text, "html.parser")
# 取得した情報を書き込む用のファイル
f = open('grade.txt', 'w')
# タグを取得
elems = soup.find_all("div", id='odr_play')
# 順にファイルへ書き込み
for i in elems:
f.write(i.text)
f.close()
### 以下, 取得した情報を整理しているのみ
grade = [[] for i in range(10)]
f = open('grade.txt', 'r')
lines = f.readlines()
flag =False
f.close()
num = 0
grade[0].append('1')
check = '2019年'
for line in lines:
line = line.strip()
if line == '':
continue
elif check in line:
start = line.find('2') # 最初の文
end = line.find('新') # 最後の文
date = line[start:end+1] # 更新日を格納
elif num > 9:
break
elif flag == True:
grade[num].append(line)
if len(grade[num]) == 27:
num = num+1
elif line == str(1):
flag = True
print('セリーグ'+str(seek)+'順位')
print(date)
tweet = []
for i in range(10):
print(str(grade[i][0])+" "+str(grade[i][1])+str(grade[i][2])+" "+grade[i][list_num])
tweet.append(str(grade[i][0])+" "+str(grade[i][1])+str(grade[i][2])+" "+grade[i][list_num])
# 好きな言葉をツイート
api.update_status('【セリーグ'+str(seek)+'順位】'+'\n'+str(date)+'\n'+tweet[0]+'\n'+tweet[1]+'\n'+tweet[2]+'\n'+tweet[3]+
'\n'+tweet[4]+'\n'+tweet[5]+'\n'+tweet[6]+'\n'+tweet[7]+'\n'+tweet[8]+'\n'+tweet[9])
schedule.every().day.at("23:59").do(job)
while True:
schedule.run_pending()
time.sleep(1)
실행하면 매일 자동으로 업데이트됩니다.
패리그의 경우 URL을 약간 변경하면됩니다.
이를 바탕으로 투수 성적 버전을 만들려고합니다.
Reference
이 문제에 관하여(프로야구 타자 성적을 매일 자동 게시 트위터 봇 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pontyo4/items/f53a09c6e405cee1a4c0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import tweepy
import schedule
import time
# 先ほど取得した各種キーを代入する
CK="Consumer Key"
CS="Consumer Secret"
AT="Access Token"
AS="Access Token Secret"
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)
def job():
# ループ用word
words = ['打率', '本塁打', '打点', '盗塁', '失策']
for word in words:
# URL指定用の辞書
web_dic = {'打率':1, '本塁打':9, '打点':13, '盗塁':20, '失策':22}
# 成績index指定用の辞書
list_dic = {'打率':3, '本塁打':10, '打点':12, '盗塁':19, '失策':26}
# 成績指定
seek = str(word)
web_num = web_dic[seek]
list_num = list_dic[seek]
# URL指定
url = "https://baseball.yahoo.co.jp/npb/stats/batter?series=1&type="+str(web_num)
# Responseオブジェクト生成
response = requests.get(url)
# 文字化け防止
response.encoding = response.apparent_encoding
# BeautifulSoupオブジェクト生成
soup = BeautifulSoup(response.text, "html.parser")
# 取得した情報を書き込む用のファイル
f = open('grade.txt', 'w')
# タグを取得
elems = soup.find_all("div", id='odr_play')
# 順にファイルへ書き込み
for i in elems:
f.write(i.text)
f.close()
### 以下, 取得した情報を整理しているのみ
grade = [[] for i in range(10)]
f = open('grade.txt', 'r')
lines = f.readlines()
flag =False
f.close()
num = 0
grade[0].append('1')
check = '2019年'
for line in lines:
line = line.strip()
if line == '':
continue
elif check in line:
start = line.find('2') # 最初の文
end = line.find('新') # 最後の文
date = line[start:end+1] # 更新日を格納
elif num > 9:
break
elif flag == True:
grade[num].append(line)
if len(grade[num]) == 27:
num = num+1
elif line == str(1):
flag = True
print('セリーグ'+str(seek)+'順位')
print(date)
tweet = []
for i in range(10):
print(str(grade[i][0])+" "+str(grade[i][1])+str(grade[i][2])+" "+grade[i][list_num])
tweet.append(str(grade[i][0])+" "+str(grade[i][1])+str(grade[i][2])+" "+grade[i][list_num])
# 好きな言葉をツイート
api.update_status('【セリーグ'+str(seek)+'順位】'+'\n'+str(date)+'\n'+tweet[0]+'\n'+tweet[1]+'\n'+tweet[2]+'\n'+tweet[3]+
'\n'+tweet[4]+'\n'+tweet[5]+'\n'+tweet[6]+'\n'+tweet[7]+'\n'+tweet[8]+'\n'+tweet[9])
schedule.every().day.at("23:59").do(job)
while True:
schedule.run_pending()
time.sleep(1)
Reference
이 문제에 관하여(프로야구 타자 성적을 매일 자동 게시 트위터 봇 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pontyo4/items/f53a09c6e405cee1a4c0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)