2011年08月

アニメイトTV

アニメイトTV
http://www.animate.tv/

アニメイトTV の RTMPプロトコルで配信される動画を、ローカル環境に保存する方法の覚え書きです。

アニメイトTV の動画(音声)は、mmsプロトコルで配信されている場合と、rtmpプロトコルで配信されている場合と、があるみたいです。スクリプトは、mmsプロトコルの URLを拾った場合、それをそのまま表示するようにしています。mmsプロトコルの動画に関しては、mmsプロトコルに対応したダウンロード用のアプリケーションなどがありますので、そちらをお使いになることをお勧めします。この記事では、アニメイトTV の rtmpプロトコルの動画を対象にすることにします。

記事の中で、「ブラウザから Cookie値を拾ってこれをスクリプト側に教えてやる」、ということをしています。rtmpプロトコルの動画の URL は、Cookie値を送信してやらないと、うまく拾えないことが多くて、このようにしています。しかし、なかには、Cookie値を送信しなくても URL を拾えることもあるみたいです。たとえば、上記、mmsプロトコルの URL は、たいていの場合、Cookie値がなくても拾えるようでした。


用意するもの:
  • RTMPDump
  • スクリプト  animate.rsite.js
    • 右クリックから保存してください。
    • スクリプトが、 mmsプロトコルの URL を拾った時は、それをそのまま表示します。rtmpプロトコルの URL を拾った時は、RTMPDump のコマンドライン文字列を表示します。

手順:
クッキー値の取得の準備
animate.tv のクッキー値を取得します。ここでは、Internet Explorer を例にして、ブックマークレットを使った方法を紹介します。
  1. Internet Explorer で、今見ているこのページを開きます。
  2. このリンク、
    animate.tvのクッキー値を取得するブックマークレット
    にカーソルをあて、右クリック。コンテキストメニューから、お気に入りに追加、をクリックします。
    • ここで、セキュリティの警告が出るかもしれません。
  3. お気に入りに追加、のダイアログボックスが表示されます。
    dlg1
    名前、作成先を設定して、よければ OK をクリック。
  4. お気に入りに、ブックマークレットが作成されます。
  • このブックマークレットの作成は、必須ではありません。要するに、animate.tv の Cookie値が取得できればよいです。例えば、Internet Explorer では、ツールバーの ツール > 開発者ツール、から開発者ツールを開き、開発者ツールのツールバー、キャッシュ > Cookie 情報を表示する、として Cookie情報を表示できます。animate.tv の Cookie の NAME が "atv" の VALUE 値を取得します。この Value値を JavaScript で取得しよう、というのが上記ブックマークレットです。

Cookie値の取得・リンクURLの取得
ここでは、Internet Explorer を例にします。
  1. Internet Explorer を立ち上げて、animate.tv のページを開きます。
  2. ここで、Internet Explorer のお気に入りを開いて、先ほど作成したブックマークレットをクリックします。ダイアログボックスが開いて、
    dlg2
    みたいな、0 ~ 9、a ~ f の 32文字程度の文字列が表示されれば成功です。この文字列を後で使いますので、コピーしてメモ帳などに貼り付けておいてください。
    • ブックマークレットは、JavaScript として動作しますので、ブラウザの JavaScript(アクションスクリプト)設定を有効にしておく必要があります。
    • 取得に失敗した場合は、「取得失敗」とか表示されます。この場合は、別の方法で Cookie 値を調べて、Cookie の atv値を取得してください。
    • ダイアログボックス内の文字列の取得は、XP 以降であれば、たぶん、Ctrl + C キーでできると思います。うまく取得できない場合は、ダイアログボックス内の文字列を取得することのできるアプリケーションなどありますので、捜してみてください。
  3. 保存したい動画や音声の "details.php" ページへ移動します。
    • "details.php"ページというのは、
      btn1 とか
      btn2 とか
      btn3 とか
      表示されているページです。このアイコンのリンクから、実際の動画や音声を再生するページへと移動できます。
    • 表示されているアイコンが、
      btn4
      とかなっている場合は、ログインしてください。
    • その動画の "details.php"ページを開いた、という「実績」がないと、リンク先ページがうまく開けない場合があるみたいです。
  4. 3のアイコンにポイントして右クリック、コンテキストメニューから、ショートカットのコピーをクリックすると、このアイコンのリンク先の URL がクリップボードにコピーされると思うので、これを、メモ帳などに貼り付けておきます。
    • リンク先の URL は、たいていの場合、
      http://www.animate.tv/play.php?パラメータ
      という形式です。
  5. atv値とリンク先URLが取得できました。以上でブラウザ側での操作は終わりですが、念のため、ブラウザは閉じずにそのまま開いておいてください。
RTMPDump Command Line(または mms url)の取得
  1. 先に保存した animate.rsite.js をダブルクリック、ないし、右クリックから開く、とすると、URLを入力するインプットボックスが開くと思うので、ここに、先の4で取得した、リンク先URL を入力します。OK をクリック。
  2. つづいて、Cookie の atv 値を入力するインプットボックスが開くと思うので、ここに、先の2で取得した atv値を入力します。OK をクリック。
    • Cookie の atv値を使う必要がなければ、キャンセルをクリックします。
  3. うまくいけば、ダイアログボックスが開き、RTMPDump のコマンドライン文字列(または、mmsプロトコルの URL)が表示されます。取得がうまくいかなければ、エラーメッセージとかが表示されるかもしれません。

その他:
  • 検証は、無料のコンテンツのみで行っています。有料のものについては未検証です。
  • Cookie の atv値を入力しなくても、mms url や RTMPDumpコマンドライン文字列が取得できる場合もあります。Cookie が必要であるかないかの見分け方は、ちょっとわかりません。
  • Cookie の atv値をインプットボックスから入力するのが面倒な場合は、animate.rsite.js の 21 ~ 22 行目あたり、_AniMate.SetAtv を true にして、_AniMate.Atv に atv 値を設定します。
  • Cookie の atv値は、animate のサーバがセッション管理するために発行する一時的な識別子だろうと思います。この値の元に、ユーザーのログイン情報やページの閲覧状況などを記憶していくのでしょう。この値は、ユーザー側にあっては、ユーザー側がブラウザを閉じるまで有効だろうと思います。サーバ側では、おそらく、一定時間が経過すると、破棄されるのではないかと思います。
  • Cookie の atv値の元には、そのユーザーのログイン情報、そこから引き出されるアニメエンの情報などが付いていくと考えられますので、この値を取得しても、他人に教えないようにしてください。(一時的なものでいずれは破棄されるにしても)。
  • WSH上でスクリプトを動かしているため、いったんブラウザ側から Cookie値を取り出すというめんどくさいことをやっています。ブラウザ上(内)で動作するスクリプトのように、ブラウザの documentオブジェクトにアクセスできるようなスクリプトにしてやれば、cookie値を外に取りだす必要がない(あるいは Cookieそのものを取得する必要がない)ので、もっとすっきりした安全なスクリプトになると思います。作れる方は作ってみてください。Craving Explorer は、スクリプト側に documentオブジェクトを提供してくれないんですよね。

この記事の内容を実行するに際しては、すべてご自身の判断と責任において行うようにしてください。

VISITOR_INFO1_LIVE の謎

こちらの記事に置いてあるスクリプト youtube.rsite.js は、YouTube の rtmpプロトコルの動画を何とかする、という目的で書いたものですが、httpプロトコルの動画直リンクURLを拾うこともできます。YouTube の httpプロトコルの動画のためには、こんなスクリプトを使わなくても、もっと手軽で便利なアプリケーションが、他にもたくさんありますので、通常、そちらを使うことをお勧めします。なので、こうした httpプロトコルの URLを拾った場合には、無視してくれればよいのですが、まあ、拾ったものはしょうがない。

で、
この http の URL なんですけど、ブラウザなどに持っていて開いてやると、たいていの場合、普通にダウンロードが始まったりします。ところが、場合によっては、403 が返ってダウンロードできないことがあって、どうしてこうした気まぐれが起こるのか、というお話です。

調べてみると、どうやら、VISITOR_INFO1_LIVE という Cookie 値がかかわっているらしい。YouTube のこちらのヘルプページによれば、VISITOR_INFO1_LIVE という Cookie 値は、YouTube 各ユーザーごとに振り出された識別子みたいなもののようです。この識別子の元に、たとえば、このユーザーが視聴する動画の速度、のような情報を蓄積しているのでしょう。ユーサー名に直接、こうしたデータを蓄積してしまうと、いろいろ問題があったりするので、ユーザー名から振り出した VISITOR_INFO1_LIVE というのを利用しているのでしょうね。Cookie 値ですから、ユーザー側で削除することもできますし、YouTube側で名寄せでもしない限り、問題はないよ、ということなのでしょう。

で、
この VISITOR_INFO1_LIVE という Cookie 値を送信した状態で取得した動画直リンクURL(http)は、この VISITOR_INFO1_LIVE Cookie 値を送信した状態で開いてやらないとダウンロードできないらしい。先の、youtube.rsite.js は、XMLHttpRequest というのを使っていて、不完全ながらも IEブラウザと Cookie 情報を共有するので、取得した http の URL をブラウザで開くと、ダウンロードできる、ということになるのだと思います。(ただし、ブラウザが保護モード下で取得した Cookie値は、スクリプト側から共有することができないみたいです。)

では、
VISITOR_INFO1_LIVE Cookie 値を送信しない状態で取得した動画直リンクURL は、どうなるのか、というと、VISITOR_INFO1_LIVE Cookie 値のあるなしにかかわらず、常にダウンロード可能な、万能URL になるみたいです。(ただし、YouTube の URL には、expires、有効期限というのがあるらしいので、時間が経過すれば無効になります。)

ならば、
youtube.rsite.js も、Cookie値を送信せずに直リンクURLを取得すればよい、ということになります。たとえば、WinHttpRequest というのを使ってやると、特に指定しない限り Cookie を送信しませんので、取得した直リンクURLは、Cookieにかかわりなくダウンロードできるものになります。

ところが、
YouTube の動画のなかには、ログインしないと視聴できない動画というのがあります。ログインの情報は、Cookie値として送信されていますから、Cookie値を送信しないと、こうした動画の直リンクURLが取得できなくなってしまいます。きちんと処理してやるには、送信する Cookie の内容に立ち入って操作する、ということが必要になるかもしれません。なかなか大変ですね。youtube.rsite.js は、Cookieの内容に立ち入ることはしていません。

動画直リンクURLが rtmpプロトコルの場合は、こうした Cookie の問題はないと思われます。ですので、youtube.rsite.js は、RTMPDump のコマンドライン文字列取得専用として使うのが無難かもしれません。

プロフィール

brsscl

カテゴリ別アーカイブ
QRコード
QRコード
  • ライブドアブログ