かなりの量の調査の後、解決策を見つけました。オーディオへのLINKSを取得していませんが、YouTubeのビデオを目に見えないように再生するプログラムを作成しました。これにより、意図した「AUDIO」を再生できます。
私が書いたプログラムは、すでに利用可能な Python モジュールをたくさん使って目標を達成しています。
wxPython を使用して Flash を Python アプリケーションに埋め込む方法を説明するこのリンクを見つけました (ここにあります)。フラッシュを再生するために利用したactivexwrapperモジュールがあります。
コード:
import wx
if wx.Platform == '__WXMSW__':
from wx.lib.flashwin import FlashWindow
class MyPanel(wx.Panel):
def __init__(self, parent, id):
wx.Panel.__init__(self, parent, -1)
self.pdf = None
sizer = wx.BoxSizer(wx.VERTICAL)
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
self.flash = FlashWindow(self, style=wx.SUNKEN_BORDER)
sizer.Add(self.flash, proportion=1, flag=wx.EXPAND)
#sizer.Hide(0)
self.SetSizer(sizer)
self.SetAutoLayout(True)
print "Importing Flash..."
self.flash.LoadMovie(0, raw_input('Copy link for flash: '))
#Used to load a flash file. You may also give a location of a specific file on disk.
print "Done."
app = wx.PySimpleApp()
# create window/frame, no parent, -1 is default ID, title, size
# change size as needed
frame = wx.Frame(None, -1, "Flash Stream", size = (500, 400))
# make instance of class, -1 is default ID
MyPanel(frame, -1)
# show frame
frame.Show(True)
#comment if you don't want to see the ui
print "Started"
# start event loop
app.MainLoop()
それはビデオを再生します。私の場合、GUI は使いたくないので、' frame.Show(True)
' 行を削除しました。テストしたい場合は、後で説明するように、 ' http://www.youtube.com/v/cP6lppXT-9U?version=3&hl=en_US ' のようなリンクを試してください。
ただし、一時停止などはできません。したがって、他の方法を使用する必要があります。
&autoplay=1
自動再生を開始するには: URL に「 」を追加します
一時停止する方法は次のとおりです。
youtube-dlモジュールを使用してビデオの長さを生成し、ユーザーが一時停止したときにスレッドを強制終了できます。ただし、既に再生された時間を保存し、次回&start=SECONDSPLAYED
はビデオを効果的に「再開」する「 」を追加します。詳細については、こちらをご覧ください。
また、YouTube の埋め込み URL を使用する必要があります。これが機能する唯一の URL です。例は「http://www.youtube.com/v/cP6lppXT-9U?version=3&hl=en_US
」のようになります
長所
- 法的*
- 高速フラッシュ読み込み時間 (0.01 秒のベンチマーク)
- スペースを無駄にしません
- ファイル全体をダウンロードせずに最後までスキップできます
- YouTube API を使用しないため、無制限に使用できます
* YouTube の利用規約のセクション 4: サービスの一般的な使用 - 権限と制限、サブセクション 3 によると。
お客様は、本サービス自体の動画再生ページ、埋め込み型プレーヤー、または YouTube が指定するその他の明示的に承認された手段以外の技術または手段を介してコンテンツにアクセスしないことに同意するものとします。
そのため、プログラムは主に Embeddable Player を使用する代替インターフェイスを使用し、完全に違法なことは何もしません (ファイルのダウンロードなど [私の最初のアイデア])。
短所
- ActiveX に依存しているため、このアプリケーションはWindows 以外のオペレーティング システムでは動作しません。
- 私が知っている人の中には、Internet Explorer を使用している人はほとんどいません。残念ながら、このプログラムには INTERNET EXPLORER Flash がインストールされている必要があります。Mozzila Flash、Chrome Flash ではありません。それは絶対にIEでなければなりません。そうしないと、アプリケーションはロードされますが、ビデオは表示されません。
- wx のロードには非常に長い時間がかかります (約 10 秒)。
依存関係
- 明らかな理由から、wxPython を使用する必要があります。
- Python comtypes (ここにあります) をインストールする必要があります。そうしないと、wxPython は ActiveX と通信できません。
便利な機能
また、同じことをしている人のためにプロセスを高速化する関数もいくつか作成しました。
すべてが素晴らしいワンライナーラムダです。
generate_link: 通常の YouTube URL を指定すると、YouTube 埋め込み URL を返します。
generate_link = lambda link: 'http://www.youtube.com/v/'+re.compile(r'watch\?v=(.*?)(?:&|$)').search(link).group(1)+'?version=3&hl=en_US'
start_from: ビデオの開始位置の時、分、秒を受け取り、リンクを返します。
start_from = lambda hours, minutes, seconds, link: link + '&start=' + str((hours*60*60)+(minutes*60)+seconds)
autoplay: おそらく最も単純で、autoplay を true に設定し、リンクを返します。リンクを受け付けます。
autoplay = lambda link: link + '&autoplay=1'
video_length: ビデオの長さを返します。便利です。YouTube リンクを受け入れます。
video_length = lambda video: re.compile(r'length_seconds=(.*?)\\', re.S).search(urllib2.urlopen(video).read()).group(1).strip()
これは、ライセンスされたビデオがエラーを返すという事実の回避策として意図されています。
status=fail&errorcode=150&reason=This+video+contains+content+from+WMG.+It+is+restricted+from+playback+on+certain+sites.%3Cbr%2F%3E%3Cu%3E%3Ca+href%3D%27http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DVALbSjayAgw%26feature%3Dplayer_embedded%27+target%3D%27_blank%27%3EWatch+on+YouTube%3C%2Fa%3E%3C%2Fu%3E
そのため、実際の動画ページを解析して長さを取得しました。少し遅くなりますが、確実に動作します。