Foros del Web » Programando para Internet » PHP »

Problema con curl para jalar multiples titulares

Estas en el tema de Problema con curl para jalar multiples titulares en el foro de PHP en Foros del Web. Hola amigos deseo que me den una manito para crear un bucle que mueva el punto a todas las noticias con sus intros desde globedia ...
  #1 (permalink)  
Antiguo 20/07/2012, 22:38
Avatar de kernelcom-com  
Fecha de Ingreso: mayo-2008
Ubicación: Lima
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 3
Pregunta Problema con curl para jalar multiples titulares

Hola amigos deseo que me den una manito para crear un bucle que mueva el punto a todas las noticias con sus intros desde globedia
muestro el codigo
Código PHP:
<?
function jala_seccion($seccion) {
        
        
$default 'Vacio no hay nada';

        if (!
is_string($ip) || strlen($ip) < || $ip == '127.0.0.1' || $ip == 'localhost')
            
$ip '8.8.8.8';

        
$curlopt_useragent 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)';
        
        
$url 'http://pe.globedia.com/categoria/'.$seccion.'/';
        
$ch curl_init();
        
        
$curl_opt = array(
            
CURLOPT_FOLLOWLOCATION  => 1,
            
CURLOPT_HEADER      => 0,
            
CURLOPT_RETURNTRANSFER  => 1,
            
CURLOPT_USERAGENT   => $curlopt_useragent,
            
CURLOPT_URL       => $url,
            
CURLOPT_TIMEOUT         => 1,
            
CURLOPT_REFERER         => 'http://' $_SERVER['HTTP_HOST'],
        );
        
        
curl_setopt_array($ch$curl_opt);
        
        
$content curl_exec($ch);
        
        if (!
is_null($curl_info)) {
            
$curl_info curl_getinfo($ch);
        }
        
        
curl_close($ch);
        
        if ( 
preg_match('{<span class="txtN">([^<]*)</span>}i'$content$regs) )  {
            
$titular $regs[1];
        }
        if ( 
preg_match('{<div class="intro"><span class="txtN">([^<]*)</span></div>}i'$content$regs) )  {
            
$intro $regs[1];
        }

        if( 
$titular!='' && $intro!='' ){
          
//$location = $city . ', ' . $state;
          
$tit $titular;
          
$int $intro;
          
//return $location;
          
return $tit.': '.$int;
        }else{
          return 
$default
        }
        
    }

echo 
jala_seccion('deportes');
    
?>
JAla el primer titular y el primero intro de dich titular, deseo poder hacer un bucle con lo que tengo para que me jale todas las noticias mostradas en esa seccion, espero me hayan podido entender gracias amigos.
__________________
Las ideas estimulan la mente.(Eric Hoffer)
http://www.reycarlos.com
http://www.clasificadosde.com
  #2 (permalink)  
Antiguo 20/07/2012, 22:53
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema con curl para jalar multiples titulares

En vez de usar preg_match debes usar preg_match_all, el cual retorna todas las coincidencias...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 20/07/2012, 23:05
Avatar de kernelcom-com  
Fecha de Ingreso: mayo-2008
Ubicación: Lima
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Problema con curl para jalar multiples titulares

Gracias amigo, pero como quedaría el bucle o las coincendias, agradezco tu tu tiempo saludos.
__________________
Las ideas estimulan la mente.(Eric Hoffer)
http://www.reycarlos.com
http://www.clasificadosde.com
  #4 (permalink)  
Antiguo 20/07/2012, 23:12
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Problema con curl para jalar multiples titulares

o.O si no sabes como trabaja una función checa en el manual...

Código PHP:
Ver original
  1. preg_match_all($reglaER, $contenido,$resultados);
  2.  
  3. foreach($resultados as $item) {
  4.      echo $item;
  5. }

es casi igual que preg_match
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 20/07/2012, 23:32
Avatar de kernelcom-com  
Fecha de Ingreso: mayo-2008
Ubicación: Lima
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Problema con curl para jalar multiples titulares

perfecto amigo, muestra todas las coincidecias si muestro el array con print_r($registros);

Pero aplico el foreach me muestro esto: ArrayArray

a que se debe, gracias nuevamente
__________________
Las ideas estimulan la mente.(Eric Hoffer)
http://www.reycarlos.com
http://www.clasificadosde.com
  #6 (permalink)  
Antiguo 20/07/2012, 23:37
Avatar de kernelcom-com  
Fecha de Ingreso: mayo-2008
Ubicación: Lima
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Problema con curl para jalar multiples titulares

Ya lo solucione era coger esto:


Código PHP:
preg_match_all('{<div class="intro"><span class="txtN">([^<]*)</span></div>}i'$content$resultados) ;
            
            
$resu$resultados[1];
            
            foreach(
$resu as $item) {
             
//echo $item;
             
print_r($item);
            } 

Gracias por tu apoyo, era coger el segundo indice.
Saludos
__________________
Las ideas estimulan la mente.(Eric Hoffer)
http://www.reycarlos.com
http://www.clasificadosde.com
  #7 (permalink)  
Antiguo 21/07/2012, 14:56
Avatar de kernelcom-com  
Fecha de Ingreso: mayo-2008
Ubicación: Lima
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Problema con curl para jalar multiples titulares

gracias nuevamente, encontre un detalle más:

Aqui jalo el titular pero deseo jalar el titular seguido del intro, considerando que el intro tambien tiene su foreach como insertaría ambos campos en un solo foreash
Código PHP:
preg_match_all('{<h2><[^>]+>(.*)</[^>]+></h2>}i'$content$retitulo) ;
            
            
$titu$retitulo[1];
            
            foreach(
$titu as $titem) {
             echo 
'-->'.$titem.'<br>';
             
//print_r($item);
            
}




        
preg_match_all('{<div class="intro"><span class="txtN">([^<]*)</span></div>}i'$content$resultados) ;
            
            
$resu$resultados[1];
            
            foreach(
$resu as $item) {
             echo 
'->'.$item.'<br>';
             
//print_r($item);
            



Deseo que quede del siguiente modo:
titular de la noticia: Intro de la noticia y detalles jalados desde el foreach

Gracias amigos.
__________________
Las ideas estimulan la mente.(Eric Hoffer)
http://www.reycarlos.com
http://www.clasificadosde.com
  #8 (permalink)  
Antiguo 21/07/2012, 15:15
Avatar de kernelcom-com  
Fecha de Ingreso: mayo-2008
Ubicación: Lima
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Problema con curl para jalar multiples titulares

y mismo me contesto;

Código PHP:
preg_match_all('{<h2><[^>]+>(.*)</[^>]+></h2>}i'$content$titular) ;
            
preg_match_all('{<div class="intro"><span class="txtN">([^<]*)</span></div>}i'$content$intro) ;
            
            
$titu$titular[1];
            
$intr$intro[1];
            
            foreach (
array_combine($titu$intr) as $titulo => $introito)

            {
             echo 
'<b>'.$titulo.'</b>:'.$introito.'<br>';
             
                 
/*foreach($intr as $item) 
                {
                 echo '->'.$item.'<br>';
             
                }*/
             
            

Saludos, combinar los arrays
__________________
Las ideas estimulan la mente.(Eric Hoffer)
http://www.reycarlos.com
http://www.clasificadosde.com
  #9 (permalink)  
Antiguo 21/07/2012, 18:33
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con curl para jalar multiples titulares

El problema no es de cURL, sino la forma como manejas la información con expresiones regulares. Prefiero usar la clases DOM para esto:

Código PHP:
Ver original
  1. <?php
  2. $doc = new DOMDocument();
  3. $doc->loadHTML(file_get_contents('http://pe.globedia.com/categoria/deportes/'));
  4. $xpath = new DOMXPath($doc);
  5. $data = $xpath->query('//div[@class="noticia_portada clearfix"]');
  6.  
  7. foreach ($data as $n) {
  8.     echo "Titular: {$n->getElementsByTagName('span')->item(0)->nodeValue}<br />";
  9.     echo "Intro: {$n->getElementsByTagName('span')->item(1)->nodeValue}<hr />";
  10. }

Mucho más sencillo, las expresiones regulares no son lo mejor para estos casos.

http://php.net/manual/es/book.dom.php

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #10 (permalink)  
Antiguo 21/07/2012, 19:55
Avatar de kernelcom-com  
Fecha de Ingreso: mayo-2008
Ubicación: Lima
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Problema con curl para jalar multiples titulares

Perfecto me funciona, voy arreglar los acentos con htmlentities y bueno cualquier otra funcion.

La idea es que tambíen deseo capturar el url original de cada artículo a sí como la cantidad total de artículos como se muestra abajo, la pagina actual y desde donde empieza por ejemplo la página 2 empieza desde el registro 11 hasta el 20 y así sucecivamente, que variable necesito agregar para que me captura los datos, gracias nuevamente.

__________________
Las ideas estimulan la mente.(Eric Hoffer)
http://www.reycarlos.com
http://www.clasificadosde.com

Etiquetas: curl, jalar, multiples, titulares
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:23.