YouTube.php

Agregar a favoritos

17 Comentarios

Posteado hace 620 días en:

Siempre me ha gustado parsear las paginas web, es algo que me encanta, puede ser muy friki pero uso las expresiones como pasatiempo. En uno de los proyectos he tenido que buscar vídeos en youtube, como era una simple búsqueda en vez de usar su API hice una pequeña función.

Devuelve un array con lo mínimo para mostrar: ID, imagen y titulo del vídeo.

function youtube($q='') {
    $videos = array();
    $url = 'http://youtube.com/results?search_query='.urlencode(strtolower($q));
    $pagina = @file_get_contents($url);
    //!<a href="/watch\?v=([^"]+)">[\s]+<img src="(.*)" class="vimg120" title="(.*)"!Usi
    if(preg_match_all('!<a\s+href="/watch\?v=([^"&]+)"[^<]+<img\s+src="([^"]*)"\s+class="vimg120"\s+title="([^"]*)"!Usi', $pagina, $info, PREG_SET_ORDER)) {
        foreach($info as $video) {
            $videos[] = array(
            'id' => $video[1],
            'image' => $video[2],
            'text' => $video[3]
            );
        } 
    }
    return $videos;
}

//youtube('chikichiki');

Se puede hacer mas compleja, pero tal como esta cumple su función perfectamente. Si necesitas hacer una busqueda dentro de las categorias puedes añadir en url el parametro search_category.

Actualizado: DrSlump propone una expresión más eficiente :).


  • avatar

    DrSlump#1 hace 620 días

    Es curioso, yo también estoy en un proyecto que requiere parsear las páginas de proveedores de video :)

    Puedes reemplazar la expresión regular por esta otra que es mucho más eficiente al no necesitar apenas backtracking

    ```


  • avatar

    DrSlump#2 hace 620 días

    Oops, los ``` no parecen funcionar :s A ver ahora:


  • avatar

    DrSlump#3 hace 620 días

    Último intento lo prometo:

    &lt;a\s+href="/watch\?v=([^"&]+)"[^&lt;]+&lt;img\s+src="([^"]*)"\s+class="vimg120"\s+title="([^"]*)

  • avatar

    Abraham Estrada#4 hace 620 días

    Esta chido, me recuerda los tiempos que trabaja en Iusacell y me dedicaba a crear sitios "moviles" de paginas de noticias y tenia que parsear la pagina cuando no tenian rss y hacer una version de la pagina para celulares.


  • avatar

    IceBeat#5 hace 620 días

    Jejeje @DrSlump si es que no hay dos sin tres :).

    Muchas gracias por la expresión ahora mismo la actualizo.

    @Abraham Estrada si buscas bien aun quedan paginas que no tienen RSS jeje.


  • avatar

    imzyos#6 hace 620 días

    Exelente dani, y sí, es muy freki XD


  • avatar

    IceBeat#7 hace 619 días

    @imzyos jeje un poco si, pero sino es que me oxido y si pierdes como se hacían las expresiones las has cagado


  • avatar

    GetField#8 hace 619 días

    cool thx


  • avatar

    IceBeat#9 hace 619 días


  • avatar

    ToRDeN#10 hace 618 días

    Genial :D

    Muy útil y extrapolable ^^

    P.D: Geniales aportes en general (de tu blog) :)


  • avatar

    IceBeat#11 hace 618 días

    @ToRDeN muchas gracias :)


  • avatar

    Omega#12 hace 618 días

    Muy bueno :P

    Lo malo es que solo pilla los de la 1º pagina de resultado.


  • avatar

    IceBeat#13 hace 617 días

    @Omega como dije en el post puedes hacerla mas compleja, incluso lo suyo seria hacer una clase o algo, pero ya para eso esta la API que proporcionan.

    Aunque bueno puedo resolverte eso diciendo que si añades &page=2 a $url puedes devolver los resultados de la segunda pagina.


  • avatar

    Ghyoom.Com#14 hace 612 días

    Thank You !!


  • avatar

    karolain#15 hace 201 días

    ola mi chiko me gusta la pichula i el choro mi chiko el ke me kiere chupar el piko me llama a este numero mi chiko 791115 ia los esperos chikos i chikos me llaman iaaa osino a este numero mi chiko 236156 osino al 382126 ia los esperos


  • avatar

    josephulrich#16 hace 110 días

    Opino lo mismo de Omega: " Lo malo es que solo pilla los de la 1º pagina de resultado." En todo caso Graxias !!!!


  • avatar

    Luis#17 hace 88 días

    oye y como llamo a la funcion por que trato y nada dime un ejemplito si no es mucho pedir