2011-12-28 14 views
2

私は以下のようなビデオへのリンクを生成したコードを書いています。 が得られたら、私はこの方法でそれをダウンロードしよう:Pythonを使用して.swfからビデオを抽出する

import urllib.request 
import os 

url = 'http://www.videodetective.net/flash/players/?customerid=300120&playerid=351&publishedid=319113&playlistid=0&videokbrate=750&sub=RTO&pversion=5.2%22%20width=%22670%22%20height=%22360%22' 
response = urllib.request.urlopen(url).read() 
outpath = os.path.join(os.getcwd(), 'video.mp4') 
videofile = open(outpath , 'wb') 
videofile.write(response) 
videofile.close() 

私が得るすべてを読み取ることができないそのディレクトリ内の58KBのファイルです。誰かが私を正しい方向に向けることができますか?

+0

このコードを試してください:http://stackoverflow.com/questions/2678051/cant-download-youtube-video – Sologoub

+1

@Sologoub:質問とは何が関係していますか? –

+0

私がリンクしているコードは、彼がそれを理解したいと思えば、作業開始として使用することができます...あなたが指摘したように、エラーはより明白であるようです。 – Sologoub

答えて

14

コードでは、ここではエンコードされたビデオファイルをダウンロードするのではなく、ビデオの再生に使用されるフラッシュアプ​​リケーション(CWS形式)をダウンロードしています。これはブラウザで実行され、動画を動的に読み込んで再生します。実際のビデオソースを理解するには、リバースエンジニアリングを適用する必要があります。

まずSWFファイルを解凍、58Kは、あなたが名前test.swfの下で、あなたのハードディスク上に言及したファイルを保存(または似):次はそれで私の試みです。 あなたは、そのための小さなPerlスクリプトcws2fwsを使用することができます。

perl cws2fws test.swf 

これはファイルFWS内のコンフィギュレーションURLの検索と同じディレクトリ

test.fws.swfという名前の新しいファイルになり

私はシンプル

strings test.fws.swf | grep http 

使用収率:

... 
cookieOhttp://www.videodetective.net/flash/players/flashconfiguration.aspx?customerid= 
... 

興味深い。のは、このURLに私たちの知らcustomeridplayeridpublishedid引数を入れてみましょう:

http://www.videodetective.net/flash/players/flashconfiguration.aspx?customerid=300120&playerid=351&publishedid=319113 

我々はブラウザでそれを開くと、私たちは順番に

http://www.videodetective.net/flash/players/playlist.aspx?videokbrate=450&version=4.6&customerid=300120&fmt=3&publishedid=&sub= 
に私たちを指すプレーヤ構成XMLを、見ることができます私たちがいることを開くと

は今、私たちは最終的に元のURLを見ることができます:

http://cdn.videodetective.net/svideo/mp4/450/6993/293732.mp4?c=300120&r=450&s=293732&d=153&sub=&ref=&fmt=4&e=20111228220329&h=03e5d78201ff0d2f7df9a 

今、私たちは、このH264ビデオファイルをダウンロードすることができ、我々は仕上げですed。

Pythonスクリプトでプロセス全体を自動化

これは(読者への課題として残して)全く異なるタスクです。

+1

perlスクリプトはzlibを使い、それはかなり単純です。だからこれは1つですhttps://github.com/binjo/utils/blob/master/cws2fws.py – nindalf

+1

ありがとうもう一度ありがとうございます:) – nindalf

+0

さて、実際に私はプロセスを自動化するためにファイルを抽出する必要はないと思います構成XMLとそのすべてのものを取得します。これは、それが配置されている初期の情報を取得することでした。楽しむ。 –

関連する問題