프로야구 타자 성적을 매일 자동 게시 트위터 봇 만들기

소개



프로 야구의 성적 (타율, 타점 등)을 매일 자동으로 게시하는 트위터 봇을 만들어갑니다.
사용되는 기술은 주로 다음 세 가지입니다.
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을 약간 변경하면됩니다.


이를 바탕으로 투수 성적 버전을 만들려고합니다.

좋은 웹페이지 즐겨찾기