Compare commits

..

1 commit

Author SHA1 Message Date
cbe1dae3c7 asd 2022-11-23 18:53:46 -03:00
5 changed files with 43 additions and 31 deletions

1
.gitignore vendored
View file

@ -1,2 +1 @@
.vscode/settings.json .vscode/settings.json
canales/*.sh

View file

@ -1,21 +1,20 @@
# Visitas al repo :3
![caca](https://count.ayaya.beauty/get/@:twtoyt)
# TwitchToYoutube # TwitchToYoutube
Utilidad hecha en bash para subir streams de twitch directamente a youtube. Usando [streamlink](https://github.com/streamlink/streamlink), [youtubeuploader](https://github.com/porjo/youtubeuploader), [tmux](https://github.com/tmux/tmux), [xh](https://github.com/ducaale/xh) y [jtc](https://github.com/ldn-softdev/jtc) Utilidad hecha en bash para subir streams de twitch directamente a youtube. Usando [streamlink](https://github.com/streamlink/streamlink), [youtubeuploader](https://github.com/porjo/youtubeuploader), [cURL](https://curl.se)/[xh](https://github.com/ducaale/xh) y [jq](https://github.com/stedolan/jq)/[jtc](https://github.com/ldn-softdev/jtc)
*Lo recomendado para usar este programa es tener un servidor o una PC que tenga un internet estable y este encendido 24/7.* ⚠️ Nota Importante: Este script tiene 2 versiones, una que funciona con **cURL** y **jq** y otra que utiliza **xh** y **jtc**.
## Funciones La mejor es la version que utiliza **xh** y **jtc** por ser mas eficiente y rápido. [Vee aquí](./benchmark.md)
*Lo recomendado para usar este programa es tener un servidor o una PC que tenga un internet estable y este encendido 24/7.*
# Funciones
- Subir streams de forma continua y directa a Youtube (Si el VOD es borrado, estará subido). - Subir streams de forma continua y directa a Youtube (Si el VOD es borrado, estará subido).
- Inserta el Titulo, el nombre del streamer y la fecha del stream dentro del titulo de youtube, Incluyendo la hora exacta en la que se empezó stream dentro de la descripción. - Inserta el Titulo, el nombre del streamer y la fecha del stream dentro del titulo de youtube, Incluyendo la hora exacta en la que se empezó stream dentro de la descripción.
- Detecta el stream de forma automática (usando la API de twitch), de forma que si el streamer empieza stream, lo detectara y empezara a subirlo a YouTube - Detecta el stream de forma automática (usando la API de twitch), de forma que si el streamer empieza stream, lo detectara y empezara a subirlo a YouTube
# Como usarlo [INCOMPLETO]
### Como usarlo [Sujeto a cambios]
***IMPORTANTE: ***IMPORTANTE:
Este código solo funciona para Linux o Unix-Like OS como BSD*** Este código solo funciona para Linux o Unix-Like OS como BSD***
@ -30,8 +29,20 @@ O descargando el .zip desde aca -> https://git.zzls.xyz/Fijxu/TwitchToYoutube/ar
Luego descomprimes el .zip donde quieras Luego descomprimes el .zip donde quieras
El resto de esta guía esta separada en diferentes partes:
### Crear una Aplicación de twitch
- [TwitchToYoutube](#twitchtoyoutube)
- [Funciones](#funciones)
- [Como usarlo \[INCOMPLETO\]](#como-usarlo-incompleto)
- [Crear una Aplicación de twitch](#crear-una-aplicación-de-twitch)
- [Conseguir los tokens de twitch](#conseguir-los-tokens-de-twitch)
- [Configurar youtubeuploader](#configurar-youtubeuploader)
- [Ejecutar](#ejecutar)
- [Autor y repo original](#autor-y-repo-original)
## Crear una Aplicación de twitch
- Primero tienen que ingresar a la [pagina de devs de twitch](https://dev.twitch.tv/). - Primero tienen que ingresar a la [pagina de devs de twitch](https://dev.twitch.tv/).
- Darle a `Ingresar con Twitch` arriba a la derecha. - Darle a `Ingresar con Twitch` arriba a la derecha.
@ -42,7 +53,7 @@ Luego descomprimes el .zip donde quieras
- Después al botón junto con la aplicación que dice `Administrar` - Después al botón junto con la aplicación que dice `Administrar`
- Guardan el campo que dice `ID de cliente` y crean un nuevo secreto de cliente, esté también lo guardan para los siguientes pasos. - Guardan el campo que dice `ID de cliente` y crean un nuevo secreto de cliente, esté también lo guardan para los siguientes pasos.
### Conseguir los tokens de twitch ## Conseguir los tokens de twitch
- Con los tokens que guardamos antes, ejecutar este comando remplazando `ID DE CLIENTE` y `SECRETO DE CLIENTE` por los valores que guardaron - Con los tokens que guardamos antes, ejecutar este comando remplazando `ID DE CLIENTE` y `SECRETO DE CLIENTE` por los valores que guardaron
@ -56,7 +67,7 @@ curl --request POST 'https://id.twitch.tv/oauth2/token' \
}' }'
``` ```
- Les va a responder algo como `{"access_token":"TOKEN",...}`, ese access_token es el que tienen que poner en el campo `twitchauth` del archivo `.env` y en `clientid` ponen el id de cliente que usaron antes tal que quede algo así dentro del archivo: - Les va a responder algo como `{"access_token":"TOKEN",...}`, ese access_token es el que tienen que poner en el campo `twitchauth` del archivo `config.sh` y en `clientid` ponen el id de cliente que usaron antes tal que quede algo así dentro del archivo:
```bash ```bash
#!/bin/bash #!/bin/bash
@ -67,7 +78,7 @@ export twitchauth="u7vgESCjSchPAQHxFpMDhHD76iIAMr"
export clientid="hIvIJE6G1vQQhIIYfCg5hiw1wyXCXB" export clientid="hIvIJE6G1vQQhIIYfCg5hiw1wyXCXB"
``` ```
### Configurar youtubeuploader ## Configurar youtubeuploader
1. Descargar la ultima versión de [youtubeuploader](https://github.com/porjo/youtubeuploader) 1. Descargar la ultima versión de [youtubeuploader](https://github.com/porjo/youtubeuploader)
@ -106,24 +117,29 @@ youtubeuploader -filename tuVideo.mp4
- Se les va a generar un archivo `request.token` en el directorio actual, guárdenlo en la carpeta donde se ubican `twtoyt.sh` y `config.sh`. - Se les va a generar un archivo `request.token` en el directorio actual, guárdenlo en la carpeta donde se ubican `twtoyt.sh` y `config.sh`.
### Ejecutar ## Ejecutar
Con esto ya deberían de tener todo lo necesario para correr el script. Ejecuta este comando de abajo para darle permisos al script para que se pueda ejecutar. Con esto ya deberían de tener todo lo necesario para correr el script. Ahora puedes ejecutar este comando dentro de la carpeta donde descargaste el programa para que no tenga ningún problema al tratar de ejecutarlo:
```sh ```sh
chmod +x twtoyt.sh chmod +x twtoyt.sh
``` ```
Y ahora lo tienes que hacer, es crear varias copias del mismo archivo `twtoyt.sh` dentro de la carpeta [canales](./canales/) con un nombre cualquiera y ejecutar el script [start.sh](./start.sh) con: También puedes crear diferentes copias de este mismo archivo con diferentes nombres de canales.
```sh **Es necesario modificar la variable `TWITCH_USER` dentro del archivo, ahí se coloca el nombre del streamer de twitch y este se usara para el titulo y el nombre de la playlist**
./start.sh
```
**Es necesario modificar la variable `TWITCH_USER` dentro de las copias del script `twtoyt.sh`, ahí se coloca el nombre del streamer de twitch y este se usara para el titulo y el nombre de la playlist**
**Luego cambia la descripción dentro de la variable `VIDEO_DESCRIPTION` si es que lo consideras necesario.** **Luego cambia la descripción dentro de la variable `VIDEO_DESCRIPTION` si es que lo consideras necesario.**
#### Autor y repo original Y finalmente ejecútalo con este comando.
```sh
./twtoyt.sh
```
Para dejarlo en segundo plano, puedes usar `tmux`, un programa bastante util para dejar corriendo programas en segundo plano de manera manual.
### Autor y repo original
[jenslys/autovod](https://github.com/jenslys/autovod/) [jenslys/autovod](https://github.com/jenslys/autovod/)

View file

View file

@ -1,3 +0,0 @@
#!/bin/bash
# Script que sirve para iniciar sesiones de tmux con sus respectivos canales
for i in ./canales/*.sh; do tmux new-session -d -s $i "/bin/bash $i"; done

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Carga la configuracion desde ./config.sh # Carga la configuracion desde ./config.sh
source ../.env source ./config.sh
echo "Auth de twitch: $twitchauth" echo "Auth de twitch: $twitchauth"
echo "Client-Id de twitch: $clientid" echo "Client-Id de twitch: $clientid"
@ -13,20 +13,20 @@ while true; do
VIDEO_VISIBILITY="public" # Visibilidad del Video. Opciones disponibles: unlisted, private, public VIDEO_VISIBILITY="public" # Visibilidad del Video. Opciones disponibles: unlisted, private, public
VIDEO_DURATION="11:59:30" # Duración del video, si dura mas de el valor ingresado, se subira en partes divididas (Youtube solo tiene hasta videos de maximo 12 horas) VIDEO_DURATION="11:59:30" # Duración del video, si dura mas de el valor ingresado, se subira en partes divididas (Youtube solo tiene hasta videos de maximo 12 horas)
STREAMLINK_OPTIONS="best --hls-duration $VIDEO_DURATION --hls-segment-stream-data --stream-segment-timeout 10 --hls-playlist-reload-attempts 3 --hls-live-restart --twitch-disable-hosting --twitch-disable-reruns -O --loglevel error" # https://streamlink.github.io/cli.html#twitch STREAMLINK_OPTIONS="best --hls-duration $VIDEO_DURATION --stream-segment-timeout 30 --hls-playlist-reload-attempts 10 --hls-live-restart --twitch-disable-hosting --twitch-disable-reruns -O --loglevel error" # https://streamlink.github.io/cli.html#twitch
echo "Checkqueando si $TWITCH_USER esta en vivo" echo "Checkqueando si $TWITCH_USER esta en vivo"
# Checkea si el streamer esta en vivo usando la API de twitch # Checkea si el streamer esta en vivo usando la API de twitch
checkstream=$(xh GET "https://api.twitch.tv/helix/streams?user_login=$TWITCH_USER" "Authorization: Bearer $twitchauth" "Client-Id: $clientid" -b | ../jtc -w '[data][:][type]' -qq) checkstream=$(curl -sS -X GET "https://api.twitch.tv/helix/streams?user_login=$TWITCH_USER" -H "Authorization: Bearer $twitchauth" -H "Client-Id: $clientid" | jq -r '.data[].type')
# Si el streamer esta en vivo, empieza a subir a youtube # Si el streamer esta en vivo, empieza a subir a youtube
if [[ $checkstream = *live* ]]; then if [[ $checkstream = *live* ]]; then
STREAMER_NAME=$TWITCH_USER STREAMER_NAME=$TWITCH_USER
VIDEO_PLAYLIST="$STREAMER_NAME VODs" VIDEO_PLAYLIST="$STREAMER_NAME VODs"
TWITCH_USER_ID=$(xh GET "https://api.twitch.tv/helix/users?login=$TWITCH_USER" "Authorization: Bearer $twitchauth" "Client-Id: $clientid" -b | ../jtc -w '[data][:][id]' -qq) TWITCH_USER_ID=$(curl -sS -X GET "https://api.twitch.tv/helix/users?login=$TWITCH_USER" -H "Authorization: Bearer $twitchauth" -H "Client-Id: $clientid" | jq -r '.data[].id')
TWITCH_TITLE=$(xh GET "https://api.twitch.tv/helix/channels?broadcaster_id=$TWITCH_USER_ID" "Authorization: Bearer $twitchauth" "Client-Id: $clientid" -b | ../jtc -w '[data][:][title]' -qq) TWITCH_TITLE=$(curl -sS -X GET "https://api.twitch.tv/helix/channels?broadcaster_id=$TWITCH_USER_ID" -H "Authorization: Bearer $twitchauth" -H "Client-Id: $clientid" | jq -r '.data[].title')
TWITCH_TITLE_CUT=$(echo "$TWITCH_TITLE" | colrm 70 | tr "><" " ") TWITCH_TITLE_CUT=$(echo "$TWITCH_TITLE" | colrm 70 | tr "><" " ")
VIDEO_DESCRIPTION="Hosteado por Fijxu. https://twitch.tv/$TWITCH_USER \nTitulo Completo: $TWITCH_TITLE \nFecha y hora: $(date +"A las %H:%M horas, día %d/%m/%y") \nDonaciones: https://ko-fi.com/fijxu \nSi eres el streamer que aparece en el VOD y por alguna razon necesitas ocultar o recuperar (nunca borrare los VODs, eso va en contra de mi objetivo, aunque pueden haber excepciones) el VOD, puedes dejar un comentario, enviar un mensaje por Twitch @fijxu o usando el correo de contacto del canal. \n \nEste es un proyecto de caracter personal, me gusta archivar streams de twitch para que nada se pierda, y que todos puedan volver a ver streams del pasado sin problemas. 'Sharing is caring'" # Descripción del video VIDEO_DESCRIPTION="Hosteado por Fijxu. https://twitch.tv/$TWITCH_USER \nTitulo Completo: $TWITCH_TITLE \nFecha y hora: $(date +"A las %H:%M horas, día %d/%m/%y") \nDonaciones: https://ko-fi.com/fijxu \nSi eres el streamer que aparece en el VOD y por alguna razon necesitas ocultar o recuperar (nunca borrare los VODs, eso va en contra de mi objetivo, aunque pueden haber excepciones) el VOD, puedes dejar un comentario, enviar un mensaje por Twitch @fijxu o usando el correo de contacto del canal. \n \nEste es un proyecto de caracter personal, me gusta archivar streams de twitch para que nada se pierda, y que todos puedan volver a ver streams del pasado sin problemas. 'Sharing is caring'" # Descripción del video