init NewsBoat YouTube feed
This commit is contained in:
commit
379ecdea16
61
README.md
Normal file
61
README.md
Normal file
@ -0,0 +1,61 @@
|
||||
## Agregador de canales de YouTube a Newsboat
|
||||
|
||||
**¿Que es?**
|
||||
Un script sencillo, escrito en lenguaje **Bash**, que busca el **id** y **nombre** de canales
|
||||
de youtube para agregarlos al feed de [newsboat](https://github.com/newsboat/newsboat) *`~/.config/newsboat/urls`*
|
||||
|
||||
Permite importar desde una base de datos de [NewPipe](https://github.com/TeamNewPipe/NewPipe/) (json, db, db.zip)
|
||||
|
||||
-----
|
||||
|
||||
### Añadir canal(es) al feed RSS
|
||||
#### Uso
|
||||
```bash
|
||||
./newsboat-yt-aggregator.sh
|
||||
```
|
||||
```bash
|
||||
╔═════════════════════════════════════════════════╗
|
||||
║ Añadir canal(es) de YouTube al feed de Newsboat ║
|
||||
╚═════════════════════════════════════════════════╝
|
||||
|
||||
Opciones:
|
||||
|
||||
1) Importar desde un link
|
||||
2) Importar desde una lista de links
|
||||
3) Importar desde base de datos de NewPipe
|
||||
4) Importar desde archivo JSON de NewPipe
|
||||
0) Salir
|
||||
|
||||
¿Que necesitas?
|
||||
--> :
|
||||
```
|
||||
#### Formatos admitidos
|
||||
|
||||
- [x] Link
|
||||
- [x] Lista
|
||||
- [x] DB
|
||||
- [x] DB.zip
|
||||
- [x] JSON
|
||||
|
||||
#### Requerimientos
|
||||
- **wget**
|
||||
- Consultas a youtube.com
|
||||
- sqlite3
|
||||
- Importa [newpipe](https://github.com/newsboat/newsboat).db, *opcional*
|
||||
- unzip
|
||||
- Extrae [newpipe](https://github.com/newsboat/newsboat)-db.zip, *opcional*
|
||||
- **grep**
|
||||
- **sed**
|
||||
|
||||
----
|
||||
|
||||
### Script
|
||||
```mermaid
|
||||
graph TD
|
||||
Main[Script] --> Link --> GetID[Obtener ID]
|
||||
Main --> Lista[Lista de Links] --> GetID
|
||||
Main --> BD[Base de Datos] --> Extraer[Extraer ID y Nombre]
|
||||
Main --> JSON --> Validador
|
||||
Extraer --> Validador
|
||||
GetID --> Validador --> AddRSS[Agregar RSS]
|
||||
```
|
150
newsboat-yt-aggregator.sh
Executable file
150
newsboat-yt-aggregator.sh
Executable file
@ -0,0 +1,150 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
Main(){
|
||||
|
||||
Err() {
|
||||
printf 'ERROR: %s\n' "$2" 1>&2
|
||||
sleep 2
|
||||
[ $1 -gt 0 ] && exit $1
|
||||
}
|
||||
|
||||
Title() {
|
||||
#clear
|
||||
printf -v Bar '%*s' $((${#1} + 2)) ' '
|
||||
printf '%s\n║ %s ║\n%s\n' "╔${Bar// /═}╗" "$1" "╚${Bar// /═}╝"
|
||||
}
|
||||
|
||||
# obtener Id y nombre del canal (max 30 caracteres)
|
||||
GetId() {
|
||||
wget -L --output-document=/tmp/tempLink "${1}" && \
|
||||
NEWID=$(grep -oE "/channel/.{0,24}" /tmp/tempLink | head -n 1 | cut -d'/' -f3) && \
|
||||
[[ $(printf '%s' "${NEWID}" | wc -c) == "24" ]] && \
|
||||
NEWNAME=$(grep -oE "\"channelName\"\:\".{0,30}" /tmp/tempLink | cut -d\" -f 4) || \
|
||||
Err 0 "URL: ${1}"
|
||||
[[ ${NEWNAME} == '' ]] && NEWNAME=$(grep -oE "name\"\:\ \".{0,30}" /tmp/tempLink | cut -d\" -f 3)
|
||||
USERLINK='' && rm -f /tmp/tempLink
|
||||
ValidaLink "${NEWID}" "${NEWNAME}"
|
||||
}
|
||||
|
||||
# verificar si NEWID existe en archivo URLS
|
||||
ValidaLink() {
|
||||
if [[ ${1} == '' ]]; then
|
||||
Err 0 'ID no obtenido, verifica el link'
|
||||
else
|
||||
if [[ ! -n $(grep ${1} ${HOME}/.config/newsboat/urls) ]]; then
|
||||
BASEURL="https://youtube.com/feeds/videos.xml?channel_id=${1}"
|
||||
AddLink "${BASEURL}" "${NEWNAME}"
|
||||
else
|
||||
#echo "${2}"
|
||||
printf '\nOmitiendo [%s], canal ya esta en la lista.\n' "${2}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# DEBUG en /tmp/
|
||||
# agregar canal a URLS
|
||||
AddLink(){
|
||||
#printf '%s\n' "${1} \"~${2}\"" >> /tmp/urlsTemp
|
||||
printf '%s\n' "${1} \"~${2}\"" >> ${HOME}/.config/newsboat/urls
|
||||
Title "Canal agregado: ${2}" && NEWNAME='' && NEWID=''
|
||||
}
|
||||
|
||||
# leer lista de urls, validar y agregar
|
||||
AddList(){
|
||||
printf 'Ruta al archivo\n'
|
||||
read -p '--> : ' LISTA
|
||||
if [[ -f $LISTA ]]; then
|
||||
while read -r line; do
|
||||
GetId "${line}"
|
||||
done < "$LISTA"
|
||||
else
|
||||
Err 0 'Archivo no encontrado'
|
||||
Main
|
||||
fi
|
||||
}
|
||||
|
||||
# consulta newpipe.db
|
||||
ImportDB(){
|
||||
while read -r line; do
|
||||
NEWID=$(cut -d'|' -f1 <<< $line)
|
||||
NEWNAME=$(cut -d'|' -f2 <<< $line)
|
||||
ValidaLink "${NEWID}" "${NEWNAME}"
|
||||
done <<< "$(sqlite3 $1 'select url,name from subscriptions' | cut -d\/ -f5)"
|
||||
rm -f /tmp/newpipe.db
|
||||
}
|
||||
|
||||
# extrae newpipe-db.zip
|
||||
NewPipeDB(){
|
||||
if [[ ${RUTADB} == *\.zip ]]; then
|
||||
printf 'Unzipping %s en /tmp/ \n' "${1}"
|
||||
unzip -qq $RUTADB newpipe.db -d /tmp/ && \
|
||||
ImportDB '/tmp/newpipe.db'
|
||||
elif [[ ${RUTADB} == *\.db ]]; then
|
||||
ImportDB ${RUTADB}
|
||||
else
|
||||
Err 0 'Base de Datos no encontrada.'
|
||||
Main
|
||||
fi
|
||||
}
|
||||
|
||||
ImportJSON(){
|
||||
if [[ ${RUTAJSON} == *\.json ]]; then
|
||||
while read -r line; do
|
||||
NEWID=$(cut -d' ' -f1 <<< $line)
|
||||
NEWNAME=$(cut -d' ' -f2-10 <<< $line)
|
||||
ValidaLink "${NEWID}" "${NEWNAME}"
|
||||
done <<< "$(sed 's/channel\//\n/g; s/\",\"name\":\"/ /g; s/\"//g' ${1} | tail -n +2 | sed 's/}.*$//g')"
|
||||
else
|
||||
Err 0 'Archivo JSON no encontrado.'
|
||||
Main
|
||||
fi
|
||||
}
|
||||
|
||||
while :; do
|
||||
Title 'Añadir canal(es) de YouTube al feed de Newsboat'
|
||||
printf '\n\tOpciones:\n\n'
|
||||
printf '\t1) Importar desde un link\n'
|
||||
printf '\t2) Importar desde una lista de links\n'
|
||||
printf '\t3) Importar desde base de datos de NewPipe\n'
|
||||
printf '\t4) Importar desde archivo JSON de NewPipe\n'
|
||||
printf '\t0) Salir\n'
|
||||
printf '\n\t¿Que necesitas?\n'
|
||||
read -p '--> : '
|
||||
case ${REPLY} in
|
||||
'1')
|
||||
printf 'Copia y pega el link\n'
|
||||
read -p '--> : ' USERLINK
|
||||
GetId "${USERLINK}"
|
||||
exit 0
|
||||
;;
|
||||
'2')
|
||||
AddList
|
||||
exit 0
|
||||
;;
|
||||
'3')
|
||||
printf 'Ruta a la base de datos\n'
|
||||
read -p '--> : ' RUTADB
|
||||
NewPipeDB ${RUTADB}
|
||||
exit 0
|
||||
;;
|
||||
'4')
|
||||
printf 'Ruta al archvo JSON\n'
|
||||
read -p '--> : ' RUTAJSON
|
||||
ImportJSON ${RUTAJSON}
|
||||
exit 0
|
||||
;;
|
||||
'0')
|
||||
exit 0
|
||||
;;
|
||||
'')
|
||||
Err 0 'Respuesta requerida.'
|
||||
;;
|
||||
*)
|
||||
Err 0 'Respuesta inválida.'
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
Main
|
||||
|
Loading…
Reference in New Issue
Block a user