intégrer une page web dans une autre

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
_Alex

intégrer une page web dans une autre

Message 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)
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
_Alex

Message 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)
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
_Alexous

Message 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)
_Alex

Message 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)
_Alex

Message 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)
_Alex

Message 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

Code : Tout sélectionner

<a href="http://www.google.fr/">lien vers google</a>
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)
_Alex

Message 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)
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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).
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
_Alex

Message 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)
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités