PHP - recursividad con array's PHP

 
Vista:

recursividad con array's PHP

Publicado por In0cybe (5 intervenciones) el 20/02/2020 12:28:36
Tengo una funcion (listarUrls()) que me devuelve/escanea todos las url's que encuentra en una página web. Necesito que por cada una de las url que la función me devuelve, vuelva a listar/escanear todas las url's de esa página. Y así tantas veces como pida el usuario, es decir:

.Si el usuario pide 1 iteración de la url www.a.com, el programa devuelve:
-$arry[0] www.1.com
-$arry[1] www.2.com
-..... así con todas las url's que encuentre en www.a.com
(este paso ya está hecho)

.Si el usuario pide 2 iteraciones de la url www.a.com, el programa devuelve:
-$arry[0] www.1.com
-$arry[0][0] www.1-1.com
-$arry[0][1] www.1-2.com
-...así con todas las url's que encuentre en www.1.com
-$arry[1] www.2.com
-$arry[1][0] www.2-1.com
-$arry[1][1] www.2-2.com
-...así con todas las url's que encuentre en www.2.com
-...lo mismo para el resto de casos

.Si el usuario pide 3 iteraciones de la url www.a.com, el programa devuelve:
-$arry[0] www.1.com
-$arry[0][0] www.1-1.com
-$arry[0][0][0] www.1-1-1.com
-$arry[0][0][1] www.1-1-2.com
-...así con todas las url's que encuentre en www.1-1.com
-$arry[0][1] www.1-2.com
-$arry[0][1][0] www.1-2-1.com
-$arry[0][1][1] www.1-2-2.com
-...así con todas las url's que encuentre en www.1-2.com
-$arry[1] www.2.com
-$arry[1][0] www.2-1.com
-$arry[1][0][0] www.2-1-1.com
-$arry[1][0][1] www.2-1-2.com
-...así con todas las url's que encuentre en www.2-1.com
-$arry[1][1] www.2-2.com
-$arry[1][1][0] www.2-2-1.com
-$arry[1][1][1] www.2-2-2.com
-...así con todas las url's que encuentre en www.2-2.com
-...lo mismo para el resto de casos

Alguien puede ayudarme con esto por favor?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

recursividad con array's PHP

Publicado por Julio (830 intervenciones) el 20/02/2020 12:39:13
Hola.

¿Puedes poner el código de tu función?

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

recursividad con array's PHP

Publicado por In0cybe (5 intervenciones) el 20/02/2020 12:49:19
Si, la funcion que devuelve las url de una web es esta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function listarUrls($url){
	$urlContent = file_get_contents($url);
 
    $dom = new DOMDocument();
    @$dom->loadHTML($urlContent);
    $xpath = new DOMXPath($dom);
    $hrefs = $xpath->evaluate("/html/body//a");
 
    $result = '';
    for($i = 0; $i < $hrefs->length; $i++){
        $href = $hrefs->item($i);
        $url = $href->getAttribute('href');
        $url = filter_var($url, FILTER_SANITIZE_URL);
 
        if(!filter_var($url, FILTER_VALIDATE_URL) === false){
        	$result .= $url."\n";
        }
    }
 
    return $result;
}

Esto me vale para recuperar todas las url de una web, pero ahora necesitaría recuperar todas las url de cada url que me devuelve la funcion y así una y otra vez según pida el usuario como indico en el array de la pregunta.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

recursividad con array's PHP

Publicado por Julio (830 intervenciones) el 20/02/2020 13:01:28
A ver, que me aclare bien lo que hace.

Si la URL que le indico es la de esta web, o sea, lawebdelprogramador.com, ¿qué obtienes en $result?

Y, segundo, ¿lo que quieres es que luego busque en lawebdelprogramador.com/foros y luego en lawebdelprogramador.com/cursos, luego en lawebdelprogramador.com/temas y así con todas las siguientes URLs?

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

recursividad con array's PHP

Publicado por In0cybe (5 intervenciones) el 20/02/2020 13:09:31
Si ejecutas esa función con la web lawebdelprogramador.com

devolveria todas las url que encuentra en esa web:

https://www.facebook.com/web.lwp
https://twitter.com/lwp_

Ahora si el usuario me dice que quiere 2 iteraciones, tendria que volver a escanear la web https://www.facebook.com/web.lwp y devolver todas sus url al igual que con la web https://twitter.com/lwp_.

Quedaría algo así:
lawebdelprogramador.com
web_que_encuentre-en_web_del_programador
webs_que_encuentre_en_las_webs_encontradas_en_la_web_del_programador

y si pide más iteraciones ir profundizando en cada web, tantas como iteraciones pida el usuario, es decir, montar una funcion recursiva que genere ese array dinamicamente.

Un ejemplo con 3 iteraciones sería:
--URL A
----URL A-1
------URL A-1-1
------URL A-1-2
----URL A-2
------URL A-2-1
------URL A-2-2
--URL B
....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

recursividad con array's PHP

Publicado por Julio (830 intervenciones) el 20/02/2020 13:18:36
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function listarUrls($url, $iteration = 0){
	$urlContent = file_get_contents($url);
 
    $dom = new DOMDocument();
    @$dom->loadHTML($urlContent);
    $xpath = new DOMXPath($dom);
    $hrefs = $xpath->evaluate("/html/body//a");
 
    $result = '';
    for($i = 0; $i < $hrefs->length; $i++){
        $href = $hrefs->item($i);
        $url = $href->getAttribute('href');
        $url = filter_var($url, FILTER_SANITIZE_URL);
 
        if(!filter_var($url, FILTER_VALIDATE_URL) === false){
        	$result .= $url."\n";
 
        	if ($iteration > 1) {
        		$result .= listarUrls($url, $iteration - 1);
        	}
        }
    }
 
    return $result;
}

Prueba esto, que no sé si te funcionará bien. Básicamente le dices cuántas iteraciones debe hacer y, cuando extrae una url, si tiene que hacer iteraciones vuelve a llamar a listarUrls pero con una iteración menos.

Pruébala y nos dices si funciona o no.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

recursividad con array's PHP

Publicado por In0cybe (5 intervenciones) el 20/02/2020 13:29:27
Eres un crack Julio!

Muchísimas gracias!!

Solo me queda formatearlo para imprimirlo en un array y que se vea bonito.

Muchas, muchas gracias !! :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

recursividad con array's PHP

Publicado por Julio (830 intervenciones) el 20/02/2020 13:31:41
De nada, me alegro que te haya ido bien. Era más fácil de hacer que de explicar, jajaja.

Si necesitas más ayuda ya lo comentas, o pásate y suscríbete por mi blog, que me ayudaría mucho, jeje.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar

recursividad con array's PHP

Publicado por In0cybe (5 intervenciones) el 20/02/2020 13:34:43
Me subscribo ahora mismo!
intento darle ok a tu respuesta en este foro.. pero tengo algún problemilla con el login. cuando puedo te puntuo.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

recursividad con array's PHP

Publicado por Julio (830 intervenciones) el 20/02/2020 13:39:51
¡Muchas gracias! Te lo agradezco.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar