Jリーグと海外サッカーと日本代表のカレンダーを作りました


Category
Tags

こんにちは。今回は今までと打って変わって、少し技術系の内容について書いていきたいと思います。今回ここで紹介するのは、「Jリーグ(J1,J2,J3,ルヴァンカップ,天皇杯など)・海外サッカー(プレミアリーグ・セリエA・ブンデスリーガ・リーガ)の試合予定カレンダー」です。

作成した動機

自分は日頃、Jリーグのスケジュールは「さっかりん」やYahoo!などで確認・取得していましたが、海外サッカーに関しては「さっかりん」のようなまとめてチームごとにカレンダーファイルを取得できる場所がなく、不便に思っていました。(正確にはプレミアリーグだけは公式で配っています)海外サッカーは基本的に日本時間の夜中にやっていることが多いので計画的に確認したいと重い今回のカレンダーを作成するに至りました。

成果物

icsファイルがこちらから、webcal形式がこちらからアクセスできます。両方ともスマートフォンやPCのカレンダーアプリなどにお使いいただけます。これで毎週どんな試合があるかを見ることが出来ます!!
webcal
webcal://jackjasonb.com/ics/football.ics

2019.10.24追記
リーグごとのカレンダーの作成をしました。
以下のページからダウンロードできます。

Football Calendar Jリーグと海外サッカーと日本代表のカレンダー | じゃっくそん's Place

jackjasonb.com

Football Calendar Jリーグと海外サッカーと日本代表のカレンダー | じゃっくそん's Place

予定の形式

タイトルに対戦チームとすでに終了した試合ならスコアを、ホームチーム、アウェイチームの順で表示します。そしてメモ欄にリーグの名前と節を表示しています。

img2 img3

icsとwebcalの違い

ics形式ではすでに作成されているカレンダーに試合予定を追加することが出来ます。webcal形式ではこのカレンダーをWeb上で照会することによって先程のスコアがリアルタイムに更新されるカレンダーを追加することが出来ます。
要約するとics形式で追加した試合ではスコアの更新がされませんが、webcalで追加した試合ではスコアの更新がされます。ics形式では既存のカレンダーに自由に予定を追加できますが、webcal形式ではこれを行えません。コピーは出来ます。

注意

なんと言っても素人が作ったものなので今後仕様が変わったりバグが有ることが考えられます。使用の際にはこれをご了承ください。

技術的な話

このカレンダーを作成している技術的な話をします。まず、このカレンダーはプログラムによって作成されています。
環境はこのような感じです。

Python 3.7.4
<使用外部ライブラリ>
beautifulsoap4
pandas

その他はPythonの標準ライブラリを用いています。分かる人が見れば分かると思いますが、PythonのライブラリであるBeautifulSoapを使って試合予定をウェブスクレイピングしてカレンダーを作成しています。そして出来たカレンダーをこのサイトの公開フォルダ内に置いて外部からのアクセスを可能にしているということです。
予定の更新をするための定期的なプログラムの実行はサーバーのCron機能を用いて行っています。(このためにサーバー移行したんです…!)

カレンダーを作るにあたってプログラムが行っている内容は以下です。

1.ウェブスクレイピングして各リーグの試合予定を取得する。
2.取得した予定の形式を扱いやすいように整形してcsvファイルに保存する。
3.出来たcsvファイルを元にicalender形式のicsファイルを作成する

この手順でicsファイルの作成が行われています。

難しかった点

やはり、BeautifulSoapでのウェブスクレイピング部分です。スクレイピングしているサイトの形式に合わせて、取得するCSSセレクターのコードを書き換えたり、どのように書けば簡潔なコードを作成できるか考えるのが大変でした。まあそこがプログラミングの醍醐味とも言えるところですが。

参考にしたサイト・書籍

今回このプログラムを作成するにあたって参考にしたものを紹介します。

PythonによるWebスクレイピング 第2版

¥3,520 (2021年01月21日取得)

amazon.co.jp

PythonによるWebスクレイピング 第2版

入門 Python 3

¥4,070 (2021年01月21日取得)

amazon.co.jp

入門 Python 3

こちらも有名なオライリーの本。 対象はプログラミングを全くしたことのない人となっていますが個人的には少し厳しいのでは?と思います。私は元々C言語やらJavaやらを学習していたので難なく読めましたが……。とは言っても中々網羅されているのでPythonを初めて触る方にはおすすめです。

参考サイト

https://developers.worksmobile.com/jp/document/1007011?lang=ja
https://hacknote.jp/archives/23977/
http://www.asahi-net.or.jp/~CI5M-NMR/iCal/ref.html
こちらのサイトではicalender方式について参考にさせていただきました。

今後の予定

場所情報を追加したい

今回のカレンダーは公開した時点ではまだ場所情報が追加されていません。なのでスタジアム名くらいは入れておきたいかなと思います。スタジアム名でホームチームがどちらかを確かめることも出来るので実装したいところです。

チーム名を日本語に統一したい

現在は海外リーグのチーム名は全て英語で統一されています。これはこれでカッコいいとも思いますが、Jこれを全て日本語に統一したいかなと思います。実装自体はそんなに難しいわけではないので気が向いたら取り組みたいとおもいます。
→2019.10.12 チーム名の日本語化に対応!
img4

カレンダーに追加する試合を選べるようにしたい

今回公開したカレンダーを追加すると土日の予定が下の画像の感じになります。

img5

めちゃくちゃ予定があるように見えますね。これは見にくい。ので、自分で追加する試合を選べたらなと思います。
実現方法としては自分の勉強も兼ねてWEBサイトかウェブアプリでも作ろうかなと考えております。
そのためにCSVファイルを作成しているので今後ちびちびと開発していきたいです。

カレンダーにまだ追加していない試合を増やしたい

今回のカレンダーは日本のJクラブの試合はほぼ網羅されていますが、代表チームやチャンピオンズリーグなどまだ追加しきれていない試合があります。この辺も網羅していきたいです。
→ 2019.10.12 日本代表の試合に対応!
→2019.10.13 UEFA Champions Leagueに対応!

というわけで以上、今回作成したものです!今後仕様とか表示とか色々変わる可能性がありますが、個人開発なのでそのへんは許していただければ…!

以上です。お読みいただきありがとうございます。またよろしくお願いします。



2019.10.11 03:00  2020.04.20 00:33