begin process at 2012 05 27 19:26:35
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > MYGGL GOOGLE API CLASS FOR BEGINERZ

MYGGL GOOGLE API CLASS FOR BEGINERZ


 Information sur la source

Note :
Aucune note
Catégorie :Réseau & Internet Classé sous :google api, google php, google classe, moteur, connexion Niveau :Initié Date de création :23/03/2011 Vu / téléchargé :2 261 / 111

Auteur : lezj

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Ce script, accompagné d'un exemple, est une classe qui permet d'obtenir des informations à partir du moteur de recherche de google. Il montre de manière simple et accessible à quiconque, comment établir une une connexion à google et obtenir les informations souhaitées en utilisant la nouvelle API google en PHP, car la documentation de cette API en PHP n'est pas très présente. J'en profite au passage pour préciser qu'il utilise la librairie cURL et le format de retour des informations renvoyées par google est Json. En outre, il il est ouvert à toutes les adaptations possibles; il bénéficiera d'un enrichissement dans les jours à venir et sera peut-être accompagné d'un tutoriel. J'espère que nombreux seront ceux qui apprécieront.
Il est a été écrit en PHP5.


 Conclusion

N.B:Une simple connaissance du formalisme objet en PHP5 est suffisante pour décortiquer cette source.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip VALIDATEUR_3WC

 Sources de la même categorie

INSPECTEUR DE PAGES (VÉRIFIEZ SI DES SITES AFFICHENT UN TEXT... par pablo836
Source avec Zip Source avec une capture GÉOLOCALISATION par pgl10
Source avec Zip TAPI : METTRE EN RELATION DEUX POSTES TELEPHONIQUES par ravery
Source avec Zip CLIENT / SERVEUR : LES SOCKETS par Morphinof
Source avec Zip VALIDATEUR_3WC par lezj

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000
Source avec Zip Source avec une capture MOTEUR DE RECHERCHE SUR BASE MYSQL FULLTEXT ET BOOLEAN AVEC ... par cod57
Source avec Zip Source avec une capture LOGIN SHA1 + CRÉATION UTILISATEUR par aventurier19
Source avec Zip GDATA CLASS par darkis
SEARCHMOTS par boscoauhunier

Commentaires et avis

Commentaire de phpAnonyme le 23/03/2011 17:26:57

Des erreurs ou manquement dans nombrePageIndexReference()

## Petite correction

$this->oCh = curl_init();
curl_setopt($this->oCh, CURLOPT_CONNECTTIMEOUT, ini_get('max_execution_time'));
curl_setopt($this->oCh, CURLOPT_URL, $this->oUrl);
curl_setopt($this->oCh, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($this->oCh, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($this->oCh, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($this->oCh, CURLOPT_REFERER, $this->oReferer);

if(curl_exec($this->oCh) === false)
throw new Exception('Erreur Curl : ' . curl_error($this->oCh));

$this->oBody = curl_exec($this->oCh);
curl_close($this->oCh);
##
Me parait plus judiciable !

Ensuite pour les nombre de pages pour JSON, faire une boucle, me semble pas approprier, à 3 000 000 de résultats par exemple, si le temps d'éxécution du script n'a pas pas été allongé on aura a coup sûre un plantage du script :
##
for($i = 0; $i < $this->oNombreTotalPages; $i++)
{
if($this->oJson['responseData']['results'][$i]['visibleUrl'] == $this->oRequete)
$this->oNombrePagesIndex++;
}
##

Commentaire de phpAnonyme le 23/03/2011 23:33:18

Bon n'ayant rien à faire je me suis replongé dans ton code et j'apporte des modifications parfois non négligeable car il y a avait des erreurs de conception notamment dans la fameuse boucle dont je parle dans mon précèdent poste !

### dans la méthode function initialise($pRequete) ###
function initialise($pRequete)
{
$this->oNombrePagesIndex = 0;
$this->oNombreTotalPages = 0;
$this->oNombreBackLinks = 0;
$this->oNombrePagesSite = 0;
preg_match('{^(.*\//)?(.*)\/?}', trim($pRequete, '/'), $out);
$this->oRequete = $out[2];
$this->oReferer = isset($_SERVER['HTTP_REFERER']) ? htmlspecialchars($_SERVER['HTTP_REFERER'], ENT_COMPAT, 'UTF-8') : FALSE;
}

/// Explication :
- $this->oUrl = ""; ne servait à rien puisque la visibilité de l'objet est privé
- $this->oReferer = 'http://Nom de votre site'; pas très intéressant, encore une fois méthode privé et puis taper dans la classe l'url de provenance pas trop 'génial'
- $this->oRequete = $pRequete; dans la méthode nombrePageIndexReference() tu l'utilise pour vérifier la visibilité de l'url hors celle-ci est uniquement du type www.xxx.com. Si l'utilisateur passe en paramètre une url complète http://... il ne sera donc pas pris en compte.


### Création d'une nouvelle méthode ###
function parseResult($url)
{
$this->oBody = false;
$this->oCh = curl_init();
curl_setopt($this->oCh, CURLOPT_CONNECTTIMEOUT, ini_get('max_execution_time'));
curl_setopt($this->oCh, CURLOPT_URL, $url);
curl_setopt($this->oCh, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($this->oCh, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($this->oCh, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->oCh, CURLOPT_REFERER, $this->oReferer);
$this->oBody = curl_exec($this->oCh);
if($this->oBody === false)
throw new Exception('Erreur Curl : ' . curl_error($this->oCh));

return $this->oBody;
}

// Explication
Tu utilise à trois reprises curl pour obtenir tes résultats. Inutile de mettre dans les 3 méthodes 3 fois cette opération.

[ A NOTER ] dans les trois méthodes suivantes :
- nombrePageIndexReference()
- nombreBackLinks()
- nombrePagesSite()
Il faut remplacer les opérations de curl par cette simple ligne :
$this->oBody = $this->parseResult($this->oUrl);   


### dans la méthode nombrePageIndexReference(), DANS la fameuse boucle ###  
for($i = 0; $i < sizeof($this->oJson['responseData']['results']); $i++)
{
if($this->oJson['responseData']['results'][$i]['visibleUrl'] == $this->oRequete)
$this->oNombrePagesIndex++;
}


// Explication
Je n'avais pas remarquer au premier abord(et donc dans mon précèdent poste) que tu bouclais sur le nombre de résultats/pages d'où le trop grand nombre pour 3000000 de résultats/pages. En faite il faut boucler sur le nombre de résultats effectifs/indexés.



Normalement maintenant ça devrait rouler !

Commentaire de lezj le 24/03/2011 01:56:22

merci php anonyme mais à ma connaissance, la nouvelle api google ne peut renvoyer que 10 résultats donc je ne peux pas boucler sur 3000000 de résultats.

Commentaire de phpAnonyme le 24/03/2011 02:31:10

Je t'ai pas dit que tu peux ni que tu dois ! Je t'ai dis que tu faisait la boucle sur le nombre de résulats estimés

## CODE ORIGINALE ##
# $this->oNombreTotalPages = $this->oJson['responseData']['cursor']['estimatedResultCount'];
# for($i = 0; $i < $this->oNombreTotalPages; $i++)
# {
# if($this->oJson['responseData']['results'][$i]['visibleUrl'] == $this->oRequete)
# $this->oNombrePagesIndex++;
# }


Hors s'il y en a 10000 ou 1000000 etc le script plantera !
D'où la correction que j'y est apporté :
for($i = 0; $i < sizeof($this->oJson['responseData']['results']); $i++)
{
if($this->oJson['responseData']['results'][$i]['visibleUrl'] == $this->oRequete)
$this->oNombrePagesIndex++;
}

Commentaire de aKheNathOn le 28/03/2011 11:17:47

Petit conseil pour rendre ta librairie plus compatible avec tout genre de config : je te conseillerais d'oublier cUrl et d'utiliser un simple fopen sur l'URL ...

Sinon à mon avis il te manque une classe stockant le résultat de retour et dans google il te faudrait une fonction privée pour gérer le retour php et google...

bonne continuation,
akh

Commentaire de LeFauve42 le 28/03/2011 12:39:39

Bonjour,

De quelle nouvelle API google parles-tu ?
L'API AJAX qui remplace l'ancienne version SOAP ?

Parce que si c'est le cas, il n'y a aucun interet a utiliser cette API concue pour JavaScript avec PHP (a part lancer des requetes "en batch" ou pour enregistrer les resultats sur ton serveur, deux choses que les conditions d'utilisation interdisent explicitement).

Eric

PS: Si c'est bien l'API Google AJAX, il y a au moins 2 ans qu'elle est nouvelle (il y a 2 ans que Google a discontinue l'API SOAP et conseille d'utiliser AJAX).

Commentaire de aKheNathOn le 28/03/2011 12:50:19

Le REST (Api AJAX) est à la mode ces derniers temps et c'est très simple de comprendre le pk, c'est tout simplement plus compatible contrairement à SOAP...(je suis pas trop d'accord avec lefauve sur le manque d'utilité d'une classe exploitant REST plutôt que du SOAP)

Pour le côté PHP (alors que REST semble que pour JavaScript) ça se justifier, car même si une alternative SOAP existe, c'est plus sympa de faire un file_get_contents sur une URL avec des paramètres en GET plutôt que d'utiliser des librairies SOAP qui ne sont pas distribuées par défaut sur toutes les versions...

J'insiste un peu sur cURL mais dommage de l'avoir utilisé forçant à avoir cette librairie, et le côté obscur de REST étant, vu que c'est moins formalisé je spaghéttise mon code ... les retours JSON devraient être toujours encapsulés dans des classes spécifiques ...

Commentaire de LeFauve42 le 28/03/2011 14:48:09

Akhenathon,

Le probleme est justement que la version SOAP de l'API n'existe plus depuis Aout 2009 (ainsi que ses conditions d'utilisation tres permissives).

Je ne dis pas que c'est inutile d'acceder en PHP a une API AJAX en general, mais dans le cas particulier de l'API Google, je pense que ca l'est :
Les CDU de l'API Google AJAX indiquent explicitement que tu ne peux faire une recherche que sur une action directe de l'utilisateur, et que tu ne dois pas alterer le resultat.
Partant de la, pourquoi passer par du PHP et forcer un reload de la page quand on peux simplement afficher les resultats dans une partie de la page ?

Eric

Commentaire de lezj le 07/04/2011 13:44:45

bien le bonjour à tous,
je tiens à vous remercier pour la participation que vous apportez sur cette source mais il semblerait que vous n'ayez lu ni la description de la source, ni même le titre de la source. "MYGGL GOOGLE API CLASS FOR BEGINERZ"!et oui, FOR BEGINNERS! ce qui veut dire que je voulais faire quelque chose de simple et accessible aux débutants, donc biensur il est possible de l'améliorer comme vous le voulez. mais à condition que çà reste comme voulu par son auteur (moi), à la portée du développeur qui vient de commencer en php et qui dit: "wais cool! je veux APPRENDRE à interagir avec google!".ok?surtout que je voudrais en faire un tutoriel dès que j'en aurai le temps.
merci
p.s: Akhenaton, c'est vrai que je peux utiliser un simple fopen() mais google préconise d'utiliser cURL pour l'accès à leur api en php.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

redirection [ par ouiouiteur ] comment rediriger une page vers :-soit une page sur mon serveur chez moi, si ma connexion est active-soit vers une page sur un hebergeur gratuit pour Connexion ki ve pas ?!? [ par FF.ST Hébergement ] Je tente de me connecter à un serveur counter-strike ...Pas de pot, ça marche pas !Pourtant la connexion de counter strike est une cnx normale TCP sur Comment faire ? Connexion TCP ki ve pas [ par FF.ST Hébergement ] Je tente de me connecter à l'aide de fsockopen sur un serveur counter-strike (half life).La connexion ne marche pas :(Pk ?$cnx = fsockopen("24.120.30. excuser moi vous avez une idee ?. [ par flashx ] flashxsalut ya t'il quelqu'un qui a une idee pour faire un robot de moteur de recherche car je sais pas comment ca marche de trop la je vais cree un m moteur de recherche alphabétique [ par princeg ] Quelqu'un peut-il m'aider, please? je voudrais créer un moteur de recherche alphabétique comme celui présent sur le site www.zouklist.fr.st et en plu Connexion à une base de données Paradox ! [ par orelien ] Bonjour !Voilà, j'aimerai me connecter à une base de données Paradox mais je n'y arrive pas !...Quelqu'un peut il m'aider ??Merci beaucoup.Orelien. connexion avec sql server [ par mabrouk ] bonjour, svp je travaille sur un poste client windows2000 server dans un domaine j'ai installé easyphp(php+apache+mysql), j'ai voulu se connecter a no Connexion telnet [ par Ark1 ] Bijour all,J'aimerais savoir si il est possible de se connecter a un serveur telnet, si oui pourrait on me donner une pitite liste des fonction a util moteur de recherche [ par fatNugly ] Bonjour, j'ai des petites questionsle quel des languages suivant php, c, est il le plus adequat pour faire un moteur de recherche dans une page?? la c moteur de recherche [ par fatNugly ] Bonjour, j'ai des petites questionsle quel des languages suivant php, c, est il le plus adequat pour faire un moteur de recherche dans une page??la cr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales