2009年07月22日

lwpでのredirectURLの取得

大抵の場合redirect処理はhttpアクセス用のクラスなりが自動的に処理してくれればいいのだが
redirect後のURLからパラメータがとれればと思いperlでの使い方を覚えることにした。
まずはlwp版
が、結果としてyoutube用ではあまり出番がないようだ。
興味を持ったのがyoutubeの埋め込み用URL


http://www.youtube.com/v/ビデオID

でswfが得られるのだが
なんとなくyoutubeがらみで探索していたら
上記URLはリダイレクトしてパラメータ付きのswfを取得できるから
それからFLV用のトークンをperlで取得できるという記述を見かけたのだ。

肝心のredirectはレスポンスに対してbaseで取得できる。
responseは本体はいらないので今回は「get」ではなくて「head」を使った。


#!/usr/bin/perl
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;

my $url = shift;
my $ua = LWP::UserAgent->new( timeout => 5 );
my $res =$ua->head($url);
my $url2 =$res->base;
print $url2;


以前から気になっていたやり方で今回から「shift」を使って引数を取り出してみた。
shiftは配列の取り出し命令だがいきなり使うと@ARGVを指すらしい。
今回の場合は「$ARGV[0]」と変わらない。

一応行分けはしたがほんとにredirectURLだけ欲しければ


$url2 =$ua->head($url)->base;

で良い。
かくしてredirect URLは取得できたのだが上記埋め込みswfは
そのまま同じURLが帰ってきた。
つまり今回覚えたリダイレクトURLをパースするという策略は成立しないわけだ。

要するに仕様が変わってswfがパラメータを読み込む形にしたらしい。
「watch?v=」のswfパラメータからトークンを取得してflvのURLを求める今のやり方だと
視聴制限のあるコンテンツだとログインを要求されるのだが
swfで視聴するとログイン不要だったりする。
「watch?v=」のパースは仕様変更に強いのだが別の方法を検討することにしよう。


posted by Xo_ox at 19:00| Comment(0) | perl | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。