Autor
|
Tema: Problemas con cURL (Leído 2,986 veces)
|
#Aitor
Desconectado
Mensajes: 173
|
Buenas... estaba siguiendo unos 'cursos' si así se pueden llamar de cURL, en el cual uno de los ejercicios, era extraer los subscriptores que tenía un canal de youtube... El problema está, en que, por alguna razón no puedo extraer nada, porque no guarda nada, o al menos el array se encuentra completamente vacio... <?php // Variable url. $url = 'http://www.youtube.com/user/'.$_POST['user'].'/about'; // Curl-bot. curl_setopt($ch, CURLOPT_USERAGENT , 'Mozilla/4.0 (compatible; MSTE 5.01; Windows NT 5.0'); // Guardar en página. echo $error; // Parsear. preg_match_all('(<ul class="about-stats"><li class="about-stat"><span class="about-stat-value">(.*)</span> suscriptores</li>)', $result, $sus); $susR = $sus[1][0]; echo 'Suscriptores: ' . $susR; ?>
Formulario.html <html> <head><title>Prueba con bots</title></head> <body> <form method="POST" action="bots.php"> <input type="text" name="user"/> <input type="Submit" value="INTRODUCIR USUARIO DE YOUTUBE"/> </form> </body> </html>
Resultado: Notice: Undefined offset: 1 in C:\xampp1\htdocs\PHP\Bots\bots.php on line 25 Array ( [0] => Array ( ) [1] => Array ( ) ) Suscriptores:
|
|
« Última modificación: 9 Enero 2014, 01:50 am por #Aitor »
|
En línea
|
Mi algoritmo en PHP (estupideces y más).while($Se_feliz){ Piensa_un_OBJETIVO(); // Sin excusas! if($Tienes_un_objetivo){ Suspira(); // Sé paciente. if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return; //RETURN; ¿O volvemos a empezar? }else{ Inténtalo_de_nuevo(); } } }
|
|
|
#Aitor
Desconectado
Mensajes: 173
|
Ya está solucionado, pero no termino de entender por qué, con esto si funciona: preg_match_all("(<span class=\"about-stat-value\">(.*)</span> suscriptores)", $result, $sus);
Pero con el otro no, cuando es el mismo código pero un poquito más largo, de hecho como este había uno identico, por lo que pensé que tendría que coger más trozo para que no se equivocase... Si alguien pudiese aclararme eso, se lo agradezco, saludos!
|
|
« Última modificación: 9 Enero 2014, 01:56 am por #Aitor »
|
En línea
|
Mi algoritmo en PHP (estupideces y más).while($Se_feliz){ Piensa_un_OBJETIVO(); // Sin excusas! if($Tienes_un_objetivo){ Suspira(); // Sé paciente. if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return; //RETURN; ¿O volvemos a empezar? }else{ Inténtalo_de_nuevo(); } } }
|
|
|
Shell Root
|
Supongo, aunque no estoy seguro, que es porque tiene un salto de linea, es decir,... es diferente ver esto: <span class="about-stat-value">88 </span> suscriptores
a esto: <li class="about-stat"><span class="about-stat-value">88 </span> suscriptores </li>
Ahora para que se entienda lo que quiero decir, realizamos un preg_replace para que elimine todos los saltos de linea, así: $result = preg_replace("/\r\n+|\r+|\n+|\t+/i", " ", $result);
Printeamos la variable de $result y vemos el código fuente queda en 1 sola linea, buscamos lo que nos interesa y vemos que quedo así: <li class="about-stat"> <span class="about-stat-value">88 </span> suscriptores </li>
Queriendo decir qué si ponemos esa string para que matchee en el preg_match_all, debería de darnos el resultado real: preg_match_all('(<li class="about-stat"> <span class="about-stat-value">(.*)</span> suscriptores </li>)', $result, $sus);
De momento sólo se me ocurre agregarle el salto de linea para evitar el preg_replace, quedando: -no me la llevo muy bien con las expresiones regulares, así que sale medio feo-preg_match_all('(<li class="about-stat">([\n*])<span class="about-stat-value">(.*)</span> suscriptores)', $result, $sus);
|
|
« Última modificación: 9 Enero 2014, 07:10 am por @shellroot »
|
En línea
|
Te vendería mi talento por poder dormir tranquilo.
|
|
|
#Aitor
Desconectado
Mensajes: 173
|
Supongo, aunque no estoy seguro, que es porque tiene un salto de linea, es decir,... es diferente ver esto: <span class="about-stat-value">88 </span> suscriptores
a esto: <li class="about-stat"><span class="about-stat-value">88 </span> suscriptores </li>
Ahora para que se entienda lo que quiero decir, realizamos un preg_replace para que elimine todos los saltos de linea, así: $result = preg_replace("/\r\n+|\r+|\n+|\t+/i", " ", $result);
Printeamos la variable de $result y vemos el código fuente queda en 1 sola linea, buscamos lo que nos interesa y vemos que quedo así: <li class="about-stat"> <span class="about-stat-value">88 </span> suscriptores </li>
Queriendo decir qué si ponemos esa string para que matchee en el preg_match_all, debería de darnos el resultado real: preg_match_all('(<li class="about-stat"> <span class="about-stat-value">(.*)</span> suscriptores </li>)', $result, $sus);
De momento sólo se me ocurre agregarle el salto de linea para evitar el preg_replace, quedando: -no me la llevo muy bien con las expresiones regulares, así que sale medio feo-preg_match_all('(<li class="about-stat">([\n*])<span class="about-stat-value">(.*)</span> suscriptores)', $result, $sus);
Curioso cuanto menos, esa forma de conseguir el código en una linea sin problemas. Muchísimas gracias por la ayuda, funciona perfectamente. Un saludo!
|
|
|
En línea
|
Mi algoritmo en PHP (estupideces y más).while($Se_feliz){ Piensa_un_OBJETIVO(); // Sin excusas! if($Tienes_un_objetivo){ Suspira(); // Sé paciente. if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return; //RETURN; ¿O volvemos a empezar? }else{ Inténtalo_de_nuevo(); } } }
|
|
|
EFEX
Desconectado
Mensajes: 1.171
"Dinero Facil"
|
Tambien con php se puede obtener, crear, modificar elementos DOM. Como por ejemplo la clase DOMDocument, pero no soporta atributos de tipo 'class=nombreClase' en vez tenes que utilizar DOMXPath para buscar cada clase y retornar la deseada, creo. Pero por suerte existe otra clase Simple HTML DOM Parser, hasta utiliza selectores tal como jquery, muy util. include_once('simple_html_dom.php'); //incluimos la clase $result = '<li class="about-stat"><span class="about-stat-value">6</span>Subscribers</li>'; $html = str_get_html($result); //Crear elementos DOM a partir de un string tambien puede ser desde un sitio pero con file_get_html($html) $found = $html->find('.about-stat-value', 0)->plaintext; //Buscamos el primer elemento con el atribudo class=about-stat-value y obtenemos su contenido echo 'Suscriptores: ' . $found ;
http://simplehtmldom.sourceforge.net/http://simplehtmldom.sourceforge.net/manual.htm
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problemas con cURL y páginas con redirección
PHP
|
Casidiablo
|
3
|
4,088
|
22 Agosto 2007, 01:09 am
por дٳŦ٭
|
|
|
CURL
PHP
|
OssoH
|
2
|
3,854
|
12 Enero 2011, 09:11 am
por OssoH
|
|
|
Problemas al instalar PHP5-curl
GNU/Linux
|
sexto
|
3
|
6,901
|
30 Julio 2012, 10:03 am
por sexto
|
|
|
Problemas para cargar pagina mediante curl
PHP
|
gio.garciap
|
1
|
3,605
|
6 Octubre 2012, 01:31 am
por #!drvy
|
|
|
cURL para HTTPS problemas con SSL
PHP
|
#Aitor
|
2
|
4,556
|
9 Enero 2014, 21:16 pm
por #Aitor
|
|