【手動】Youtubeの動画の.m3u8ファイルURLを取得する

# はじめに
Youtubeのライセンス無し動画のみ取得できます。

[kitoko552](https://kitoko552.hatenablog.com/)さんのこちらの記事を参考にしました。
本当にありがとうございます。
[YouTube動画のm3u8URLを取得する](https://kitoko552.hatenablog.com/entry/20180311/1520743836)

# .m3u8とは

> .m3uとは『マルチメディアプレイリストのファイルフォーマット』である。 ... m3u8は、UTF-8(BOMB無し)で作成する事を明示的にした形式。 根本的にはm3uとm3u8は同じ物。 このファイルに分割されたtsファイルのパスを記述していくことで、複数のファイルを一つのファイルとして再生する事が出来る。

要は動画そのものではなく、動画にアクセスするために必要な情報が含まれているファイルみたいです。
Youtube動画の.m3u8ファイルには解像度ごとのデータも含まれていました。

# 手動で取得する

### ほしいYoutubeのリンクを持ってくる

ライセンス無しの動画を見つけましょう。
とりあえず著作権フリーの動画があったので今回はそれを使います。

```:欲しい動画のURL
https://www.youtube.com/watch?v=rvkxtVkvawc
```

URL内の最後の`v=`の部分が動画IDになります。

```:動画ID
rvkxtVkvawc
```

### infoファイルを取得する

まず.m3u8ファイル含めて動画の情報が記載されてるinfoファイルを取得します。
infoファイルは以下のリンクで取得できます。

```
https://www.youtube.com/get_video_info?video_id={videoId}
```

この`{videoId}`の部分を欲しい動画の動画IDに書き換えてアクセスします。
このとき、ブラウザによっては必要な情報が入ってないので注意してください。
SafariはいけましたがChromeはダメでした。

```
https://www.youtube.com/get_video_info?video_id=rvkxtVkvawc
```

するとこんなテキストファイルがダウンロードされたかと思います。

>
length_seconds=25&cr=JP&player_response=%7B%22playabilityStatus%22%3A%7B%22status%22%3A%22OK%22%2C%22playableInEmbed%22%3Atrue%7D%2C%22streamingData%22%3A%7B%22expiresInSeconds%22%3A%2221540%22%2C%22formats%22%3A%5B%7B%22itag%22%3A17%2C%22url%22%3A%22https%3A%2F%2Fr3---sn-nvoxu-ioqe7.googlevideo.com%2Fvideoplayback%3Fmv%3Dm%5Cu0026mt%3D1547889191%5Cu0026ms%3Dau%252Crdu%5Cu0026signature%3D86F9BEA143E241DB3AF5F7CDBEAAF7362632A37D.D8925F7E22B2F281598EE57BBB3DA284954ACC7B%5Cu0026mn%3Dsn-nvoxu-ioqe7%252Csn-oguesnze%5Cu0026mm%3D31%252C29%5Cu0026c%3DWEB%5Cu0026fvip%3D3%5Cu0026expire%3D1547910870%5Cu0026key%3Dyt6%5Cu0026mime%3Dvideo%252F3gpp%5Cu0026ipbits%3D0%5Cu0026lmt%3D1542168296623039%5Cu0026itag%3D17%5Cu0026dur%3D25.123%5Cu0026pl%3D27%5Cu0026initcwndbps%3D1838750%5Cu0026source%3Dyoutube%5Cu0026requiressl%3Dyes%5Cu0026gir%3Dyes%5Cu0026txp%3D5431432%5Cu0026id%3Do-
...

この中から`.m3u8`で終わって`https%3A%2F%2Fmanifest.googlevideo.com`で始まる部分を抜き取ります。
正規表現: `https%3A%2F%2Fmanifest.googlevideo.com.+\.m3u8`

>
https%3A%2F%2Fmanifest.googlevideo.com%2Fapi%2Fmanifest%2Fhls_variant%2Fdover%2F11%2Fmv%2Fm%2Fmt%2F1547889191%2Fms%2Fau%252Crdu%2Fsignature%2F2844BAE6D0C4EB720447365A65CCE859CBB08A97.23AE1BFBF229BD768AD8C97BA6029A7790E3E19F%2Fmn%2Fsn-nvoxu-ioqe7%252Csn-oguesnze%2Fmm%2F31%252C29%2Ffvip%2F3%2Fhfr%2F1%2Fexpire%2F1547910870%2Ftts_caps%2F1%2Fkey%2Fyt6%2Fipbits%2F0%2Fhls_chunk_host%2Fr3---sn-nvoxu-ioqe7.googlevideo.com%2Fitag%2F0%2Fpl%2F27%2Finitcwndbps%2F1838750%2Fratebypass%2Fyes%2Fsource%2Fyoutube%2Frequiressl%2Fyes%2Ftx%2F23728348%2Fplaylist_type%2FDVR%2Fgo%2F1%2Fkeepalive%2Fyes%2Ftxs%2F9474469%252C23724088%252C23728348%252C23728352%2Fid%2Faef931b5592f6b07%2Fip%2F240d%253A1a%253Abb%253A2100%253A29a9%253A68a4%253A734a%253A199f%2Fsparams%2Fei%252Cgo%252Chfr%252Chls_chunk_host%252Cid%252Cinitcwndbps%252Cip%252Cipbits%252Citag%252Cmaudio%252Cmm%252Cmn%252Cms%252Cmv%252Cpl%252Cplaylist_type%252Cratebypass%252Crequiressl%252Csource%252Ctts_caps%252Ctx%252Ctxs%252Cexpire%2Fmaudio%2F1%2Fei%2FdupCXPbzCsj6qQHhi57IDA%2Ffile%2Findex.m3u8

まだ16進数化されてる文字コードが混じってしまっているので、必要なもののみ変換します。
[ここ](http://etc.webclap.com/string_replacer/index.html)とか使うと楽です。

```
%3A -> :
%2F -> /
%25 -> %
%2C -> ,
```

>
https://manifest.googlevideo.com/api/manifest/hls_variant/dover/11/mv/m/mt/1547889191/ms/au,rdu/signature/2844BAE6D0C4EB720447365A65CCE859CBB08A97.23AE1BFBF229BD768AD8C97BA6029A7790E3E19F/mn/sn-nvoxu-ioqe7,sn-oguesnze/mm/31,29/fvip/3/hfr/1/expire/1547910870/tts_caps/1/key/yt6/ipbits/0/hls_chunk_host/r3---sn-nvoxu-ioqe7.googlevideo.com/itag/0/pl/27/initcwndbps/1838750/ratebypass/yes/source/youtube/requiressl/yes/tx/23728348/playlist_type/DVR/go/1/keepalive/yes/txs/9474469,23724088,23728348,23728352/id/aef931b5592f6b07/ip/240d%3A1a%3Abb%3A2100%3A29a9%3A68a4%3A734a%3A199f/sparams/ei,go,hfr,hls_chunk_host,id,initcwndbps,ip,ipbits,itag,maudio,mm,mn,ms,mv,pl,playlist_type,ratebypass,requiressl,source,tts_caps,tx,txs,expire/maudio/1/ei/dupCXPbzCsj6qQHhi57IDA/file/index.m3u8

これが欲しい動画の`.m3u8`ファイルのURLになります。

詳しく検証していませんが、数時間経つとこのリンクは使えなくなるので再度上記infoファイル取得の処理が必要になります。
なのでこの記事を上げる頃には　上記リンクだと403エラーが出るはずです。

# さいごに
次はこのリンクを使って動画読み込んでみます。

->
[AndroidでYoutubeの動画を再生する](https://qiita.com/TaigaNatto/items/d3ff98961c346098eaf7)