【football-data.org】海外サッカーのデータを取得できるAPIの紹介
head_image

サッカーファンの皆さんこんにちは!

本記事では海外サッカーの試合結果や日程から順位表など、様々なデータを取得可能な無料のAPI「football-data.org」についてご紹介したいと思います。

APIとは

そもそもAPIとはなんぞやという人のためにざっくりと。
APIとは広い意味で使われている言葉であるため、ITについて勉強し始めの頃の自分は調べてもすぐに理解できませんでした。
総務省のICT用語集には下記のように定義されています。

Application Program Interfaceの略。OSやミドルウェア向けのソフトウェアを開発する際に使用できる命令や関数。また、それらを利用するためのプログラム上の仕様やインターフェイス。
引用元:https://www.soumu.go.jp/soutsu/tokai/tool/yougo/yougo.html


これを簡単に説明しますと、APIとはアプリの機能を外部のシステムに提供する仕組みのことです。
例えば簡単なAPIを一つ挙げると、「郵便番号検索API」というのがあります。
これは日本郵便が公開している郵便番号のデータをもとに、郵便番号から住所を検索できる機能をWebで提供しているAPIです。
※郵便番号検索APIの運営は日本郵便でなく別の企業です。

以下のURLの「郵便番号」のパラメータに任意の郵便番号を入力してアクセスすると、住所データを「json」形式で返してくれます。
https://zipcloud.ibsnet.co.jp/api/search?zipcode=(郵便番号)

このように、Webでの通信(http・https)によって機能を提供するAPIを「Web API」と言います。
今回使い方を紹介する「football-data.org」もWeb APIです。

APIを利用すれば便利な機能をAPIをを呼び出すだけで使えるので、開発が非常に楽になったりするわけです。
他にもAPIはたくさん存在しますので、APIについて気になる人は調べてみてください。

football-data.orgで取得可能なデータ

football-data.orgでは、以下の画像に示されているように欧州5大リーグを含む12のリーグやカップから、試合日程や過去の試合結果、また選手個人の情報などのデータが取得可能です。

screen-shot

取得可能なデータの例

こんなデータを取得できますよという感じで、叩いてあげるURLをいくつか例として挙げてみました。

  • アーセナルの全ての試合日程を取得する。
https://api.football-data.org/v4/teams/57/matches?status=SCHEDULED
  • プレミアリーグ第1節の全ての試合結果を取得する。
http://api.football-data.org/v4/competitions/2021/matches?matchday=1' -H "X-Unfold-Goals: true"
  • ラ・リーガの順位表データを取得する。
http://api.football-data.org/v4/competitions/PD/standings
  • クリスティアーノロナウドが所属しているチームの試合日程を取得する。
http://api.football-data.org/v4/persons/44
  • レアルソシエダに在籍するメンバーの一覧を取得する。
http://api.football-data.org/v4/teams/92
  • 久保建英のポジションや背番号などといった個人の情報を取得する。
http://api.football-data.org/v4/persons/48555

など、様々な情報を取得できて便利です。

取得データ

例として、アーセナルのプレミアリーグの試合情報を取得するためのリクエストには、以下のようなJSONデータが返ってきます。
※本APIを使用するにはアカウント登録(無料)をしてメールで送られるAPIキーが必要となります。

$ curl -X GET 'https://api.football-data.org/v4/teams/57/matches?status=SCHEDULED' -H "X-Auth-Token: <APIキー>"
{
    "filters": {
        "competitions": "PL,FLC,EL",
        "permission": "TIER_ONE",
        "status": [
            "SCHEDULED"
        ],
        "limit": 100
    },
    "resultSet": {
        "count": 22,
        "competitions": "PL",
        "first": "2022-12-26",
        "last": "2023-05-28",
        "played": 0,
        "wins": 0,
        "draws": 22,
        "losses": 0
    },
    "matches": [
        {
            "area": {
                "id": 2072,
                "name": "England",
                "code": "ENG",
                "flag": "https://crests.football-data.org/770.svg"
            },
            "competition": {
                "id": 2021,
                "name": "Premier League",
                "code": "PL",
                "type": "LEAGUE",
                "emblem": "https://crests.football-data.org/PL.png"
            },
            "season": {
                "id": 1490,
                "startDate": "2022-08-05",
                "endDate": "2023-05-28",
                "currentMatchday": 17,
                "winner": null
            },
            "id": 416224,
            "utcDate": "2022-12-26T20:00:00Z",
            "status": "TIMED",
            "matchday": 17,
            "stage": "REGULAR_SEASON",
            "group": null,
            "lastUpdated": "2022-10-25T00:20:15Z",
            "homeTeam": {
                "id": 57,
                "name": "Arsenal FC",
                "shortName": "Arsenal",
                "tla": "ARS",
                "crest": "https://crests.football-data.org/57.png"
            },
            "awayTeam": {
                "id": 563,
                "name": "West Ham United FC",
                "shortName": "West Ham",
                "tla": "WHU",
                "crest": "https://crests.football-data.org/563.png"
            },
            "score": {
                "winner": null,
                "duration": "REGULAR",
                "fullTime": {
                    "home": null,
                    "away": null
                },
                "halfTime": {
                    "home": null,
                    "away": null
                }
            },
            "odds": {
                "msg": "Activate Odds-Package in User-Panel to retrieve odds."
            },
            "referees": []
        },      
        :
        :(シーズン最終日までの日程を繰り返しのため省略)
    ]
}

例えばこのデータを使用すれば、直近のアーセナルの試合日時や対戦相手がわかりますね!

GASによるデータの使用例

せっかくなので、上記で取得したデータの使用例を一つ紹介しようと思います。
使用する言語はGAS(Google apps script)にします。
以下のソースコードは、football-data.orgからアーセナルの試合日程データを取得して、指定したメールアドレスに次の試合日程を送信するという簡単なアプリです。

/** football-data.org APIのアクセストークン */
const ACCESS_TOKEN  = " football-data.orgから取得したアクセストークン"; 
/** アーセナルの日程情報を取得するためのURL */
const ARSENAL_DATA = "https://api.football-data.org/v4/teams/57/matches?status=SCHEDULED";

function myFuntion() {
  //football-data.org APIからデータを取得する
  let response = UrlFetchApp.fetch(ARSENAL_DATA, {
    "headers": {
      "X-Auth-Token" : ACCESS_TOKEN
    }
  });

  //JSONデータをパース
  let json = JSON.parse(response.getContentText());

  let home_team  = json.matches[0].homeTeam.name;     //ホームチーム
  let away_team  = json.matches[0].awayTeam.name;     //アウェイチーム
  let get_data   = new Date(json.matches[0].utcDate); //試合日程データ
  let match_month = get_data.getMonth() + 1;
  let match_day  = get_data.getDate();
  let match_hour = get_data.getHours();
  let match_min  = get_data.getMinutes();

  let match_messagse = home_team + " VS " + away_team + "\n" + match_month + "/" + match_day + " " + match_hour + ":" + match_min;

  //指定したメールアドレスに送信
  MailApp.sendEmail("[email protected]", '次のアーセナルの試合日程', match_messagse);
}

下画像のようにGASのエディタに書きまして

サンプルGASコード

myFuntion関数を実行すると、下のようにアーセナルの試合日程をメールで送ってくれました!

サンプルメール

やっぱりGASは簡単で最高ですね!

おっと、football-data.orgの紹介でした。
という感じで、使い方次第で非常に便利に活用できそうですね!

本記事をご覧のサッカーファンのあなたも、是非このAPIを試してみてください。
以上です!


ABOUT

気ままにアウトプットをする場所です。

このブログについて
CATEGORY
TOP