Page 1 sur 1
intégrer une page web dans une autre
Publié : 24 mai 2007, 09:12
par _Alex
Bonjour,
je suis en train de créer un petit projet qu'on peut qualifier de net-art.
En voici le premier essai :
http://alexandreleray.com/_trucs/navigateur.php
Le principe :
visualiser uniquement les hyperliens d'une page, dont la taille serait proportionelle au pagerank google. Je vous laisse méditer à propos du principe de popularité... Ma question est comment inclure une page en http en n'intégrant que le contenu du <body> pour éviter les doublons de tags ?
Merci.
Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
Publié : 24 mai 2007, 19:24
par Benoit
Inclure en PHP ? Je pense qu'il va te falloir les ouvrir comme des fichiers, rechercher les balises <body> dedans et découper la chaîne correspondante.
Publié : 24 mai 2007, 20:13
par _Alex
peut tu m'en dire un peu plus sur "ouvrir comme un fichier" ? Dans ma tête j'imaginais stocker la page dans une variable puis exploerer les noeuds. Mais je ne sais pas comment faire...
Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
Publié : 24 mai 2007, 22:17
par Benoit
Oui je parlais bien de charger le contenu de la page dans une variable, mais en PHP ça se fait de la même façon que ce soit un fichier local ou une page Web distante, avec la fonction
fopen.
Je te déconseille tout à fait d'explorer les nœuds, parce que ça veut dire reconstruire tout l'arbre DOM et c'est très lent. Il suffit de traiter la page comme du texte et les fonctions de manipulation de chaînes.
En gros, tu pourrais utiliser
strpos pour trouver l'emplacement de "<body", puis le ">" suivant (au cas où il y a des attributs sur la balise). Même chose pour trouver "</body>".
Ensuite, tu utilises
substr sur la page complète avec les positions que tu as trouvées (plus ou moins 1) et tu fais un echo du résultat.
Publié : 26 mai 2007, 11:44
par _Alexous
Merci ! je risque de ne pas pouvoir essayer ça tout de suite mais je vous tiens au courant.
Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
Publié : 01 juin 2007, 23:50
par _Alex
Je cherche maintenant à connaître le pagerank des liens de la page scannée, et là ça se corse. J'ai trouvé cette page qui en parle :
http://www.zorgloob.com/2004/06/comment ... google.asp
et en suivant les lien de petits script qui permettent de récupérer le cheksum, mais en fait je n'arrive pas à récupérer le pagerank, google me donne un message d'erreur me disant que je n'ai pas la permission (mauvais cheksum). Quelqu'un aurait'il des infos la dessus ? Merci
Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
Publié : 03 juin 2007, 15:25
par _Alex
up
Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
Publié : 04 juin 2007, 02:53
par _Alex
Voilà, j'ai réussi à connaître le pagerank d'une page à l'aide de ce script :
http://www.phpcs.com/codes/GOOGLE-PAGER ... 40649.aspx
J'aimerais désormais pouvoir rechercher tous les liens d'une page et leur donner une taille en fonction du pagerank par exemple
et le transformer en :
Code : Tout sélectionner
<a href="http://www.google.fr/" style="font-size:36px">lien vers google</a>
si on considère que le pagerank de google.fr qui est de 9 correspond à 4*9 = 36 (c'est arbitraire)
Je suis déjà pas très fort en php, mais les expressions régulières... enfin bon ça m'amuse c'est déjà ça
Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
Publié : 04 juin 2007, 19:13
par _Alex
Je viens de voir qu'il existait des fonctions de navigation dans le dom en PHP. Un setattribute sur les liens pourrait t'il marcher, ou ne s'agit il que de fonctrions pour des documents xml ?
Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)
Publié : 05 juin 2007, 08:21
par Benoit
Ce sont des fonctions pour les documents XML, ce que ton document HTML n'est à peu près certainement pas. Je pense que tu vas plutôt devoir utiliser les expressions rationnelles (PCRE).
Publié : 05 juin 2007, 11:25
par _Alex
Réussirais-tu à trouver le fameux motif ? Même si je comprends le principe, j'en suis incapable.
sinon pour l'histoire du dom j'ai fait ça hier :
Code : Tout sélectionner
<?php
class GooglePR
{
function ZeroFill($a, $b)
{
$z = hexdec(80000000);
if ($z & $a)
{
$a = ($a>>1);
$a &= (~$z);
$a |= 0x40000000;
$a = ($a>>($b-1));
}
else
{
$a = ($a>>$b);
}
return $a;
}
function mix($a,$b,$c)
{
$a -= $b; $a -= $c; $a ^= ($this->ZeroFill($c,13));
$b -= $c; $b -= $a; $b ^= ($a<<8);
$c -= $a; $c -= $b; $c ^= ($this->ZeroFill($b,13));
$a -= $b; $a -= $c; $a ^= ($this->ZeroFill($c,12));
$b -= $c; $b -= $a; $b ^= ($a<<16);
$c -= $a; $c -= $b; $c ^= ($this->ZeroFill($b,5));
$a -= $b; $a -= $c; $a ^= ($this->ZeroFill($c,3));
$b -= $c; $b -= $a; $b ^= ($a<<10);
$c -= $a; $c -= $b; $c ^= ($this->ZeroFill($b,15));
return array($a,$b,$c);
}
function CheckSum($url)
{
$a = $b = 0x9E3779B9;
$c = 0xE6359A60; // Init
$k = 0;
$length = sizeof($url);
$len = $length;
while($len >= 12)
{
$a += ($url[$k+0]+($url[$k+1]<<8)+($url[$k+2]<<16)+($url[$k+3]<<24));
$b += ($url[$k+4]+($url[$k+5]<<8)+($url[$k+6]<<16)+($url[$k+7]<<24));
$c += ($url[$k+8]+($url[$k+9]<<8)+($url[$k+10]<<16)+($url[$k+11]<<24));
$mix = $this->mix($a,$b,$c);
$a = $mix[0];
$b = $mix[1];
$c = $mix[2];
$k += 12;
$len -= 12;
}
$c += $length;
switch($len)
{
case 11: $c+=($url[$k+10]<<24);
case 10: $c+=($url[$k+9]<<16);
case 9 : $c+=($url[$k+8]<<8);
case 8 : $b+=($url[$k+7]<<24);
case 7 : $b+=($url[$k+6]<<16);
case 6 : $b+=($url[$k+5]<<8);
case 5 : $b+=($url[$k+4]);
case 4 : $a+=($url[$k+3]<<24);
case 3 : $a+=($url[$k+2]<<16);
case 2 : $a+=($url[$k+1]<<8);
case 1 : $a+=($url[$k+0]);
}
$mix = $this->mix($a,$b,$c);
return '6'.$mix[2];
}
function strord($string)
{
$length = strlen($string);
$i = 0;
$result = array();
while( $i < $length )
{
$result[$i] = ord($string{$i});
$i++;
}
return $result;
}
function PageRank($url)
{
$checksum = $this->CheckSum($this->strord('info:'.$url));
$file = file('http://www.google.com/search?client=navclient-auto&ch='.$checksum.'&ie=UTF-8&oe=UTF-8&features=Rank&q=info:'.urlencode($url));
$file = implode("", $file);
return substr($file,strrpos($file, ":")+1);
}
function BackLinks($url)
{
$checksum = $this->CheckSum($this->strord('link:'.$url));
$file = file('http://www.google.com/search?client=navclient-auto&ch='.$checksum.'&ie=UTF-8&oe=UTF-8&features=Matches&q=link:'.urlencode($url));
$file = implode("", $file);
return substr($file,strrpos($file, ":")+1);
}
}
$dom = new DOMDocument();
$dom->loadHTMLFile('liens.html');//une page très simple avec deux liens
$listeLiens = $dom->getElementsByTagName("a");
foreach($listeLiens as $lien) {
if ($lien->hasAttribute("href")) {
$url = $lien->getAttribute("href");
$PR = new GooglePR();
$lien->setAttribute("style", $PR->PageRank($url));//l'exemple est mauvais mais l'idée est de ressortir un truc du style 'font-size:pagerank"
}
}
echo $dom->saveHTML();
?>
Ca marche en théorie sauf que j'ai bidouillé deux morceaux de code : une qui ne passe qu'en php4 (la class GooglePR, pourtant certifiée php5) et l'autre qu'en php5 (la partie avec le dom). Mais même si j'y arrive pour cet exemple simple je doute pouvoir aller plus loin autrement que par regexp.
Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 (MultiLang)