先日同期と「YouTubeの無限キャッシュしたいよね」というような話をしたので自分なりに色々と調べてみました。

そもそもYouTubeのAPIに関する記述も非常に少なかったので、この記事は役に立つ人にとっては役に立つのではないのかなーと思って書きます。

会社での会話

同期同期

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

かりまたかりまた

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

同期同期

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

かりまたかりまた

なるほどな~。Xamarinで出来るかわかんないけどやってみようぜ

現状のアプリでオフラインで視聴できるアプリ一覧

YouTube

かりまたかりまた

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

りんちゃんりんちゃん

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

ClipBox

かりまたかりまた

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

Zvideo

かりまたかりまた

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

YouTube Go

かりまたかりまた

GoogleYouTube Goというアプリを今後リリースするようです。バックグラウンドで動いてくれるかどうかは分かりませんが、パッと見で保存容量もいい具合に圧縮されてて良さげです。早くリリースしてほしい…。

イイアプリが無いなら作ってみればいいんじゃないの?の精神

かりまたかりまた

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

ぼくのかんがえたさいきょうの音楽アプリ

最低限の要件

かりまたかりまた

私と同期が喋ったのはほんの数分なんですが、お互いの頭の中にある最低限の要件としてはざっくり、以下に示す所でしょう。

  • バックグラウンドでも再生可能
  • キャッシュ可能

次点で満たしたい要件

かりまたかりまた

マストでは無いが、出来れば満たしたい要件を挙げます。

  • キャッシュを部分的に消せる
  • 全キャッシュを一括で消せる
  • 音楽のみのキャッシュ
  • キャッシュの品質設定 (圧縮率の設定)
  • URL以外にもYouTube内をクロールしているような動画検索
  • レイアウトを複雑化しすぎない
かりまたかりまた

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

どのように組んでいくか

かりまたかりまた

ある程度の方向性は決まったので、ではどのように実現させるか?という点にフォーカスしてみたいと思います。まず、他の方の記事を漁る所からやってみたいと思います。

YouTubeのデータを取得するには?

かりまたかりまた

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

YouTube Data APIとは?

かりまたかりまた

詳細は上のリンクを読んでもらうとして、簡潔に纏めると以下の通りです。

  • Googleが提供しているAPI
  • 以下に示す情報を取得可能

Xamarin.FormsではどうやってYouTube Data APIを使う?

かりまたかりまた

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

かりまたかりまた

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

この動画で説明されている事 is 何?

かりまたかりまた

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

実際にYouTubeからデータを取得

りんちゃんりんちゃん

YouTubeからデータを取得してみたのにゃ~。

まとめ

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