Foros del Web » Programando para Internet » PHP »

funcion no funciona cuando le paso el argumento

Estas en el tema de funcion no funciona cuando le paso el argumento en el foro de PHP en Foros del Web. Hola a todos. Estamos en un trabajo de la carrera en la que tenemos que hacer web scrapping de una web e integrarlo con otras ...
  #1 (permalink)  
Antiguo 02/09/2018, 22:49
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 270
Antigüedad: 9 años, 2 meses
Puntos: 10
funcion no funciona cuando le paso el argumento

Hola a todos.
Estamos en un trabajo de la carrera en la que tenemos que hacer web scrapping de una web e integrarlo con otras fuentes de información y os escribo porque ye llevo 2 días intentando solucionar un problema que no consigo encontrar la solución.


Tengo una función que me devuelve un array de links.
Y otra función que como argumento recibo un array de urls y por cada url me obtiene datos de cada una de las url del array.
El código es el siguiente:
Función 1:
Código PHP:
function get_urls_l1($keyword)
    {

        
$url $this->create_search_url_l1($keyword);
        
$doc = new DOMDocument();
        
$doc->loadHTML(file_get_contents($url));

        
$div_results = new DOMXPath($doc);

        
$elements $div_results->query("/html/body/main/section/div/div[1]/div[2]");
        
$l1_links = array();
        
$i 0;
        foreach (
$elements as $element) {
            
$enlaces $element->getElementsByTagName("a");
            foreach (
$enlaces as $enlace) {
                
$l1_links[$i] = $enlace->getAttribute("href") . "<br>";
                
$i++;
            }
        }

        return 
$l1_links;
    } 
Esta primera funcion me devuelve correctamente un array con varias urls. Si hago un vardump de esta funcion se muestra que el array contiene 4, 5 o n elementos de tipo string y cada elemento contiene una url válida.

Función 2:
Código PHP:
function get_info($urls){

        
$films = array(array());

        foreach (
$urls as $url){
            
            
$films_mw $this->get_film_info_from_sinlge_url($url);

            for (
$i=0$i<=count($films_gt); $i++){
                
array_push($films$films_mw[$i]);
            }
        }

        return 
$films;
    }

Esta segunda función recibe un array de URLS y debería devolver el array con la informacion de las peliculas. Pero da error.
Pero lo curioso es que si yo dentro del foreach le pongo la url manualmente (copiada de un elemento del vardump anterior) funciona correctamente! es decir, si yo pongo la funcion para comprobar asi:

Código PHP:
function get_info($urls){

        
$films = array(array());

        foreach (
$urls as $url){
            
$url "https://movieweb.com/movie/the-predator/";
            
$films_mw $this->get_film_info_from_sinlge_url($url);

            for (
$i=0$i<=count($films_gt); $i++){
                
array_push($films$films_mw[$i]);
            }
        }

        return 
$films;
    }


Entonces si funciona todo.....

Alguien sabría decirme porque?

Un saludo y gracias de antenmano
__________________
Tecnología y tutoriales
  #2 (permalink)  
Antiguo 03/09/2018, 05:14
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.959
Antigüedad: 5 años, 3 meses
Puntos: 372
Respuesta: funcion no funciona cuando le paso el argumento

bueno con lo que dices puedo suponer que no estas leyendo correctamente el arreglo, pero sin mas info es como estar adivinando, por otro lado no colocas el error asi que esta complicado suponer que puede estar pasando.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 09/09/2018, 15:32
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 270
Antigüedad: 9 años, 2 meses
Puntos: 10
Respuesta: funcion no funciona cuando le paso el argumento

Cita:
Iniciado por hhs Ver Mensaje
bueno con lo que dices puedo suponer que no estas leyendo correctamente el arreglo, pero sin mas info es como estar adivinando, por otro lado no colocas el error asi que esta complicado suponer que puede estar pasando.
Ok. Gracias por responder. He intentado ver el error que me da php con
Código PHP:
ini_set('error_reporting'E_ALL); 
Pero no me lanza ningun error. Como puedo ver los errores?
__________________
Tecnología y tutoriales
  #4 (permalink)  
Antiguo 09/09/2018, 17:43
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.959
Antigüedad: 5 años, 3 meses
Puntos: 372
Respuesta: funcion no funciona cuando le paso el argumento

Agrega esto al inicio de tu script
Código PHP:
Ver original
  1. ini_set('display_errors', 'On');
Por otro lado esta parte creo que no esta funcionando como esperas
Código PHP:
Ver original
  1. $films = array(array());
Por otro lado no veo de donde sale la variable: $films_gt
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 10/09/2018, 14:19
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 270
Antigüedad: 9 años, 2 meses
Puntos: 10
Respuesta: funcion no funciona cuando le paso el argumento

Bueno, ya he descubierto el error... era simplemente que el array $l1_links que tenia que ser un array de urls, se insertaba al final de cada elemento del array un salto de linea como se ve en el código:
Código PHP:
foreach ($enlaces as $enlace) { 
                
$l1_links[$i] = $enlace->getAttribute("href") . "<br>"
                
$i++; 
            } 
por lo que al pasarla a la otra funcion, no leia bien el array como una url.

Gracias Por la ayuda!
__________________
Tecnología y tutoriales



La zona horaria es GMT -6. Ahora son las 11:53.