En esta ocasión, a partir de lo que nos devuelva dicha función, y mediante el objeto DOMDocument, recorreremos el contenido y buscaremos todos los enlaces que existan.
Lo primero que necesitaremos será la función con la que obtener el contenido de la URL:
function getUrlContent($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return ($httpcode>=200 && $httpcode<300) ? $data : false;
}
A continuación desarrollamos la función que recorre el contenido y guarda en un array las direcciones de todos los enlaces que se encuentre:
function getUrls($url){
// obtenemos el contenido de la url
$content = getUrlContent($url);
if ($content==false){
return false;
}
// creamos el array de resultados
$urls = array();
// creamos una instanacia a DOMDocument
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
// cargamos la pagina web desdecargada desde la función getUrlContent()
@$doc->loadHTML($content);
// buscamos todos los tags del tipo < a >
$links = $doc->getElementsByTagName("a");
// recorremos cada uno de los tags encontrados
foreach ($links as $link){
// obtenemos la parte href de la etiqueta
$href = $link->getAttribute("href");
if (strlen($href)>=4 && substr($href,0,4)=="http"){
// url entera
$urls[] = $href;
} else if (strlen($href)>0 && substr($href, 0, 1)=="/"){
// url empieza por / le añadimos el dominio por delante
$urls[] = $url.$href;
}else{
// arhivo
$urls[] = $url.'/'.$href;
}
}
// eliminamos duplicados
$urls = array_unique($urls);
// ordenamos alfabéticamente
sort($urls);
return $urls;
}
Una vez hecho esto ya solamente nos quedará la llamada a la función y el mostrar en pantalla el resultado:
// especificamos la url
$url = "http://softontherocks.blogspot.com.es";
// obtenemos las url
$urls = getUrls($url);
// mostramos los resultados
if ($urls==false){
echo "La página no es correcta, o es una redirección.";
} else {
echo nl2br(implode($urls, "\n"));
}