小学生の頃サッカーをやっていたんですが、
Jリーグについてはクラブチームをなんとなく知ってるくらいでした。
もともと妻がサッカーが好きでマリノスファンだから一緒に日産スタジアムに試合を見に行ったら
自分もハマっちゃいました。
あのスタジアムの応援の一体感が好きでチャントも一通り覚えました。
娘が生まれてからはスタジアムにはなかなか行けてないです。
ですが、マリノスの試合はDZANを契約しているので毎回欠かさずに見ています。
シーズン中は毎週末試合があるのですが
マリノスの試合がいつあるのか管理がうまくできていないと思いそれを改善する方法
以下にまとめようと思います。
課題点
- 試合のスケジュールを毎回公式サイトで確認
- 1年のスケジュールを確認したい
- 次の試合のスケジュールを把握したい
- 他の予定との調整がしにくい
試合のスケジュールがテキストベースなので把握しづらい。
自分は普段googleカレンダーを使ってスケジュール管理しているので
googleカレンダーに登録できれば視覚的にスケジュールを把握できると思いました。
↓↓↓↓↓↓公式サイトのスケジュールについてはこんな感じ↓↓↓↓↓↓

ただこれを1つ1つ手でgoogleカレンダーへ入力するのは面倒だと思いました。
そこで調べたらgoogleカレンダーにはインポート機能というものがあるのでこれを使ったら
いけるんじゃないかなと思いやってみました。
googleカレンダー インポート機能について
パソコンでgoogleカレンダーを開き 歯車のアイコンから設定をクリック
インポートをクリック
CSVファイルをインポートしそのファイルの中身からスケジュールを入れることが可能
そもそもCSVファイルとは?
「CSV」とは “Comma Separated Value” の略で、データをカンマ(” , “)区切った値の事です。アプリケーション間でデータをやり取りする際に使われます。
https://proengineer.internous.co.jp/content/columnfeature/5219
こんな感じのファイルです。
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ファイルは下記からダウンロード可能です。↓↓↓↓
インポートした結果がこんな感じです。
良くなった点
- カレンダーに予定が入ってるのでパット見予定を把握しやすい
- シーズンの年間スケジュールを把握することができる
- 他のスケジュールの調整がしやすくなった