TVerのAPIを利用してダウンロードできる番組を取得する

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
% 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形式のようです:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "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

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

1
% 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で返ってきます:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{
        "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で公開されている番組をさくっとダウンロードできる仕組み作りできるのでは。。