Estoy codificando un sitio web de música que permite al usuario crear listas de YouTube.
Mi primer intento ha sido con JS:
https://developers.google.com/youtube/v3/code_samples/javascript
El proceso implica una autorización inicial, como puedes ver en este fragmento de HTML:
<div id="login-container" class="pre-auth"> This application requires access to your YouTube account. Please <a href="#" id="login-link">authorize</a> to continue. </div>Una vez que hace clic en el enlace, se muestra un modal como este:
Así que tienes que elegir una cuenta propia -que además debe estar incluida en mi perfil de GCP- para crear la lista en el canal de YouTube relacionada con esa cuenta.
Pero esa no es la forma en que quiero que funcione mi sitio web: quiero que todos los usuarios creen todas sus listas en mi canal de YouTube. Y solo en la mía.
Por lo tanto, necesito que cualquier solicitud que reciba la API de mi sitio web se autorice exclusivamente a través de la cuenta de Gmail relacionada con mi canal de YouTube. Además, de esa forma el proceso de autorización se volvería invisible para el usuario, lo cual es una ventaja. Quiero que creen sus listas simplemente haciendo clic en un solo botón en mi sitio web.
Me han sugerido que haga todo esto del lado del servidor -PHP en mi caso- usando una cuenta de servicio, pero leyendo los documentos de la biblioteca encontré esto:
https://github.com/googleapis/google-api-php-client#autenticación-con-cuentas-de-servicio
Algunas API (como la API de datos de YouTube) no admiten cuentas de servicio.
Entonces... ¿Tengo alguna otra opción para automatizar el proceso de autorización?
Pero esa no es la forma en que quiero que funcione mi sitio web: quiero que todos los usuarios creen todas sus listas en mi canal de YouTube. Y solo en la mía.
La actualización de una lista de usuarios requiere el consentimiento del usuario. Si es su canal de YouTube al que desea actualizar las listas, entonces tendrá que autorizar la aplicación.
Lamentablemente, esto no es tan fácil como cabría esperar. Normalmente, con otras Apis de Google, esperaría que haya un tipo de flujo de servidor a servidor. Donde podría predefinir el acceso. Esto se llama una cuenta de servicio.
La API de YouTube no admite la autorización de cuentas de servicio. Deberá usar Oauth2.
Normalmente, con Oauth2 puede solicitar acceso sin conexión. Puede autorizar su aplicación una vez como usted mismo solicitando acceso fuera de línea y obtener algo llamado token de actualización. Este token de actualización se puede usar en una fecha posterior para solicitar un nuevo token de acceso.
Tendrás algunos problemas.
Ahora el problema se convierte en el hecho de que desea usar JavaScript. JavaScript usa algo llamado flujo implicado. Este flujo no devuelve un token de actualización, solo lo hacen los lenguajes de programación del lado del servidor.
Así que la solución sería.
Si bien esto puede ser un poco confuso, funciona. He implementado algo similar a lo que está haciendo para un cliente hace unos años.