2015年6月14日日曜日

YouTube APIは使いにくい

hitoisでは「マイYouTube」という機能があり、自分がアップロードした動画や、お気に入りの動画などを一覧表示することが出来ます。

動画の一覧の取得には、YouTube APIを使っています。再生リストの一覧や、再生リスト内の動画の一覧が取得できて便利なのですが、「自分の一覧」を取得するには、現在のAPI バージョン3では、YouTubeチャンネルIDというものを指定しなければなりません。

バージョン2までは、YouTubeユーザーIDを指定しなければなりませんでした。バージョン3ではこれが変更になり、YouTubeユーザー名またはYouTubeチャンネルIDを指定しなければなりません。

hitoisの場合、Googleアカウントでログインしているので、GoogleアカウントからYouTubeユーザー名が取得できれば、完全自動で動画の一覧を取得できます。ところが、GoogleアカウントからYouTubeユーザー名を取得することは出来ません。

このYouTubeユーザー名、画面に表示されることもほとんどなく、アカウントページからリンクしているページのURLに含まれているぐらいです。

JavaScriptでこのページにアクセスし、URLからYouTubeユーザー名を取得しようと思ったのですが、考えてみればクロスドメイン問題で、DOMを操ることが出来ません。

クロスドメインを乗り越えるには、サーバーからアクセスする方法がありますが、Googleアカウントでログインした状態を保たなければなりません。基本的にGoogleアカウントでログインするのはブラウザであり、サーバではありません。Googleアカウントでログインしていても、サーバでGoogleアカウントのパスワードを取得することは出来ません。そのため、サーバがYouTubeにGoogleアカウントでログインすることは出来ません。

使えるのはOauthですが、これを利用するには、hitois上で再度YouTubeにログインしてもらわなければなりません。その上で、YouTubeのアカウントページのHTMLをロードして、特定のURLからYouTubeユーザー名を取得しなければなりません。正直、良い処理ではないです。そもそも、YouTubeアカウントページが修正されれば、YouTubeユーザー名は取得できなくなってしまいます。

仕方ないので、ユーザーにYouTubeチャンネルIDを入力してもらう仕様にしました。hitoisにログインした時点でブラウザはYouTubeにもログインしているので、YouTubeユーザーIDが記述されたページのリンクを張っておけば、リンククリックで簡単にYouTubeチャンネルIDを確認することが出来ます。そこでYouTubeチャンネルIDをコピーしてもらって、hitoisに登録してもらうというものです。

本当は完全自動でやりたかったのですが、GoogleアカウントからYouTubeユーザー名やYouTubeチャンネルIDを取得できない制限のため、苦肉の策をとらざるをえませんでした。もう少しなんとかならんもんだろうか。