PHP, Curl y facebook

Iniciado por Zoik, 4 Marzo 2015, 20:34 PM

0 Miembros y 1 Visitante están viendo este tema.

Zoik

Buenas gente, cuanto tiempo

bien estoy practicando crawling y scraping en php, y estoy mirando a ver si se puede leer el código de una página cualquiera de facebook, para mi sorpresa cuando leo la url con curl, este no me devuelve nada.

Imagino que es debido a que facebook ya tiene contramedidas contra bots, pero me gustaría saber si hay alguna manera de hacerlo sin utilizar la propia api de facebook.

Un saludo y gracias de antemano.

engel lex

si no muestras como lo haces, es dificil saber... capaz eres tu el que se equivoca...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Zoik

Código (php) [Seleccionar]
<?php
function 
curl($url)
{
$options = Array(
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_AUTOREFERER => TRUE,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
CURLOPT_USERAGENT => "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1a2pre) Gecko/2008073000 Shredder/3.0a2pre ThunderBrowse/3.2.1.8",
CURLOPT_URL => $url,
);

$ch curl_init();
curl_setopt_array($ch$options);
$data curl_exec($ch);
curl_close($ch);
return $data;
}
echo curl("www.facebook.com");
?>


Un saludo.

engel lex

si... el error es tuyo... tu crees que los navegadores no usan curl o metodos similares? como podría FB saber la diferencia?

cambia
Código (php) [Seleccionar]
$data = curl_exec($ch);
por
Código (php) [Seleccionar]
$data = curl_error($ch);

para que veas el error...

el error es sobre el certificado local para la conexión https... bueno... busca sobre el error y verás de que va y por qué... si no te importa el certificado (ni que le hagan un MItM a tu bot)  a las opciones agregale estas 2 lineas

Código (php) [Seleccionar]
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false


lo que siempre digo... hay que aprender a leer los errores... hay que ver siempre si la librería retorna errores o no
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MinusFour

Yo creo que necesitas ejecutar curl antes de poder revisar el error, tecnicamente el error deberia aparecer justo despues de usar curl_exec entonces...

Código (php) [Seleccionar]

$data = curl_exec($ch);
if($data === false){
 $error = curl_error($ch);
}


Es muy probable que no tengas instalado los certificados necesarios. Si usas PHP 5.3.7 en adelante hay una directiva que puedes usar en tu php.ini:

Código (ini) [Seleccionar]

curl.cainfo = /etc/certificados.crt


de lo contrario creo que vas a tener que agregar:

Código (php) [Seleccionar]

CURLOPT_CAINFO => '/etc/certificados.crt'


A tu arreglo de opcioens.

Te puedes bajar un ca-bundle de mozilla o usar los de tu sistema (depende de tu SO). Si quieres usar los de mozilla, puedes bajarte el .crt de aqui:

https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt

El archivo lo tienes que guardar donde tu quieras, pero tiene que tener permisos de lectura y el path debe verse reflejado en la configuracion (en mi ejemplo use /etc/certificados.crt). La otra opcion es simplemente olvidarse de los certificados y usar lo que engel lex te ha dicho.

Tambien puede ser que tu problema no tenga nada que ver con esto... pero no has puesto el error asi que esto es solo una conjetura.

dimitrix

Para Facebook eso usa mejor "Casper".

Igualmente.... si quieres hacerlo profesionalmente, hay unas cositas llamadas "API".

Mi consejo: Si de verdad quieres practicar, empieza por este foro y no por FB.




Zoik

Muchas gracias por responder tan rápido cuando llegue a casa lo probaré todo y ya comento.

Un saludo.

EFEX

Cita de: dimitrix en  5 Marzo 2015, 06:11 AM
Igualmente.... si quieres hacerlo profesionalmente, hay unas cositas llamadas "API".

Se pero tengo que registrarme, registrar mi app, descargar sdk, que facebook me siga..
GITHUB