youtube-dl-php icon indicating copy to clipboard operation
youtube-dl-php copied to clipboard

Enable oauth2 support

Open carloscuervo opened this issue 1 year ago • 6 comments

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.

carloscuervo avatar Oct 09 '24 11:10 carloscuervo

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

norkunas avatar Oct 09 '24 19:10 norkunas

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:

  • Detect when yt-dlp is asking to register a device
  • Capture that code, return to the program but keeping the process wating until the device is registered.

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

carloscuervo avatar Oct 10 '24 08:10 carloscuervo

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

So I'm not sure that there is something to do here :)

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.

You can do that via $yt->debug(function () { ... }); which allows to capture all the information

norkunas avatar Oct 14 '24 09:10 norkunas

@carloscuervo I'm currently playing with this nightly feature.

What I'm doing now is I run ytdlp on ssh once with oauth2, then the code will just pick it up.

But it would be nice to have a way of accessing that code via php.

@norkunas For reference this is what it looks like when you try to login with oauth2 first:

$ yt-dlp --username oauth --password '' https://www.youtube.com/watch?v=id
[youtube] oauth: Initializing authorization flow
[youtube] oauth: To give yt-dlp access to your account, go to  https://www.google.com/device  and enter code  XXX-YYY-ZZZZ

XXX-YYY-ZZZZ is basically all we need here. The rest is manual work.

mokhosh avatar Oct 23 '24 14:10 mokhosh

@mokhosh do you have any suggestions how could we make this work?

norkunas avatar Oct 24 '24 03:10 norkunas

Just thinking out loud, maybe in the same way we have debug which accepts a closure, we can have something like pendingOauth which accepts a closure and passes the [youtube] oauth line to the closure for the developer to decide what they wanna do with it.

Maybe @carloscuervo also has some input.

mokhosh avatar Oct 24 '24 08:10 mokhosh