Usar scraping en vez de petición a la API para obtener info de los vídeos
agustin-del-pino opened this issue · 0 comments
Buenas vi el vídeo y me copó,
El típico problema de falta de petición por rate-limit se puede solucionar descargando el HTML directamente desde la url del canal de youtube.
Dado que los vídeos nuevos se suben con una cuota de periodicidad preestablecida (la que el usuario presenta, por ejemplo, cada jueves se suben 2 vídeos, a las 13 y 20hrs). Eso significa que, la obtención de la información de aquello vídeos debe darse si y sólo sí, es jueves a las 13:30 o 20:30hrs (dejando un span de 30 minutos post-subida).
En el hub de uploaded videos
. Hay anchors que tiene como id video-title
, y que su href
es la url del vídeo, por lo tanto el id del propio vídeo, a parte del título. El div
padre contiene aún más info.
Con esto dicho, esta información puede ser guardada en un JSON, CSV, etc, para se consumida por el bot de bloqueo de comentarios.
Gracias a esto se aumenta considerablemente la cantidad de API points.
Dejo un maqueta de cómo podría llegar a ser la implementación.
# services/youtube.py
import requests
from bs4 import BeautifulSoup
def get_videos_info(channel_url, mapping: Callable[[itemFromBS4], dict]) -> List[dict]:
channel_url = channel_url if channel_url.endswith("/videos") else f'{channel_url}/videos'
res = requests.get(channel_url)
hub = BeautifulSoup(res.content, "html.parser")
return list(map(mapping, hub.select("#video-title")))
# main.py
from services import youtube
videos = youtube.get_videos_info("youtube.com/aguante_boca", lambda video: {"id":video["href"]} )
persist_in_db(videos)