1

次のコードでは、正しいファイルが取得されません。

<?php
header("Content-Type: application/octet-stream");
readfile("http://player.vimeo.com/play_redirect?clip_id=24195442&sig=49daac0ff885745c27601a80402bba14&time=1351783454&quality=hd&codecs=H264&type=moogaloop_local&embed_location=");
?>

代わりに、 http://player.vimeo.com/play_redirect?clip_id=24195442をダウンロードするようです。htmlentitiesまたはhtmlspecialcharsを使用してみましたが、何も変わりません。

4

2 に答える 2

0

この例を試してみてください。これはVimeoSimpleAPI(バージョン2)に基づいています。コピー&ペーストして自分で試してみてください...

http://www.lib.montana.edu/~jason/files/api/vimeo/item.txt

必要に応じてcurl_init()メソッドを使用するためにコメントされた行があることを確認してください。57行目から始まり、69行目で終わります。ただし、例を初めて実行する場合は無視してください。

于 2012-11-01T17:53:59.253 に答える
0

これは動画サイトやダウンロードサイトではよくあることです。些細な直接リンクやホットリンクを防ぐために、ユーザーがページ、ビデオ プレーヤー、または CAPTCHA を操作した後、メイン データの一意の URL を生成します。それが、URL のセクションsigとセクションです。timeこの種の生成された URL は通常、IP アドレスによってユーザーに関連付けられており、一定期間後に期限切れになります。

そのタイプのコンテンツをパススルーするには、ビデオ URL の生成に使用された手順を解読する必要があります。多くの場合、HTML ページを要求してから、Flash アプレットのパラメーターまたはスクリプト タグで URL を検索するのと同じくらい簡単です。他のサイトは、複雑なクライアント側スクリプトまたは Flash アプレット内で URL を生成します。

Vimeo をざっと見て、URL を取得する方法を見つけたところ、問題なく動作しているようです。これを試して:

$clipId = 24195442;

ini_set('user_agent', 'Mozilla/5.0 (Windows NT 6.1; rv:10.0.9) Gecko/20100101 Firefox/10.0.9');
$config = json_decode(file_get_contents('http://player.vimeo.com/config/' . $clipId));
$videoUrl = 'http://player.vimeo.com/play_redirect?clip_id=' . $clipId .
    '&sig=' . $config->request->signature .
    '&time=' . $config->request->timestamp;
header('Content-Type: application/octet-stream');
readfile($videoUrl);

はい、User-Agent文字列を設定する必要があります。Vimeo は、実際のブラウザのようには見えないとして拒否しました。

それが機能するはずだと言っている Vimeo API があるかどうかはわかりません。Vimeo がサイト構造を変更しない限り、機能しない可能性があることに注意してください。最も信頼できる方法は、動画ファイルを保存またはキャッシュし、可能であれば自分のサーバーからローカルに配信することです。

于 2012-11-01T17:49:31.887 に答える