Ver Mensaje Individual
  #8 (permalink)  
Antiguo 08/01/2003, 23:44
Sandungas
 
Fecha de Ingreso: diciembre-2002
Mensajes: 23
Antigüedad: 21 años, 4 meses
Puntos: 0
Lo tengo casi!!!

Bueno chicos, tras unas cuantas horas y unas búsquedas en google he conseguigo montar este código q funciona.

<?php
if (getenv('REQUEST_METHOD') == 'POST') {
$url = $_POST[url];
} else {
$url = $_GET[url];
}
?>

<form action="<?= $PHP_SELF ?>" method="POST">
URL:<input type="text" name="url" value="<?= $url ?>"/>
<input type="submit">
</form>

<?php
$reciproco = "http://loquesea.com";
// Función para comprobar si existe un determinado texto (enlace) en una url
function recip($surl,$reciproco){
$fd = fopen ("$surl", "r");
while (!feof ($fd))
{
$buffer = fgets($fd, 4096);
if (strstr($buffer,$reciproco))
return true;
}
fclose ($fd);
}

//Borramos de un array los elementos que tengan reciproco
function borrar(&$ahrefs,&$alinks,$reciproco){
$x=0;
while($x<sizeof($ahrefs))
{
if (recip($ahrefs[$x],$reciproco) == false){
array_splice($ahrefs,$x,1);
array_splice($alinks,$x,1);}
else
$x++;
}
}

// Separamos el código html (hrefs y links)
if ($url) {
$remote = fopen($url, 'r');
$data = fread($remote, 1048576);
fclose($remote); }

unset($location);
$links = array(); // Array con la descripción de los links
$hrefs = array(); // Array de urls
$pos = 0;
while (!(($pos = strpos($data,"<",$pos)) === false)) {
$pos++;
$endpos = strpos($data,">",$pos);
$tag = substr($data,$pos,$endpos-$pos);
$tag = trim($tag);
if (isset($location)) { // Buscamos </A>
if (!strcasecmp(strtok($tag," "),"/A")) {
$link = substr($data,$linkpos,$pos-1-$linkpos);
$links[] = $link;
$hrefs[] = $location;
unset($location);
}
$pos = $endpos+1;
} else { // Buscamos <A ...>
if (!strcasecmp(strtok($tag," "),"A")) {
if (eregi("HREF[ \t\n\r\v]*=[ \t\n\r\v]*\"([^\"]*)\"",$tag,$regs));
else if (eregi("HREF[ \t\n\r\v]*=[ \t\n\r\v]*([^ \t\n\r\v]*)",$tag,$regs));
else $regs[1] = "";
if ($regs[1]) {
$location = $regs[1];
}
$pos = $endpos+1;
$linkpos = $pos;
} else {
$pos = $endpos+1;
}
}
}
borrar($hrefs,$links,$reciproco);

for ($i=0; $i<sizeof($links); $i++) {
echo "<A HREF=\"".$hrefs[$i]."\">".$links[$i]."</A><BR>\n";
}
?>


Le paso una url con una lista de enlaces y me devuelve una lista con los q tienen el recíproco. Mi problema ahora es q no puedo manejar grandes listas. Si le paso una con más de 30-35 se cuelga. ¿Alguien sabe cómo puedo optimizar el código para conseguir manejar más enlaces?

Gracias a todos por la ayuda!