AppleTVでニュース生配信を見る方法

## tl;dr

AppleTVでニュースの生配信を見たい

1. 生配信のm3uプレイリストのURLを取得
1. pyaTVでAppleTVにリモート再生を開始させる

## 背景

AppleTVに日本国内のニュース配信は行われていない（あってもNHK海外版しかない）為、どうにかしたいと思います。

## 1. プレイリスト取得

- 日テレnews24 `https://www.news24.jp/livestream/index.m3u8`
- ウェザーニューズ `http://movie.mcas.jp/mcas/wn1_2/master.m3u8`
- TBS (公式から提供なし。以下のスクリプトを使って取得します）

### ヤフーニュースのライブ配信のプレイリストを取得

- [Policy Key](https://apis.support.brightcove.com/policy/getting-started/policy-keys.html)はアカウントごとに固定しているっぽいです。Revokeされない限りずっと使えと思います。

- 以下のファイルを`get-yahoo-news-live-playlist-url.sh`に保存しておきます。
- 使うには `jq` が必要です。(macOSでは`brew install jq` 、raspberry piでは`sudo apt install -y jq` でインストールしておきます)

```bash
#!/bin/bash
#
# https://news.yahoo.co.jp/live から見れるニュースのライブ配信
#
POLICY_KEY_HEADER='Accept: application/json;pk=BCpkADawqM0Q9Hmq-rorJvkNmoOS44SlR_2FiG826OEOA1d3hAwJJOKIRjbuxxvsWYq3oXZkKtsfu03c9MrVUGhVfsjLNqa4lOVpNjlCfYc-WcQNVKf_qQVk-j0ReGDd_CzXPOEgBqUHU-w7'

NTV='https://edge.api.brightcove.com/playback/v1/accounts/5690807595001/playlists/5743160747001?limit=1000'
TBS='https://edge.api.brightcove.com/playback/v1/accounts/5690807595001/playlists/5743480071001?limit=1000'
BBC='https://edge.api.brightcove.com/playback/v1/accounts/5690807595001/playlists/5794804965001?limit=1000'
URL=""

usage_exit() {
    echo "Get m3u URLs for yahoo news live broadcast" >&2
    echo "Usage: `basename "$0"` -c ['bbc'|'tbs'|'ntv']" >&2
    exit 1
}

while getopts c:h OPT
do
    case $OPT in
        c)  case `awk '{print tolower($0)}' <<< "$OPTARG"` in
                ntv) URL="$NTV" ;;
                tbs) URL="$TBS" ;;
                bbc) URL="$BBC" ;;
            esac
            ;;
        h)  usage_exit
            ;;
        \?) usage_exit
            ;;
    esac
done

shift $((OPTIND - 1))

if [[ -z "$URL" ]]; then
    usage_exit
fi

curl -s "$URL" -H "$POLICY_KEY_HEADER" |  jq -r '.videos[] | .sources[] | .src'
```

## 2. PyaTVを動かす

参照 : https://pyatv.dev/getting-started/

### PyaTV初期設定

1. 先にpython3 をインストールしてください。

1. インストールします

   ```
   pip3 install pyatv
   ```

1. ネットワーク内のAppleTVを検索し、Identifierを取得します。

   ```
   $ atvremote scan
   Scan Results
   ========================================
          Name: 主寝室
      Model/SW: 4K tvOS 13.4.8
       Address: 192.168.xx.xx
           MAC: 00:11:22:33:44:55
    Deep Sleep: False
   Identifiers:
    - EC4B936E-54C6-46F5-8DA6-000000000000
    - 00:11:22:33:44:55
   Services:
    - Protocol: MRP, Port: 49152, Credentials: None
    - Protocol: AirPlay, Port: 7000, Credentials: None
   ```

   上記 `00:11:22:33:44:55` が`主寝室`という名のAppleTVの識別子です。適宜にメモしておきます。

1. ペアリングします。Enter PIN on screenが表示されたら、アップルTVの画面に表示される４桁の暗証番号を入力します。

   ```
   $ atvremote --id 00:11:22:33:44:55 --protocol airplay pair
   Enter PIN on screen:(ひそひそ)
   Pairing seems to have succeeded, yey!
   You may now use these credentials: 1234567890123:12345678890ABCDEF123456......
   ```

   最後に表示される16進の文字列は CREDENTIALS 文字列です。コピーしてテキストファイルに保存しておきます。

### PyaTVで指定AppleTVにAirplay指示を流す

使い方:

```
atvremote --id [APPLETV_ID] --airplay-credentials `cat CREDENTIAL_FILE.txt` "play_url="$PLAYLIST_URL"
```

使用例:（AppleTV IDを`APPLE_TV_ID.txt`に、Airplay認証情報は`CREDENTIAL_FILE.txt`に予め保存しておいたことにします）

- TBSを再生するには

  ```
  atvremote --id `cat APPLE_TV_ID.txt` --airplay-credentials `cat CREDENTIAL_FILE.txt` "play_url=`bash get-yahoo-news-live-playlist-url.sh -c tbs | head -n1`"
  
  ```

- 日テレnews24を再生するには

  ```
  atvremote --id `cat APPLE_TV_ID.txt` --airplay-credentials `cat CREDENTIAL_FILE.txt` "play_url=https://www.news24.jp/livestream/index.m3u8"
  ```

## その他

atvremote コマンドをcrontabに合わせて使うとAppleTV目覚し時計が出来ます。

更に[こちら](https://qiita.com/richmikan@github/items/9090407e3ab9cd3e80b2)に紹介されるシェルスクリプトに合わせて使うと、平日に限定することも出来ます。

いろいろ試してみてください。( ˇωˇ )