Mostrando entradas con la etiqueta curl php file_get_contents. Mostrar todas las entradas
Mostrando entradas con la etiqueta curl php file_get_contents. Mostrar todas las entradas

miércoles, 18 de junio de 2014

Obtener los videos de Youtube con PHP

Nos pasa que tenemos que mostrar los videos de un canal de Youtube y tener un script a la mano es lo mejor que nos puede pasar.

Para esto usaremos la funcion curl pero ligeramente modificada para nuestro propósito.
function curl_get_contents($url) {
    // Iniciamos la sesión curl
    $ch = curl_init();
    // seteamos la url
    curl_setopt($ch, CURLOPT_URL, $url);
    // Removemos las cabeceras de la salida
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // Retornamos la salida en lugar de mostrarla directamente
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 //seteamos el timeout
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);
    // ejecutamos la sesión curl
    $output = curl_exec($ch);
    // cerramos la sesión
    curl_close($ch);
    // Retornamos la salida como una variable
    return $output;
}

Luego usamos nuestra función asi:

$feed = curl_get_contents("http://gdata.youtube.com/feeds/api/users/nombredeusuarioaqui/uploads?orderby=updated");
$xml = new SimpleXmlElement($feed);
 
$count = count($xml->entry);
for ($i=0; $i < 10; $i++) { 
 $url = $xml->entry[$i]->link->attributes();
 $videourl = explode("&",$url['href']);
 $video = str_replace("http://www.youtube.com/watch?v=","",$videourl[0]);
 
 echo '

'.$xml->entry[$i]->title.'

'; echo '

Posteado el '.date('jS M Y h:i:s', strtotime($xml->entry[$i]->published)).'

'; echo '

'; echo '

'.$xml->entry[$i]->content.'

'; echo '

Ver en Youtube

';

Espero les sea de utilidad!

domingo, 23 de enero de 2011

file_get_contents vs curl

A más de uno os habrá pasado que su servidor emite un warning al usar file_get_contents("URL_EXTERNA"), y es que esta función interna de PHP, expone una vulnerabilidad a la seguridad de tu aplicación web, en PHP 5 no es posible cambiar el valor de esta a on en .htaccess, tendrías que tener acceso al php.ini del servidor.
La vulnerabilidad trabaja de la siguiente manera:
_ Al usar esta función para recuperar datos desde ubicaciones remotas como un servidor FTP o sitio web y no hacer el filtro apropiado al pasar los datos, dejas abierta tu aplicación a una muy posible inyección de código.

Recomendaciones

Usted debe desactivar allow_url_fopen en el archivo php.ini:

Deshabilitar allow_url_fopen por razones de seguridad
allow_url_fopen = 'off'

Esta configuración tambien debe ser deshabilitada en apache httpd.conf

# Deshabilitar allow_url_fopen por razones de seguridad
php_flag allow_url_fopen off php_flag allow_url_fopen off


Te quedan 2 cosas por hacer:
1) O habilitas file_get_contents en el servidor con su consiguiente vulnerabilidad.
2) O usas CURL o HTTP, para acceder a contenidos de URL externa.

Recomiendo usar CURL por estas razones:
1) Es un promedio de 39% más rapido como se ve aqui.

2) Es seguro por que viene integrado con metodos internos de seguridad.

Ahora que tal vez hayas decidido decidido usar CURL te preguntaras ¿como lo hago?, ¿qué es eso?:
Acerca de CURL puedes Googlear y encontrarás mucha info de él.
Ahora vamos a usarlo.

Primero tu servidor debe de tener el módulo CURL instalado, la mayoría de servidores Apache vienen con CURL activado, si usas IIS verifica que lo tengas instalado.

Luego usarlo en tu código de esta manera:
//Puedes usarlo en una clase Helper o en una función como en el ejemplo
 
function file_get_contents_curl($URL)
    {
        $c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $URL);
        $contents = curl_exec($c);
        curl_close($c);

        if ($contents) return $contents;
            else return FALSE;
    }

//Modo de uso:

$result=file_get_contents_curl("http://www.example.com");
if ($result === false)
{
    // treat error
} else {
    // handle good case
} 

Saludos.