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 03/06/2011, 15h40   #1
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
Par défaut Petit problème sur un xpath

Bonjour tout le monde! J'ai appris ici même hier l'existence de xpath et je m'entraines un peu desus cependant la ca ne marche pas et j'ai essayez (beaucoup) de chose et ca n'a pas l'air de vouloir fonctionner je me demandais si vous n arriveriez pas a voir ou est mon erreur

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
 
$store = array();
 
foreach($response3 as $search)
{
    $query = http_build_query(array('q' => $search, 'p' => 'qkey'));
    $url = "http://www.alexa.com/search?$query";
 
    libxml_use_internal_errors(true);
 
    $doc = new DOMDocument();
    $doc->loadHTMLFile($url);
 
    libxml_clear_errors();
 
    $xpath = new DOMXPath($doc);
    $items = $xpath->query('//p[@class="qindex"]');
 
    foreach($items as $item)
    {
        $var = str_replace(html_entity_decode(' ', null, 'utf-8'), '', trim($item->lastChild->nodeValue));
        sscanf($var, '%D', $store[$search][]);
    }
}
 
//jusque la ca fonctionnes mon store est bien un tableau associatif avec en [0] et [1] les données que je veux
 
 
foreach($store as $search => $result)
{
    $q=urlencode($search);
    $search_url="http://www.google.com/search?q=$q&hl=fr&tbo=1&tbs=ww:1";
 
 
 
    libxml_use_internal_errors(true);
 
    $doc = new DOMDocument();
    $doc->loadHTMLFile($url);
 
    libxml_clear_errors();
 
    $xpath = new DOMXPath($doc);
    $items = $xpath->query('//*[@id="resultStats"]');
  //  $store[$search][3]= $item;
 
   foreach($items as $item)
    {
 
         $text = filter_var($item->nodeValue, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
        sscanf($text, '%D', $store[$search][]);
    }
}
 
//cette partie du dessus ne fonctionne pas du tout j ai essayez plein de chose avec / sans for each etc bref j ai rien dans le  [3] je pense que ca viens du trim mon soucis
 
 
 
//google api
foreach($store as $search => $result)
  {
 
 
$value2=urlencode($search);
 
$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=$value2&hl=fr";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, "http://www.blog.neptis.info/page_referer.php");
$body = curl_exec($ch);
curl_close($ch);
$json = json_decode($body);
$store[$search][4] = $json-> responseData-> cursor-> estimatedResultCount;
 
  }
//cette partie fonctionne bien , c est l équivalent en utilisant l api que propose google mais malheuresement les résultats sont trèèèèèèèsss loin de la réalité

J'ai bien séparé le code en trois partie (2 qui marchent une qui marche pas c'est indiqué dans les commentaires)

Merci d'avance !
Cordialement,
Lomithrani
Lomithrani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 15h42   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
ta pas pris la dernière version de mon code,
et tu n'utilises pas l'API de google la ...

si tu veux te faire la main sur xpath, test sur un page web/xml que tu crées toi même en local
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 16h02   #3
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
alors pour choper les xpath j ai trouver un truc sur firebug qui aide pas mal :p

sinon ta version avec
Code :
1
2
  $text = filter_var($item->nodeValue, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
        sscanf($text, '%D', $store[$search][]);
fonctionne pas chez moi alors que l autre oui donc j ai garder l autre :p

sinon la je ne fais pas appel a l api ?

Code :
1
2
3
4
5
6
7
8
9
10
 
$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=$value2&hl=fr";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, "http://www.blog.neptis.info/page_referer.php");
$body = curl_exec($ch);
curl_close($ch);
$json = json_decode($body);
$store[$search][4] = $json-> responseData-> cursor-> estimatedResultCount;
Lomithrani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 16h12   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
non c'est pas l'API ca,
l'API search c'est la : http://code.google.com/intl/fr/more/#google-search
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/06/2011, 16h24   #5
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
non c'est pas l'API ca,
l'API search c'est la : http://code.google.com/intl/fr/more/#google-search
Merci , malheuresement 100 queries ca me suffira jamais. Tu veux bien m aiguiller sur mon xpath ? , j'aimerais bien trouvé mon erreur!
Lomithrani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 16h31   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Lomithrani Voir le message
Merci , malheuresement 100 queries ca me suffira jamais. Tu veux bien m aiguiller sur mon xpath ? , j'aimerais bien trouvé mon erreur!
y'a pas de limitation avec en AJAX
tu dois utiliser cette API comme tout les site qui en propose une, si il y'a trop de trafique "clandestin" vers ton site, tu risque d’être blacklist par les différents sites
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 16h36   #7
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
c'est "clandestin" un loadhtml ? :o
Lomithrani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 16h56   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Lomithrani Voir le message
c'est "clandestin" un loadhtml ? :o
oui si les sites propose des api c'est pas pour rien, de plus que tu télécharge beaucoup de données par rapport au traitement, donc c'est pas optimisé, et tu pompes les information d'un site pour le mettre sur le tien (ça trouve pour faire de l'argent) sans leurs autorisation, c'est pas parce que tu as accès au information qu'elles t'appartiennent.
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/06/2011, 17h03   #9
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
Alors comme je suis pas de mauvaise fois je suis allez faire des recherches

je suis tomber sur la doc http://code.google.com/intl/fr/apis/...fonje_snippets en cherchant et j ai trouvé ca dans "java access"


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// This example request includes an optional API key which you will need to
// remove or replace with your own key.
// Read more about why it's useful to have an API key.
// The request also includes the userip parameter which provides the end
// user's IP address. Doing so will help distinguish this legitimate
// server-side traffic from traffic which doesn't come from an end-user.
URL url = new URL(
    "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&"
    + "q=Paris%20Hilton&key=INSERT-YOUR-KEY&userip=USERS-IP-ADDRESS");
URLConnection connection = url.openConnection();
connection.addRequestProperty("Referer", /* Enter the URL of your site here */);
 
String line;
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while((line = reader.readLine()) != null) {
 builder.append(line);
}
 
JSONObject json = new JSONObject(builder.toString());
// now have some fun with the results...
et 2 ligne plus loin je suis tomber la dessus : ce qui est exactement mon code a 2 ligne prêt ^^

De plus je ne les affichent pas je fais seulement un script qui a partir d'un mot clé me renvoi une liste de mot clés sur lequeul je fais des stats pour aider a choisir les bons mot clés a utiliser. Sinon si ce code est sur la doc google je pense avoir droit de l utiliser quand même non ? ils précisent pas de limite d éxécution

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// This example request includes an optional API key which you will need to
// remove or replace with your own key.
// Read more about why it's useful to have an API key.
// The request also includes the userip parameter which provides the end
// user's IP address. Doing so will help distinguish this legitimate
// server-side traffic from traffic which doesn't come from an end-user.
$url = "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&"
    . "q=Paris%20Hilton&key=INSERT-YOUR-KEY&userip=USERS-IP-ADDRESS";
 
// sendRequest
// note how referer is set manually
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, /* Enter the URL of your site here */);
$body = curl_exec($ch);
curl_close($ch);
 
// now, process the JSON string
$json = json_decode($body);
// now have some fun with the results...
Lomithrani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 17h08   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
l'api ajax y'a pas de probleme, par contre pas besoin cURL, un file_get_contents suffit
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 17h15   #11
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
l'api ajax y'a pas de probleme, par contre pas besoin cURL, un file_get_contents suffit
Je te suis pas y a 2 min tu m'a dis que de cette façon j'avais une chance d'être blacklist si je faisait trop de requetes?

tu parlais du loadhtml et les xpaths ?
Lomithrani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 17h17   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Lomithrani Voir le message
Je te suis pas y a 2 min tu m'a dis que de cette façon j'avais une chance d'être blacklist si je faisait trop de requetes?

tu parlais du loadhtml et les xpaths ?
oui je parle du loadHTML sur : http://www.google.com/search?q=$q&hl=fr&tbo=1&tbs=ww:1
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/06/2011, 17h19   #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
ok dommage ... par ce que les résultats de l api sont genre 10 fois en deça de la réalité parfois et d'autre fois au dessus ... ( bref ont dirait que google aime pas lacher des chiffres pour les SEO )
Lomithrani est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h34.


 
 
 
 
Partenaires

Hébergement Web