blog/content/posts/2022/2022-09-04-how-to-use-tver-...

4.7 KiB
Raw Blame History

+++ title = "TVerのAPIを利用してダウンロードできる番組を取得する" date = 2022-09-04T21:27:43+09:00 description = "非公開のTVer APIを利用して公開されている番組リストを取得する方法をまとめてみました" tags = ["tver"] categories = ["プログラミング"] author = "kazu634" images = ["ogp/2022-09-04-how-to-use-tver-api-to-list-up-programs.webp"] +++

TVerの新着番組をRSSで見る」を参考に粛々とcurlで動作するか試してみました。これを利用すると、公開されている番組を1000件取得するみたいです。基本的には公開されていない方法のようなので、これを使ってマッシュアップサイトを作ったりするのはNGに見えます。。

トークン的なものを作成する

https://platform-api.tver.jp/v2/api/platform_users/browser/createにアクセスして、トークンを作成するようです:

% curl -w '\n' -H 'Accept: */*' -H 'Referer: https://s.tver.jp/' -H 'Origin: https://s.tver.jp' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Connection: keep-alive' -H 'Sec-Fetch-Dest: empty' -H 'Sec-Fetch-Mode: cors' -H 'Sec-Fetch-Site: same-site' 'https://platform-api.tver.jp/v2/api/platform_users/browser/create' --data 'device_type=pc' -XPOST | jq .
{
  "api_version": "v2",
  "code": 0,
  "message": "",
  "type": "hash",
  "result": {
    "platform_uid": "secret-secret-secret",
    "platform_ad_uuid": "secret-secret-secret",
    "platform_token": "secret-secret-secret",
    "browser_id": "r0xclt0f4bfo2t6e7pfcey08277hhw6reap9",
    "device_type": "pc",
    "agreement_version": ""
  }
}

返却されるのは、下のjson形式のようです:

{
  "api_version": "v2",
  "code": 0,
  "message": "",
  "type": "hash",
  "result": {
    "platform_uid": "secret-secret-secret",
    "platform_ad_uuid": "secret-secret-secret",
    "platform_token": "secret-secret-secret",
    "browser_id": "r0xclt0f4bfo2t6e7pfcey08277hhw6reap9",
    "device_type": "pc",
    "agreement_version": ""
  }
}

番組情報を取得する

一つ前で取得した以下の情報を利用します:

  • platform_uid
  • platform_token

こんなコマンドを実行するといいです:

% curl -w '\n' 'https://platform-api.tver.jp/service/api/v1/callSearch?platform_uid=secret-secret-secret&platform_token=secret-secret-secret&require_data=later' -H 'x-tver-platform-type: web' | jq .

結果はこんなjsonで返ってきます:

{
        "type": "episode",
        "content": {
          "id": "epp7y4r9mc",
          "version": 5,
          "title": "【コント傑作選】初登場3組が参戦!後藤と濱家が慕う“ねえさん”なるみが厳しく後輩たちのネタをジャッジ!",
          "endAt": 1662303540,
          "broadcastDateLabel": "5月21日(土)放送分",
          "isNHKContent": false,
          "isSubtitle": false,
          "ribbonID": 0,
          "seriesTitle": "防犯カメラが捉えた!衝撃コント映像",
          "isAvailable": true,
          "broadcasterName": "ABCテレビ",
          "productionProviderName": "ABCテレビ"
        },
        "isLater": false,
        "favoriteCount": 26081,
        "endAt": 1662303540,
        "tags": [
          {
            "id": "abc",
            "name": "ABCテレビ"
          },
          {
            "id": "exnetwork",
            "name": "テレビ朝日系"
          },
          {
            "id": "owarai",
            "name": "お笑い・漫才・コント"
          },
          {
            "id": "sat",
            "name": "土"
          },
          {
            "id": "talk",
            "name": "トーク・スタジオバラエティ"
          },
          {
            "id": "variety",
            "name": "バラエティ"
          },
          {
            "id": "vtr",
            "name": "VTR・ロケ番組"
          }
        ]
}

具体的な検索キーワードがある場合には、「&keyword=ワンピース」みたいな形でURLに追加してあげるとOKのようです。

最後に

これとyt-dlp: A youtube-dl fork with additional features and fixesを組み合わせると、TVerで公開されている番組をさくっとダウンロードできる仕組み作りできるのでは。。

参考