2017-06-01 11 views
-1

必要なサイトからyoutube-dlを使用して複数のファイルをダウンロードしたい。Python - youtube-dl毎回強制ログイン

問題はyoutube-dlが問題のない最初のビデオのログインですが、次のビデオのために再びログインしないことです。

関数が呼び出されるたびに、各動画のyoutube-dlにログインするにはどうすればよいですか?たぶんリセットして、毎回youtube-dlを停止してください。

def video_download(path, url): 

     ydl = youtube_dl.YoutubeDL(
      { 
       'outtmpl': path + '.mp4', 
       'format': 'bestvideo+bestaudio/best', 
       'username': email, 
       'password': password, 
       # 'quiet': True 

      }) 

     with ydl: 
      ydl.download([url]) 
     time.sleep(45) 

私は各ファイル/ビデオに対してouttmplを設定しているので、関数は実際にループで呼び出されます。

異なるインスタンスは、最初のものが動作していて、次のインスタンスは再びログインしません。 私は繰り返しログインするたびに必要です。

<youtube_dl.YoutubeDL.YoutubeDL object at 0x0000000004E74C18> 
<youtube_dl.YoutubeDL.YoutubeDL object at 0x00000000032BED68> 
WARNING: Unable to download kaltura session JSON: HTTP Error 401: UNAUTHORIZED 
<youtube_dl.YoutubeDL.YoutubeDL object at 0x0000000004D6D898> 
WARNING: Unable to download kaltura session JSON: HTTP Error 401: UNAUTHORIZED 

Terminal/Output: 

<youtube_dl.YoutubeDL.YoutubeDL object at 0x00000000050E4C18> 
**[safari] Downloading login form 
[safari] Login successful** 
[safari] 9781787283664/video1_1: Downloading webpage 
............................. 
<youtube_dl.YoutubeDL.YoutubeDL object at 0x000000000337DD68> 
[safari] 9781787283664/video1_2: Downloading webpage 
[safari] 9781787283664/video1_2: Downloading kaltura session JSON 
WARNING: Unable to download kaltura session JSON: HTTP Error 401: UNAUTHORIZED 

----更新---

私は、コマンドラインを使用しようとしましたが、私はPythonのimportを使用している場合、私は表示されない、次のエラーを、持っている:

ERROR:固定出力名が、

にCMDをダウンロードする複数のファイル:

youtube-dl -u username_paceholder -p password_paceholder -o 'D:\DevProj\DownloadCourses\Safari\x_downloads\Django1 \_01_Django ABC' https://www.site_placeholder.com/library/view/django-example/9781787283664/video1_2.html 
+0

あなたが提供するリンクはプレイリストリンクですか? –

+0

番号。登録サイトから1つずつ(場所とタイトルを設定するために)ファイルをダウンロードしたいだけですが、youtube-dlは最初のファイルのみをロギングし、他のものはロギングしません。これは私が次のファイルのための許可エラーを受け取ります – user3541631

+0

@ user3541631こんにちは、最新の回答を確認してください – Wboy

答えて

1

なぜコマンドラインを使用しないのですか?

あなたは、ファイル名やフォルダの場所をパーソナライズすることができます - あなたは認証が

ような何か試してみてください(-u-p引数が与えられている場合)あなたがyoutube-dlコマンドを実行するたびに行われることを確認することになります。

import os 

def video_download(path="c:\\mydir\\myfile", url="http://myvideo./url"): 

    #user information 
    user="myuser" 
    pwd="mypwd" 

    #build cmd line 
    cmd="youtube-dl -u "+user+" -p "+pwd+' -o "'+path+'" '+url 

    #execute commande line 
    os.system(cmd) 

    [...] 
+0

@A Stefani私の更新された質問とその問題をcmd – user3541631

+0

で確認してください。あなたもエスケープする必要があるウィンドウの下でコードを実行する際に、ファイル名を引用するときに二重引用符( ")以上の文字を使用しようとしましたか? D:\ DevProj \ DownloadCourses \ Safari \ ... 'は「D:\ DevProj \\ DownloadCourses \\ Safari \\ ...」になります。 –

+0

https: //pythonは宇宙を征服する。COM/2008/6月4日/ gotcha-%E2%80%94-バックスラッシュ・イン・窓・ファイル名、ファイル名のために/最良の方法で窓下:トリックは、スラッシュを使用して、ファイル名の文字列のすべてを入力し、OSをさせることです.path.normpath()は、あなたのためにバックスラッシュに変更します。 –

0

私はそれを想定しています複数の動画が必要なため、URLの引数は['url1'、 'url2'、 'url3']などの形式で表示されます。その場合、forループを使って各要素をループすることができ、各要素のダウンロード関数を呼び出すことができます。

def video_download(path, url): 

    ydl = youtube_dl.YoutubeDL(
     { 
      'outtmpl': path + '.mp4', 
      'format': 'bestvideo+bestaudio/best', 
      'username': email, 
      'password': password, 
      'cachedir': False, 
      'noplaylist': True 
      # 'quiet': True 
     }) 

    for i in url: 
     ydl.download(i) 

私が使用するこのツールのコマンドラインバージョンもあり、非常に便利です。

+0

それぞれのファイル/ビデオに対してouttmplを設定しているので、 。私はパスとURLをパラメータとして持っているので、私はiと一緒に必要はありません。上記の質問を更新しました。 – user3541631

関連する問題