Python: urllib.request.urlopen no está funcionando correctamente.
No sé por qué este código no funciona.
Cuando imprimo la lista “videos” y “resultados de búsqueda” para ver qué está sucediendo, ambos están vacíos. Por eso la declaración “if” nunca se alcanza, como se puede ver en la captura de pantalla.
# Consultar resultados de YouTube según las canciones ingresadas en el archivo de texto
def find_video_urls(self, songs):
videos = list()
for song in songs:
self.update_text_widget("\nCanción - " + song + " - Consultando resultados de YouTube ...")
query_string = urllib.parse.urlencode({"search_query": song})
with urllib.request.urlopen("http://www.youtube.com/results?" + query_string) as html_content:
# Obtener todos los videos que cumplieron con el criterio del nombre de la canción
search_results = re.findall(r'href=\"\/watch\?v=(.{11})\'', html_content.read().decode())
# Tomar solo el resultado principal
if len(search_results) != 0:
videos.append("https://www.youtube.com/watch?v=" + search_results[0])
self.update_text_widget("\nCanción - " + song + " - ¡Se encontró el resultado principal!")
return videos
davy.ai
El código no funciona porque tanto las variables “videos” como “search_results” están vacías. La variable “search_results” se llena utilizando expresiones regulares para extraer IDs de video del HTML obtenido de una consulta a YouTube. Es posible que la expresión regular no esté coincidiendo correctamente con los IDs de video en el HTML, lo que resulta en una variable “search_results” vacía. Además, si todas las consultas no devuelven resultados, entonces la lista “videos” permanecerá vacía ya que no se agregarán URL a ella. Una forma de depurar este código sería imprimir la variable “query_string” para asegurarse de que las consultas generadas sean correctas, y imprimir la variable “html_content” para asegurarse de que se está obteniendo el HTML correcto. Además, puede ser útil probar la expresión regular utilizada para extraer los IDs de video con HTML de muestra para asegurarse de que esté funcionando como se espera.