norkunas / youtube-dl-php

A PHP wrapper for youtube-dl or yt-dlp.
MIT License
455 stars 157 forks source link

Enable oauth2 support #248

Open carloscuervo opened 4 days ago

carloscuervo commented 4 days ago

When you are using oauth2, to avoid issues with the anti-bot youtube's mechanism, you need to use cookies or oauth2 to authenticate with Youtube to get access for download videos.

I am using this plugin: https://github.com/coletdjnz/yt-dlp-youtube-oauth2

When using oauth2 yt-dlp force you to register your "device" (application) to authenticate using oath2. The response of yt-dlp is:

xxxx@vmi2052980:/var/www/html$ [youtube+oauth2] oauth2: Initializing OAuth2 Authorization Flow [youtube+oauth2] To give yt-dlp access to your account, go to https://www.google.com/device and enter code XXX-XXX-XXX

That response is blocked until you register that device so you PHP program is blocked until you realice that you have to register the application.

So, you would go to https://www.google.com/device and register your app.

It would be interesting that you can capture the response (and not block the yt-dlp processs) when yt-dlp indicate that you have to register your device.

The next yt-dlp executions don't require register again and you can use it.

norkunas commented 3 days ago

Contributions are welcome :) I'm not familiar yet how this blocks the flow.

carloscuervo commented 3 days ago

I'm developing a web to convert youtube videos to mp3.

The method that I am using to convert a youtube video ($url) to mp3 is this:

$collection = $yt->download( Options::create() ->downloadPath($directorio) ->extractAudio(true) ->audioFormat('mp3') ->audioQuality('0') // best ->url($url) ->cacheDir( '/var/www/.cache') ->authenticate('oauth2','')

The first time when you are using oauth2 as authentication method, yt-dlp shows this response and keep waiting until you register the code:

xxxx@vmi2052980:/var/www/html$ [youtube+oauth2] oauth2: Initializing OAuth2 Authorization Flow [youtube+oauth2] To give yt-dlp access to your account, go to https://www.google.com/device and enter code XXX-XXX-XXX

The process is waiting until you go to https://www.google.com/device and enter that code and login with the user's youtube account.

When you enter the code and register the device, yt-dlp process continues running and the process finish.

The workaround when using oauth2 will be:

I am not pretty sure if there is any way to automate this...