3ENGINE

Programación y otros cachivaches

Etiqueta: Python

Página 5/6

Tecnologia

Cómo buscar videos en Youtube con Python


Si quieres buscar videos de Youtube de manera totalmente automática, Google ofrece su API de Youtube. Una alternativa a esta API es hacer uso de técnicas de Web Scraping para simular que nuestra aplicación es un humano navegando por la Web y recopilar información de forma automática.

buscar videos en Youtube con Python

Vamos a ver como se hace mediante la escritura de un sencillo código Python y el apoyo de la libreria pyquery que permite realizar consultas de manera similar a como lo hace jQuery en documentos XML y HTML.

Si despues te interesa descargar videos de youtube entonces te interesa esta entrada donde explico cómo hacerlo. En cambio, si lo que te interesa es descargar el thumbnail entonces te puede interesar esta otra entrada donde explico cómo bajar una imagen de la web con python.

Código:

# -*- coding: cp1252 -*-
from pyquery import PyQuery as Pq
from urllib import urlencode

def search_youtube_video(title, pages):
    for page in range(pages):
        params = urlencode({'search_query':'intitle:"%s", video, long' % title, 'page':page})
        jq = Pq(url="http://www.youtube.com/results?%s" % params,
                headers={"user-agent": "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20140129 Firefox/24.0"})
        jq.make_links_absolute("http://www.youtube.com")
        for video in jq("ol.item-section").children().items():
            url = video.find("a.yt-uix-tile-link").attr("href")
            title = video.find("a.yt-uix-tile-link").text()
            time = video.find("span.video-time").text()   
            if time:
                tsecs = 0
                items = time.split(':')
                items.reverse()
                for i in range(len(items)):
                    tsecs += int(items[i])*(60**i)          
            description = video.find("div.yt-lockup-description").text()
            thumb = video.find("div.yt-thumb img").attr("data-thumb")
            if not thumb:
                thumb = video.find("div.yt-thumb img").attr("src")
            if thumb:
                thumb = thumb.lstrip("//")     
            published = video.find("ul.yt-lockup-meta-info li").eq(0).html()
            views = video.find("ul.yt-lockup-meta-info li").eq(1).html()

            print
            print "url:", url
            print "title:", title
            print "time:", time
            print "time in seconds:", tsecs
            print "description:", description
            print "thumbnail:", thumb
            print "published:", published
            print "views:", views

if __name__ == '__main__':
    search_youtube_video("la guerra del opio", 1)

La función search_youtube_video acepta dos parámetros. title es el texto a buscar y pages el número de páginas de resultados a procesar. El código hace uso de selectores jqyery para encontrar la información en la página de resultados.

El código siempre buscar videos de mas de 20 minutos, para eliminar esta restricción deberás eliminar el keyword «long» del parámetro search_query quedando así:

params = urlencode({'search_query':'intitle:"%s", video' % title, 'page':page})

Resultado ejemplo:

url: http://www.youtube.com/watch?v=436qM17mKok
title: la guerra del opio 1997 dvdripspanishwww zonatorrent com
time: 1:46:38
time in seconds: 6398
description: 
thumbnail: i.ytimg.com/vi/436qM17mKok/mqdefault.jpg
published: Hace 2 años
views: 23.792 visualizaciones

url: http://www.youtube.com/watch?v=0L7l7j9r1hs
title: Escenas para uso didáctico: La Guerra del Opio
time: 47:51
time in seconds: 2871
description: Escenas para explicar el imperialismo colonial. Más información:...
thumbnail: i.ytimg.com/vi/0L7l7j9r1hs/mqdefault.jpg
published: Hace 2 años
views: 5.833 visualizaciones

url: http://www.youtube.com/watch?v=bhnXgV-ZRS0
title: La Guerra del Opio
time: 32:18
time in seconds: 1938
description: mi proyecto Brenda Elena Segura Maza "A"
thumbnail: i.ytimg.com/vi/bhnXgV-ZRS0/mqdefault.jpg
published: Hace 1 año
views: 230 visualizaciones



Tecnologia

Colección de temas para el IDLE de Python


La verdad es que IDLE de Python es fantastico, pero el esquema de color que trae por defecto es un poco soso. Para facilitaros un poco la vida os dejo en descarga el fichero de configuración con una colección de temas para el IDLE recopilados por Google. Los temas que contiene son los siguientes:

  • Tango
  • Desert
  • Obsidiana
  • Solarized Dark
  • Solarized Light
  • Black
  • CodeIt
  • Codecademy UI
  • UbuntuLike

Sigue estos pasos para añadir los temas para el IDLE de Python:

  1. Cierra el IDLE de Python
  2. Descarga y descomprime config-highlight.cfg
  3. Buscar la carpeta /.idlerc y pega allí el fichero. Normalmente en Linux esta carpeta se encuentra en el directorio Home, mientras que en Windows es posible que se encuentre en la carpeta de configuración de usuario. Prueba a escribir la orden cd /D %userprofile%\.idlerc
  4. Abre de nuevo el IDLE de Python
  5. Vete a la pestaña highlight de la opción de menu Options > Configure IDLE y selecciona uno de los temas

temas para el IDLE de Python

6. Si seleccionastes el tema Obsidiana ahora tu IDLE debería parecerse a esto:

temas para el IDLE de Python




Tecnologia

Como descargar videos de Youtube (y otros proveedores) con Youtube-dl


Existen varias aplicaciones que permiten descargar videos de youtube. (youtube-dl, cclive, clive, rtmpdump, get_flash_videos,…) Pero una de las aplicaciones mas sencillas es youtube-dl, disponible para Linux, Windows y Mac OS X. Necesitarás Python para que funcione.

descargar videos de Youtube

Para instalar youtube-dl en Ubuntu

1. Examinar https://yt-dl.org/downloads/ y localizar la carpeta mas actual. A fecha de hoy la carpeta mas actual es 2014.04.21.6:

2. Descargar la última versión de youtube-dl y dar permisos de ejecución:

$ sudo wget http://yt-dl.org/downloads/2014.04.21.6/youtube-dl -O /usr/local/bin/youtube-dl
$ sudo chmod a+x /usr/local/bin/youtube-dl

Para instalar youtube-dl en Windows

1. Muy sencillo. Ir a la página de descarga y bajar la última versión de la aplicación. La aplicación es un simple .exe

Algunos comandos útiles

1. Actualizar a la última versión (hazlo si tienes problemas para descargar) :

$ sudo youtube-dl -U

2. Averiguar que proveedores soporta youtube-dl:

$ youtube-dl --list-extractors

3. Descargar vídeos por palabra clave de youtube utiliza ytsearch. Por defecto descargará la primera coincidencia. Otra variante es ytsearchN donde N es el número de vídeos a descargar. Para descargar todos los vídeos que coincidan utilizar ytsearchall. Para buscar en google (www.google.es/videohp‎) utilizar gvsearch. Para buscar en Yahoo (http://es.video.search.yahoo.com) utilizar yvsearch :

Descargar la primera coincidencia

$ youtube-dl "ytsearch:hola soy german"

Descargar las tres primeras coincidencias:

$ youtube-dl "ytsearch3:hola soy german"

Para listar las tres primeras coincidencias sin descargar los videos añadir -s:

$ youtube-dl -s "ytsearch3:hola soy german"

4. Para descargar un vídeo en concreto (el de mas alta calidad) pasar la URL del vídeo:

$ youtube-dl https://www.youtube.com/watch?v=My2FRPA3Gf8

5. Para ver resoluciones y formatos soportados de un vídeo en concreto:

$ youtube-dl --list-formats https://www.youtube.com/watch?v=My2FRPA3Gf8

Si por ejemplo el resultado es el siguiente:

[info] Available formats for My2FRPA3Gf8:
format code extension resolution  note 
171         webm      audio only  DASH webm audio , audio@ 48k (worst)
140         m4a       audio only  DASH audio , audio@128k
160         mp4       144p        DASH video , video only
242         webm      240p        DASH webm 
133         mp4       240p        DASH video , video only
243         webm      360p        DASH webm 
134         mp4       360p        DASH video , video only
244         webm      480p        DASH webm 
135         mp4       480p        DASH video , video only
247         webm      720p        DASH webm 
136         mp4       720p        DASH video , video only
248         webm      1080p       DASH webm 
137         mp4       1080p       DASH video , video only
17          3gp       176x144     
36          3gp       320x240     
5           flv       400x240     
43          webm      640x360     
18          mp4       640x360     
22          mp4       1280x720    (best)

Para descargar el formato identificado por el 18 (mp4 640×360):

$ youtube-dl -f 18 https://www.youtube.com/watch?v=My2FRPA3Gf8

7. Para mostrar la ayuda en linea:

$ youtube-dl --help



Tecnologia

Cómo traducir textos con python y Google Translate


Si necesitas traducir textos a otros idiomas de manera totalmente automática, Google ofrece la API de su producto Google Translate. Pero tienes que saber que necesitas una API Key de Google y que es de pago.

Una alternativa gratuita es hacer uso de técnicas de Web Scraping para simular que nuestra aplicación es un humano navegando por la Web y recopilar información de forma automática.

 traducir textos con python y Google Translate

Es posible traducir textos con python y Google Translate. Se trata de simular los siguientes pasos:

  1. Entrar en la página del traductor Google Translate.
  2. Introducir el texto original que queremos traducir.
  3. Indicar el idioma de origen o decirle que detecte el idioma en el que está escrito.
  4. Indicar el idioma destino.
  5. Traducir.
  6. Recoger el texto traducido.
  7. Recoger el idioma de origen si le dijimos a Google Translate que detectara el idioma.

Para implementar todos los pasos necesitamos estas librerías de Python:

  • urllib para codificar los parámetros GET.
  • urllib2 para modificar la cabecera HTTP y enviar la petición GET (Request).
  • re para adaptar la respuesta (Response) mediante el uso de expresiones regulares.
  • json para deserializar la respuesta a un objeto Python.

Si te falta alguna de estas librerías utiliza pip como gestor de paquetes e instalalas.  Este enlace te explica cómo instalar pip.

El código, mas abajo comento cómo funciona:

from urllib import urlencode
from urllib2 import urlopen, Request
import re
import json
def get_google_translate(text, translate_lang, source_lang=None):
    if source_lang == None:
        source_lang= 'auto'
    params = urlencode({'client':'t', 'tl':translate_lang, 'q':text.encode('utf-8'),
                       'sl':source_lang})
    http_headers = {"User-Agent":"Mozilla/4.0 (compatible; MSIE 5.5;Windows NT)"}
    request_object = Request('http://translate.google.com/translate_a/t?'+params, 
                     None, http_headers)
    try:
        response = urlopen(request_object)
        string = re.sub(',,,|,,',',"0",', response.read())
        n = json.loads(string)
        translate_text = n[0][0][0]
        res_source_lang = n[2]
        return True, res_source_lang, translate_text
    except Exception, e:
        return False, '', e

En la línea 14 se hace la petición GET donde se le pasa la cabecera modificada para simular que nuestra rutina es un navegador Web. Como parámetros GET se le pasa el texto a traducir así como el idioma de destino y el idioma de origen o ‘auto’ para que detecte el idioma.

La respuesta es un array en el formato javascript:

[[[«Happy Birthday!»,»С днём рождения!»,»»,»S dnom rozhdeniya!»]],,«ru»,,[[«Happy Birthday!»,[4],True,False,627,0,3,0]],[[«С днем рождения !»,4,[[«Happy Birthday!»,627,True,False],[«Happy birthday»,0,True,False]],[[0,16]],»С днём рождения!»]],,,[],1]

Necesita de una pequeña adaptación para ser un JSON compatible y de esto se encarga la línea 15 de código mediante una expresión regular que añade un cero a cualquier aparición de item vacío. La línea 16 deserializa el JSON para después leer el texto traducido y el idioma de origen.

Test:

result, code, text = get_google_translate(u'Hola Mundo!', 'en')
print result, code, text
result, code, text = get_google_translate(u'Hello World!', 'es')
print result, code, text
result, code, text = get_google_translate(u'привет мир', 'en')  
print result, code, text
result, code, text = get_google_translate(u'مرحبا العالم', 'en') 
print result, code, text
result, code, text = get_google_translate(u'Ciao Mondo', 'pt', 'it') 
print result, code, text

En todas las traducciones, excepto en la última, indicamos que detecte automáticamente el idioma del texto a traducir.

Resultado:

True es Hello World!
True en ¡Hola Mundo!
True ru hello world
True ar Hello world
True it Olá Mundo

Comprobamos que detecta que el idioma de origen es el español (es), inglés (en), ruso (ru) y árabe (ar) respectivamente. Por último indica que el idioma es el italiano (it) que es el indicado. Ahora podemos traducir textos con python y Google Translate fácilmente.