マリノス 試合スケジュール googleカレンダー 登録 半自動化

小学生の頃サッカーをやっていたんですが、
Jリーグについてはクラブチームをなんとなく知ってるくらいでした。

もともと妻がサッカーが好きでマリノスファンだから一緒に日産スタジアムに試合を見に行ったら
自分もハマっちゃいました。

あのスタジアムの応援の一体感が好きでチャントも一通り覚えました。

娘が生まれてからはスタジアムにはなかなか行けてないです。
ですが、マリノスの試合はDZANを契約しているので毎回欠かさずに見ています。

シーズン中は毎週末試合があるのですが
マリノスの試合がいつあるのか管理がうまくできていないと思いそれを改善する方法
以下にまとめようと思います。

課題点

  1. 試合のスケジュールを毎回公式サイトで確認
  2. 1年のスケジュールを確認したい
  3. 次の試合のスケジュールを把握したい
  4. 他の予定との調整がしにくい

試合のスケジュールがテキストベースなので把握しづらい。
自分は普段googleカレンダーを使ってスケジュール管理しているので
googleカレンダーに登録できれば視覚的にスケジュールを把握できると思いました。

↓↓↓↓↓↓公式サイトのスケジュールについてはこんな感じ↓↓↓↓↓↓

スクリーンショット 2019-06-14 0.02.39

ただこれを1つ1つ手でgoogleカレンダーへ入力するのは面倒だと思いました。

そこで調べたらgoogleカレンダーにはインポート機能というものがあるのでこれを使ったら
いけるんじゃないかなと思いやってみました。

googleカレンダー インポート機能について

パソコンでgoogleカレンダーを開き 歯車のアイコンから設定をクリック

スクリーンショット_2019-06-15_0_54_47

インポートをクリック



CSVファイルをインポートしそのファイルの中身からスケジュールを入れることが可能
スクリーンショット_2019-06-17_0_09_30

そもそもCSVファイルとは?

「CSV」とは “Comma Separated Value” の略で、データをカンマ(” , “)区切った値の事です。アプリケーション間でデータをやり取りする際に使われます。

https://proengineer.internous.co.jp/content/columnfeature/5219

こんな感じのファイルです。

スクリーンショット 2019-06-17 0.20.04

googleカレンダー CSV仕様

(例)

Subject (必須) Start date (必須) Start time (任意)
マリノス VS フロンターレ 05/30/2020 10:00 AM

グレーの行がヘッダといいます。
白い行がデータ行でカレンダーに登録するためのデータをどんどん記載していきます。

詳細にカレンダーを登録したい場合は下記のうようにすることでカレンダーに
登録できます。

  • End Date
    予定の終了日。
    例: 05/30/2020
  • End Time
    予定の終了時刻。
    例: 1:00 PM
  • All Day Event
    終日の予定であるかどうかを指定します。終日の予定の場合は「True」、
  • そうでない場合は「False」と入力します。
    例: False
  • Description
    予定の説明やメモ。
    例: "神奈川ダービー 負けられない戦いがそこにはある" Location
  • 予定の場所。
    例: "日産スタジアム"
  • Private
    予定を限定公開にするかどうかを指定します。限定公開の場合は「True」、
  • 限定公開でない場合は「False」と入力します。
    例: True

上記の例では、2020 年 5 月 30 日の午前 10 時から午後 1 時までの予定「マリノス VS フロンターレ」が作成されます。
場所は「日産スタジアム」、説明は「神奈川ダービー 負けられない戦いがそこにはある」で、限定公開となります。

pythonによるスクレイピング


CSVファイルを作成するのが面倒だったのでpythonで公式サイトを
スクレイピングして
CSVファイルを作成することにしました。

pythonのバージョン
3.7.2

GetMarinosSchedule.py
※スマホの場合はシンタックスハイライトが利かないのでPCビューで確認ください。

from pprint import pprint
from urllib3 import PoolManager
import requests
from bs4 import BeautifulSoup
import csv
import re
import unicodedata

#マルチバイトが含まれているか確認するためのメソッド
def is_japanese(string):
for ch in string:
name = unicodedata.name(ch)
if "CJK UNIFIED" in name \
or "HIRAGANA" in name \
or "KATAKANA" in name:
return True
return False

def main():
POOL_MNG = PoolManager()
TARGET_URL = "https://www.f-marinos.com/match/schedule-results/"
HTML = requests.get(TARGET_URL)

SOUP = BeautifulSoup(HTML.content, "html.parser")

schedule_table = SOUP.findAll("table",{"class":"table_contents"})

with open('marinos_schedule.csv', 'w') as csv_file:
fieldnames = ['Subject','Start Date','Start Time','End Date','All Day Event','Description','Location','Private']
csv_dict = {}
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
cnt = 0
for schedule_rows in schedule_table:
cnt += 1
if cnt == 100:
break
rows = schedule_rows.find_all("tr")

for row in rows:
#会場取得
venue = row.findAll("td")[4].get_text()
print(venue)
venue_list = venue.split()
if len(venue_list) > 1:
csv_dict['Location'] = venue_list[1]


#対戦チーム取得
vs_teams = row.findAll("td")[2].get_text()
vs_teams_list = vs_teams.split()

csv_dict['Subject']  = "【" + venue_list[0] + "】" + row.findAll("td")[1].get_text() + " " + vs_teams_list[0]

#スケジュール部分抜き出し
play_date = row.findAll("td")[0].get_text()
play_date_list = play_date.split()

#開始日
csv_dict['Start Date'] = '2019/' + play_date_list[0]
csv_dict['Start Date'] = re.sub('\(.*\)

,"",csv_dict['Start Date'])
#開始時間
if (is_japanese(play_date_list[2]) == True):
csv_dict['Start Time'] = ""
else:
csv_dict['Start Time'] = play_date_list[2]
writer.writerow(csv_dict)

if __name__ == "__main__":
main()

↓↓↓↓このプログラムから作成したCSVファイルは下記からダウンロード可能です。↓↓↓↓

マリノス試合スケジュールCSV

インポートした結果がこんな感じです。

スクリーンショット_2019-06-18_0_31_52

良くなった点

  1. カレンダーに予定が入ってるのでパット見予定を把握しやすい
  2. シーズンの年間スケジュールを把握することができる
  3. 他のスケジュールの調整がしやすくなった

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です