Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/02/2011, 18h20   #1
Membre actif
 
Avatar de demenvil
 
Homme Ghislain Ott
En fomation
Inscription : avril 2009
Messages : 90
Détails du profil
Informations personnelles :
Nom : Homme Ghislain Ott
Âge : 22
Localisation : France

Informations professionnelles :
Activité : En fomation
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2009
Messages : 90
Points : 180
Points : 180
Envoyer un message via Skype™ à demenvil
Par défaut Récuperer le contenu de la balise <title> d'une page distante

Bonsoir,
Dans le but d'un petit exercice je souhaiterai récupérer le contenu de la balise d'un site distant.

Auriez vous une petite piste sur la ou les fonction à utilisé pour faire cela.

J'ai déjà trouvé pour récupérer les tags mais rien pour cette balise..
Merci à vous !
demenvil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 18h42   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu peux utiliser DomDocument
http://eusebius.developpez.com/php5dom/
http://www.php.net/manual/fr/domelem...sbytagname.php
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 22/02/2011, 18h46   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Hello

Code :
1
2
3
4
5
6
 
$xml = file_get_contents("http://www.google.fr/");
if (preg_match("#<title>(?<title>[[:alnum:]]+)</title>#", $xml, $matches))
  echo $matches['title'];
else
  echo "No title found";
On fait difficilement plus simple.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 22/02/2011, 18h53   #4
Membre actif
 
Avatar de demenvil
 
Homme Ghislain Ott
En fomation
Inscription : avril 2009
Messages : 90
Détails du profil
Informations personnelles :
Nom : Homme Ghislain Ott
Âge : 22
Localisation : France

Informations professionnelles :
Activité : En fomation
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2009
Messages : 90
Points : 180
Points : 180
Envoyer un message via Skype™ à demenvil
Merci pour vos réponses
@sabotage je vais aller voir tes deux liens

@Benjamin Delespierre j'ai bien essayé ton code mais j'ai tester avec 3 site il ne me trouve jamais le titre
Une idée du problème ?
demenvil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 19h22   #5
Membre actif
 
Avatar de demenvil
 
Homme Ghislain Ott
En fomation
Inscription : avril 2009
Messages : 90
Détails du profil
Informations personnelles :
Nom : Homme Ghislain Ott
Âge : 22
Localisation : France

Informations professionnelles :
Activité : En fomation
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2009
Messages : 90
Points : 180
Points : 180
Envoyer un message via Skype™ à demenvil
J'ai trouvé ma solution ! Avec quelques modif
Merci à vous.
Code :
1
2
3
4
5
6
7
8
 
<?phpfunction get_title($lien){     
// On récupère le code HTML de la page     $html=file_get_contents($lien);   
 // On extrait le contenu compris entre <title> et </title>    
eregi('<title>(.*)</title>', $html, $regs);     
// On retourne le résultat obtenu     
return $regs[1];}$titre = get_title("url du site ici ");
echo $titre;?>
demenvil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 19h40   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
eregi est deprecated.

http://php.net/manual/fr/function.eregi.php

Quand tu as essayé mon code, tu as bien spécifié "http://xxx" ? Si tu ne le mets pas ça ne peut pas marcher car PHP ne reconnaitra pas le header à utiliser et croira que tu cherche à charger le contenu du fichier xxx (comportement par défaut de file_get_contenst).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 08h44   #7
Membre actif
 
Avatar de demenvil
 
Homme Ghislain Ott
En fomation
Inscription : avril 2009
Messages : 90
Détails du profil
Informations personnelles :
Nom : Homme Ghislain Ott
Âge : 22
Localisation : France

Informations professionnelles :
Activité : En fomation
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2009
Messages : 90
Points : 180
Points : 180
Envoyer un message via Skype™ à demenvil
Arf je ne s'avait pas qu'elle était obsolète... :/
Oui pour ton code j'ai bien mis ce qu'il falait Mais ça ne fonctionné pas..
demenvil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 14h05   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
C'est louche, en local ici ça marchait... Bref, essaie de changer la regexp
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 14h14   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
il faut utiliser les outils adapter, donc DOMDocument comme le dis sabotage, faut vraiment perde cette manie de faire des regex pour tout et n'importe quoi

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$url = 'http://www.google.fr';
 
libxml_use_internal_errors(true);
 
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
 
libxml_clear_errors();
 
$title = $doc->getElementsByTagName('title')->item(0);
 
echo $title->nodeValue;
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 18h47   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
C'est vrais Stealth mais à dire à tous les gens qui passent sur le forum de se mettre à DOM et XQuery tu vas leur faire peur - surtout quand leur question se pose pas vraiement dans une démarche industrielle de qualité pour ainsi dire
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 19h09   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par Benjamin Delespierre Voir le message
C'est vrais Stealth mais à dire à tous les gens qui passent sur le forum de se mettre à DOM et XQuery tu vas leur faire peur - surtout quand leur question se pose pas vraiement dans une démarche industrielle de qualité pour ainsi dire
y'a pas de xpath la, et c'est plus simple pour n'importe quelle debutant de comprendre getElementsByTagName('title') que les regex

__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 12h40   #12
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
C'est vrai que là c'était simple. Mais quand on doit utiliser les XPath ça se corse.
En revanche je suis 100% d'accord avec toi: il faut utiliser DOMDocument pour parser du X(HT)ML. Je suis juste partisant du KISS.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 18h00   #13
Candidat au titre de Membre du Club
 
Louis Gentil
Inscription : juillet 2010
Messages : 47
Détails du profil
Informations personnelles :
Nom : Louis Gentil

Informations forums :
Inscription : juillet 2010
Messages : 47
Points : 14
Points : 14
Bonjour j'ai un peu la même problématique cependant je dois récupérer des infos qui sont dans des balises qui ne sont pas unique et vraiment très précise auriez vous quelques conseils?

J'aimerais pouvoir récupérer la query popularity le qci et les sites qui recoivent le plus de traffic, si vous auriez quelques pistes ce serait nickel


http://www.alexa.com/search?q=meuble...ineadesign.com

cordialement,
lomi

ps: à quoi sers le "->item(0);"

j'ai réfléchis et en fait la solution qui était déjà proposée me paraît adaptée je l'ai un peu découpé a la tronçonneuse par contre car ca fonctionne pas pour moi

un var_dump($title) a la fin du code suivant me retourne
Code :
object(DOMNodeList)#29 (0) { }
Code :
1
2
3
4
5
6
7
8
9
10
$url = 'http://www.alexa.com/search?q=canape+pas+cher&r=home_home&p=bigtop';
 
libxml_use_internal_errors(true);
 
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
 
libxml_clear_errors();
 
$title = $doc->getElementsByTagName('qindex');
Lomithrani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 18h11   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par Lomithrani Voir le message
Bonjour j'ai un peu la même problématique cependant je dois récupérer des infos qui sont dans des balises qui ne sont pas unique et vraiment très précise auriez vous quelques conseils?

J'aimerais pouvoir récupérer la query popularity le qci et les sites qui recoivent le plus de traffic, si vous auriez quelques pistes ce serait nickel


http://www.alexa.com/search?q=meuble...ineadesign.com

cordialement,
lomi
le site propose une API tu dois donc l'utiliser
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 18h29   #15
Candidat au titre de Membre du Club
 
Louis Gentil
Inscription : juillet 2010
Messages : 47
Détails du profil
Informations personnelles :
Nom : Louis Gentil

Informations forums :
Inscription : juillet 2010
Messages : 47
Points : 14
Points : 14
merci de ta réponse je vais étudié ca, j'ai édité mon message cependant pendant que tu me répondais si tu peux y jeter un oeil
Lomithrani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 18h34   #16
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
qindex n'est pas un tag mais une classe, donc getElementsByTagName n'est pas adapté, tu doit passer par xpath puisqu'il n'y pas de getElementsByClassName dans l'api de PHP
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 18h37   #17
Candidat au titre de Membre du Club
 
Louis Gentil
Inscription : juillet 2010
Messages : 47
Détails du profil
Informations personnelles :
Nom : Louis Gentil

Informations forums :
Inscription : juillet 2010
Messages : 47
Points : 14
Points : 14
Citation:
Envoyé par stealth35 Voir le message
qindex n'est pas un tag mais une classe, donc getElementsByTagName n'est pas adapté, tu doit passer par xpath puisqu'il n'y pas de getElementsByClassName dans l'api de PHP
Aîe , je ne trouve pas l'API (mais bon je vais continuer de chercher) et je vais devoir apprendre ces fameux xpath . Merci encore et à bientôt :/ !
Lomithrani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 18h38   #18
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par Lomithrani Voir le message
Aîe , je ne trouve pas l'API (mais bon je vais continuer de chercher) et je vais devoir apprendre ces fameux xpath . Merci encore et à bientôt :/ !
http://fr.php.net/manual/fr/book.dom.php
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 23h22   #19
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
Citation:
Envoyé par Lomithrani Voir le message
Aîe , je ne trouve pas l'API (mais bon je vais continuer de chercher) et je vais devoir apprendre ces fameux xpath . Merci encore et à bientôt :/ !
Remarques que tu peux le faire aussi sans xpath tout en utilisant DomDocument
Code :
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
header('Content-type: text/html; charset=UTF-8');
 
$page_cible = 'http://www.alexa.com/search?q=meuble+pas+cher&p=gkey&r=site_siteinfo&s=usineadesign.com';
 
 
$tab = array();
 
$dom = new DOMDocument;// Crée un nouvel objet DOMDocument
 
if(@$dom->loadHTMLFile($page_cible))// Charge le document html
	{
 
		if ($domp = $dom->getElementsByTagName('p'))//recherche les balises p
 
		foreach($domp as $p) //liste les balises p
		{
			$attribut = $p->hasAttributes() ? $p->getAttribute('class') : null;//cherche les attributs class
 
			if ($attribut == 'qindex')// recherche sur la class cible 'qindex'
				{
					if ($p->hasChildNodes()) //Cherche si il y a des noeuds enfants
						{
							foreach ($p->childNodes as $node) //liste les noeuds enfant
								{
									if($node->nodeType == 1 && $node->nodeName != 'span') // Si les noeuds sont de type 1 il s'agit d'éléments (et non pas de texte) et l'on regarde s'ils sont différents de span
										{
											  $index = trim($node->nodeValue);// Enregistre les valeurs du titre = première balises <strong>
										}
									else if($node->nodeType == 3) // noeud texte
 
									$value = trim($node->nodeValue); // Enregistre les valeurs = seules valeurs texte non inclues dans noeud de p
								}
 
							$tab[$index] = str_replace(array("\r\n","\n","\t"),"",$value);// Enregistre les résultats dans un tableau
						}
				}
		}
 
 
		if ($domt = $dom->getElementsByTagName('table'))//recherche les balises table
 
		foreach($domt as $table) //liste les balises table
		{
			$attribut = $table->hasAttributes() ? $table->getAttribute('class') : null;//cherche les attributs class
 
			if ($attribut == 'dataTable')// recherche sur la class cible 'dataTable'
				{
					if ($table->hasChildNodes()) //Cherche si il y a des noeuds enfants
						{
						    $i = 0;
							foreach ($table->childNodes as $node) //liste les noeuds enfant
								{
									if($node->nodeType == 1 && $node->nodeName == 'tr' && $i > 0) // Si les noeuds sont de type 1 il s'agit d'éléments (et non pas de texte) et l'on regarde s'ils sont = tr à partir de la seconde ligne
										{
											$td = $node->getElementsByTagName('td');//recherche les balises td
											if ($td->length >= 3) // si au moins trois éléments (cellules td)
												{
													$tab[$td->item(0)->nodeValue]['Share of Voice'] = $td->item(1)->nodeValue;// Enregistre le site = première valeur comme index du tableau $td et les valeurs suivantes comme valeurs
													$tab[$td->item(0)->nodeValue]['Engagement'] = $td->item(2)->nodeValue;
												}
										}
							            $i++;
							        }
 
						}
				}
		}
	}
	else
	{
		echo 'le document '.$page_cible. ' n\'a pas pu être chargé';
	}
 
echo '<pre>';
print_r($tab);
echo '</pre>';
?>
Bon c'est pas très compliqué quand on connait un peu le DOM mais j'avoue quand même assez laborieux comme code.

Xpath, je l'utilise pas car j'ai pas encore vu une doc digne de ce nom. Au passage si quelqu'un en connaît une autre que les cinq pages "vides" de la doc php, je suis preneur car je vois pas comment on peut se débrouiller avec si peu d'information.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 01/06/2011, 00h56   #20
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
tu vas lui faire peur avec ça.

XPath c'est tout simple :
Code :
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
26
27
$url = 'http://www.alexa.com/search?q=meuble+pas+cher&p=gkey&r=site_siteinfo&s=usineadesign.com';
 
libxml_use_internal_errors(true);
 
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
 
libxml_clear_errors();
 
$xpath = new DOMXPath($doc);
$items = $xpath->query('//table[@class="dataTable"]//td');
 
$store = array();
 
foreach($items as $item)
{
    if(!$item->previousSibling)
    {
        $store[$item->textContent] = array();
        $current = &$store[$item->textContent];
        continue;
    }
 
    $current[] = $item->textContent;    
}
 
echo '<pre>', print_r($store, true), '<pre>';
Pour la doc tout est ici :

http://www.w3.org/TR/xpath/
http://msdn.microsoft.com/fr-fr/library/ms256115.aspx


Ps : pas bien le @$dom->loadHTMLFile, utilise libxml_use_internal_errors
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h29.


 
 
 
 
Partenaires

Hébergement Web