先日同期と「YouTubeの無限キャッシュしたいよね」というような話をしたので自分なりに色々と調べてみました。
そもそもYouTubeのAPIに関する記述も非常に少なかったので、この記事は役に立つ人にとっては役に立つのではないのかなーと思って書きます。
会社での会話

YouTubeの無限キャッシュしたいよね

無限キャッシュ、というと?

再生した音楽とか動画とかをオフライン状態で見れる状態にしたいって事!

なるほどな~。Xamarinで出来るかわかんないけどやってみようぜ
現状のアプリでオフラインで視聴できるアプリ一覧
YouTube

YouTubeの公式アプリも一応キャッシュの機能を持っているのでオフラインでも再生ができます。ですが、現在再生中の曲のみで、再生画面から離れてしまうと当然の事ながら再生が出来なくなってしまいます。

加えて、通常の使用方法でもバックグラウンドで動作してくれないので使い勝手は悪いのにゃ~。
ClipBox

これ、使ってみたんですが使い方がよく分からなかったです。
Zvideo

これもイマイチ使い方がよく分からないです。動画が保存できた?と思ってもリストの中にはないし画面の25%は常に広告が出てるしで非常に使い辛い…。
YouTube Go

GoogleがYouTube Goというアプリを今後リリースするようです。バックグラウンドで動いてくれるかどうかは分かりませんが、パッと見で保存容量もいい具合に圧縮されてて良さげです。早くリリースしてほしい…。
イイアプリが無いなら作ってみればいいんじゃないの?の精神

上で示した通り、現状ストアで落とせるアプリだとユーザビリティが低く、広告もデカデカと出ていて非常にストレスフルです。我慢して使っていても禿げ上がってしまいそうです。という事で、作れるかどうかは分かりませんが、作ってみましょう。
ぼくのかんがえたさいきょうの音楽アプリ
最低限の要件

私と同期が喋ったのはほんの数分なんですが、お互いの頭の中にある最低限の要件としてはざっくり、以下に示す所でしょう。
- バックグラウンドでも再生可能
- キャッシュ可能
次点で満たしたい要件

マストでは無いが、出来れば満たしたい要件を挙げます。
- キャッシュを部分的に消せる
- 全キャッシュを一括で消せる
- 音楽のみのキャッシュ
- キャッシュの品質設定 (圧縮率の設定)
- URL以外にもYouTube内をクロールしているような動画検索
- レイアウトを複雑化しすぎない

キャッシュを残すとなるとやはり物理的なメモリの問題が懸念されます。私が使っているiPhoneの残容量は常に1GBらへんをうろついているのでキャッシュに対してはシビアにしていきたいです。
どのように組んでいくか

ある程度の方向性は決まったので、ではどのように実現させるか?という点にフォーカスしてみたいと思います。まず、他の方の記事を漁る所からやってみたいと思います。
- Android開発 Fragment上にYouTube APIを使って動画を再生する
- 【Android】youtubeの動画を再生する
- AndroidアプリにYouTube API V3を導入する第一歩。
- YouTube Player Libraryを使って、動画を再生してみる
- SwiftでYoutube検索【メモ】
- 【Swift】YouTube動画アプリのサンプルコード(カテゴライズ)
- 【Swift】 YouTubeのAPI使って動画情報取得
YouTubeのデータを取得するには?

AndroidやSwiftでYouTube関連をごにょごにょする際にはどうやらYouTube Data API v3なるものを使うのが定石みたい。
YouTube Data APIとは?

詳細は上のリンクを読んでもらうとして、簡潔に纏めると以下の通りです。
- Googleが提供しているAPI
- 以下に示す情報を取得可能
Xamarin.FormsではどうやってYouTube Data APIを使う?

日本語の情報だとXamarinでYouTubeを操作するようなプログラムは見つからなかったのですが、英語でなら見つかりました。

上のリンクではなんと、MicroSoft MVPの方が投稿されている動画を見ることが出来ます。
この動画で説明されている事 is 何?

動画ではYouTube Data APIとPlugin.YouTubeを使用して指定したチャンネルの動画を一括取得する方法が説明されています。文字での説明は無く、かなりの不親切設計ですが次の記事ではこの動画を参考にして実際に動画を取得出来るのかを検証してみたいと思います。
実際にYouTubeからデータを取得

YouTubeからデータを取得してみたのにゃ~。
まとめ
- YouTubeの情報を取得するにはYouTube Data APIを使う
- YouTube Data APIはGoogleが提供しており取得にはGoogleのアカウントが必要
- YouTube Data APIの現在のバージョンはv3であり、古いバージョンの書き方が使えなくなってしまっている (下位互換が担保されていない)
- Xamarin.FormsではAPIに加えて、Plugin.YouTubeライブラリを使用する
[…] Xamarin.FormsでYouTubeのデータを取得したい […]
[…] Xamarin.FormsでYouTubeのデータを取得したい […]