METEOQUEW[PHP] : RÉCUPÈRE LES INFOS DE METEOFRANCE
mickbad
Messages postés71Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention20 avril 2008
-
17 mai 2006 à 22:17
cs_epsilon2
Messages postés3Date d'inscriptiondimanche 17 août 2003StatutMembreDernière intervention15 juin 2006
-
15 juin 2006 à 23:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_epsilon2
Messages postés3Date d'inscriptiondimanche 17 août 2003StatutMembreDernière intervention15 juin 2006 15 juin 2006 à 23:51
Hello,
Je suis chez Free, et ça remarche sans avoir fait aucune Manip !
Merci A+
Jacques
BaroqueW
Messages postés11Date d'inscriptionsamedi 15 avril 2006StatutMembreDernière intervention14 juin 2006 14 juin 2006 à 00:27
Ca marche encore chez moi
Vérifie que ton hebergeur n'a pas changé des réglages au niveau php (version, sécurité etc.)
Pour l'outre-mer, je ne sais pas et je n'ai pas trop de temps en ce moment, désolé :(
cs_epsilon2
Messages postés3Date d'inscriptiondimanche 17 août 2003StatutMembreDernière intervention15 juin 2006 13 juin 2006 à 23:31
Bonsoir,
J'ai installé le script meteo sur mon site et tout marchait pas trop mal.
Or apparement depuis 2 ou 3 jours je ne peux plus me connecter à meteofrance!
Problème avec fsockopen ligne 26 et implode() ligne 241.
Qui peux me dire si ce script fonctionne encore ?
merci
Jacques
sharkit
Messages postés27Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention 7 mai 2007 24 mai 2006 à 08:34
Bonjour tout le monde
J'ai testé pour les depts outre mer, et la requète ne reconnait pas ( FR/mameteo/ que j'ai changé par FR/voyage/, suivant le type d'url que météo france envoies entre autre), savez quels paramatre il faudrait changer pour que l'on puisse interroger les dom ( notamment la Réunion ) ?
Merci pour tout
LaurentKOogar
Messages postés369Date d'inscriptionsamedi 4 septembre 2004StatutMembreDernière intervention20 octobre 2013 22 mai 2006 à 03:15
BaroqueW a dit
"Mais évitez de les flooder, merci :)"
lol
t'inkiete, puis c'est comme en géolocalisation, les meilleurs services sont payant et ce paye à la requete :)
Pour neolien: jete 1 oeil sur webmastravel.net si tu es dans les voyages. La météo sur un site de voyages, t'evite grave a moins d'avoir beaucoup de traff!! le voyage c'est forcément direction plein soleil, meme au groeland :-)
++
BaroqueW
Messages postés11Date d'inscriptionsamedi 15 avril 2006StatutMembreDernière intervention14 juin 2006 20 mai 2006 à 18:31
Justement, je parse la page reçue à la recherche de " 800 " et je le vire vu qu'expérimentalement, il n'a rien à faire là et vient tout le temps se fourrer PILE au niveau de la seconde "prévision météo". Tu es sûr que ça le fait quand même chez toi avec ma dernière version ?
Sinon, ça fait un peu plus d'un mois et demi que leur code HTML a pas changé, je croise les doigts !
Et les données récupérées sont bien gratuites et publiques, oui. Mais je viens de voir que l'article 2 du §3 de leur Licence d'Utilisation (http://www.meteofrance.com/FR/index.jsp#) interdit "l'extraction répétée et systématique d'éléments même non protégés du site causant un préjudice à METEO-FRANCE."
Après je suis pas sûr qu'une requête HTTP par-ci par-là soit préjudiciable au niveau serveur pour eux. Mais évitez de les flooder, merci :)
Et pas de XML en vue, mais ils doivent en faire un payant pour les sites commerciaux je suppose.
PS pour Mick : j'essaye le HTTP 1.0 demain
mickbad
Messages postés71Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention20 avril 2008 20 mai 2006 à 17:47
Salut,
Effectivement il y a encore une erreur sur l'affichage.
> "sur le temps de demain à 14h ou il s'arrête en disant
> le temps sera (mais plus de commentaires)"
En fait, le programme repère certaines parties de code HTML de meteofrance (showAlt('gnagna',false)) et les extrait dans un tableau => fonction parsemeteo et bloc "//previsions"
Entre parenthèses, la boucle "for" pourrait être améliorée pour la condition de sortie. En effet avec notre erreur, il manque une donnée donc $weather[] possède non plus 4 éléments mais 3 !
Il est plus judicieux d'écrire:
for($i = 0; $i < count($weather); $i++)
Alors comme le fait remarquer BaroqueW, il y a des ajouts de caractères (des nombres en hexadécimal) dans le $buffer. Pas de bol (tout de même), j'ai remarqué que dans un des commentaires le nombre 800 s'est ajouté !! Vue que l'expression régulière ne garde pas les chiffres .. argh pas d'extraction donc une donnée manquante !!
J'avoue avoir cherché et trouvé un peu par hasard :)
J'ai donc remarqué une incompatibilité chronique entre les fonctions fgets/fread avec le protocole HTTP/1.1
Ainsi, au moins dans la fonction parsepage il faut remplacer le 1.1 par 1.0 à
fputs($fp,"GET ".$url2." HTTP/1.1\n");
=> fputs($fp,"GET ".$url2." HTTP/1.0\n");
Le fgets suivant semble mieux réagir et il n'y a plus d'ajout de code numérique (en hexa) intempestif :)
Ouf, ça maaaaaaaarche ! Vous pouvez le confirmer ?
J'ajoute encore une chose, la phrase "global $meteohost, $meteoIP;" devrait plutôt être insérée *dans* les fonctions parsehost et parsepage. Le mettre en haut ne sert à rien (du moins pour moi et ma version car j'ai toujours le warning/notice à ce propos, héhé :)
Enfin, je veux saluer le travail au niveau des expressions régulières .. là ya eu du boulot :))
Faut juste vérifier régulièrement que meteofrance.com ne change pas trop souvent son rendu HTML !!
Ya pas un flux XML qui peut être récupéré vu qu'il s'agit de données publiques et gratuites (vrai ça?)
Enjoy!
.Mick.
BaroqueW
Messages postés11Date d'inscriptionsamedi 15 avril 2006StatutMembreDernière intervention14 juin 2006 20 mai 2006 à 12:46
En effet, il y avait des caractères étranges qui se glissaient dans certaines prévisions et elles n'étaient pas vues par mon script, tout doit être rentré dans l'ordre là. En tout cas, chez moi ça marche sur un grand nombre de villes.
neolien
Messages postés63Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention 4 février 2007 20 mai 2006 à 08:29
Salut à tous !
Well BAROQUEW tes modifications inspirées de NICKBAD ont eu raison des erreurs
implode(): Bad arguments, donc cela fonctionne avec un petit bémol sur le temps de demain à 14h ou il s'arrête en disant le temps sera (mais plus de commentaires).
Sinon bel effort communautaire pour résoudre des petites erreurs de programmation, cela fais plaisir le partage..
@++ et bonne journée sur CS
BaroqueW
Messages postés11Date d'inscriptionsamedi 15 avril 2006StatutMembreDernière intervention14 juin 2006 19 mai 2006 à 23:45
Un grand merci à MickBad pour avoir trouvé que l'erreur venait des \r\n et \n\n. Maintenant j'ai deux questions pour lui : pourquoi certaines versions de php font que ça répond bien et d'autres non ? et pourquoi ethereal me dit que mon navigateur émet bien des requêtes finissant par \r\n (au même endroit) ?
Mais sinon merci bien, j'ai même fait des efforts sur l'indentation et les commentaires :)
BaroqueW
Messages postés11Date d'inscriptionsamedi 15 avril 2006StatutMembreDernière intervention14 juin 2006 19 mai 2006 à 20:35
Hum, d'accord pour les erreurs que tu as vues (merci au passage pour la relecture laborieuse du code !) mais j'ai fait des essais sur mon serveur et un autre serveur de type personnel et ça marche, j'ai fait des essais sur deux hébergeurs pros et ça ne marche pas... il n'y aurait pas plutôt un blocage de certaines fonctions à ce niveau-là ?
Enfin, je vais essayer tes modifications mais je dois avouer que les fsockopen, j'ai repris des morceaux de code qui marchaient jusque là, d'où l'absence de commentaire sur ces parties (ce qui n'excuse pas l'absence de commentaire sur les autres parties, je sais ^^).
Et je le prends pas mal pour l'indentation, j'étais déjà au courant mais c'est dur de m'en débarrasser ^^
mickbad
Messages postés71Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention20 avril 2008 19 mai 2006 à 16:20
Salut,
Je reviens donc pour donner mon avis sur le problème rencontré avec le implode().
Je ne sais pas si, NEOLIEN, il s'agit du même problème mais je ne crois que faire un chmod 777 arrangerait les choses :)
En fait j'ai repéré 2 erreurs (ou 4 si on veux) et je serais tenté de dire : "ben voilà ce qui arrive qd on programme un truc n'importe comment" ! [dis avec le sourire naturellement sans volonté de blesser ;)]
Pourquoi je dis ça ?
- pas beaucoup de commentaires (debug pas facile à faire) à l'intérieur des fonctions
- des morceaux de codes (fonctions) sur une ligne : mouais
- des indentations dans tous les sens (du moins pour mon éditeur PSPad)
- des variables non déclarées mais utilisées (pas de pbm ok mais ce n'est pas propre et ça génère des NOTICEs sur certains serveurs)
M'enfin, tu as compris BaroqueW je ne trouve ça pas très joli à regarder et qd tu veux débusquer un bug ce n'est pas si facile que ça (surtout sans connaitre ni le code ni la pensée de l'auteur :))
Personnellement (je dis bien *personnellement*), je programme toujours en me disant que quelqu'un d'autre va lire le code pour me forcer à bien présenter les choses.
Mettre tout sur une ligne par exemple n'est pas top parfois et l'idée de "gagner de la place" n'est pas bonne.
Et puis, soyons NOUS aussi des artistes ! :)
BaroqueW, ne t'offusque absolument pas car je dis simplement mon avis dans le simple but de t'aider. Je n'ai pas la science infuse mais je pense que quelque part je n'ai pas tort :))
Au niveau des erreurs que j'ai trouvé :
- (pour moi du moins), les fonctions parsehost et parsepage n'ont pas forcément accès aux variables mis en tant que global. J'ai mis:
global $meteohost, $meteoIP;
- Dans ces mêmes fonctions, après la connexion et le test de la validité du descripteur de fichier $fp, tu envoies la requête : fputs($fp,"GET ".$url2." HTTP/1.1\n\n");
Tu ne remarques pas ? 2 fois \n\n
C'est tellement bête et invisible que c'est évident :)
=> Tu indiques au serveur que tu as fini l'en-tête par une ligne vide. Seulement, tu envoies encore des données d'où le BAD REQUEST qui en ressort.
(pour le voir fait un echo $line après la réception de la réponse du serveur)
Sinon pas la peine de faire un \r\n, un \n suffit amplement car ce n'est pas du texte à lire directement avec un éditeur normal. Euh moi pas trop clair mais faire des efforts à l'avenir :))))
j'espère avoir aidé
Noelien, dit nous si c'est ça ton erreur :)
bye
.Mick.
stepibou
Messages postés112Date d'inscriptionjeudi 11 mars 2004StatutMembreDernière intervention11 octobre 2006 19 mai 2006 à 16:19
paye ta pub
neolien
Messages postés63Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention 4 février 2007 19 mai 2006 à 15:45
Merci pour ta réponse rapide !
Dans le doute j'ai mis des CHMOD 777 sur les deux fichiers, je pencherais donc plus pour une configuration Apache de mon Hébergeur et notamment du "fsockopen" qui semble être verrouillé !
Merci quand même et dommage que je ne puisse pas l'installer sur mon dernier site de voyage : http://www.voyage-location.com
@++
BaroqueW
Messages postés11Date d'inscriptionsamedi 15 avril 2006StatutMembreDernière intervention14 juin 2006 19 mai 2006 à 15:26
Après une petite investigation, l'erreur sur implode remonte à très loin. En fait, sur mon serveur en linux, il ouvre le socket sans problème mais il n'arrive rien à y lire. Donc les résultats sont vides et implode ne peut pas marcher.
Je ne sais pas encore si c'est un problème de droits ou bien de compatibilité...
BaroqueW
Messages postés11Date d'inscriptionsamedi 15 avril 2006StatutMembreDernière intervention14 juin 2006 19 mai 2006 à 14:56
Pour l'instant non. Ca dépend des versions de php des serveurs apparemment. Sur mon mac en PHP 4.3.9, ça passe et sur un serveur linux en PHP 4.4.0, ça ne passe plus.
neolien
Messages postés63Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention 4 février 2007 19 mai 2006 à 14:48
J'ai le message d'erreur suivant :
Warning: implode(): Bad arguments. in /home/httpd/vhosts/voyage-location.com/httpdocs/MeteoqueW.php on line 163
Ville non trouvée
As-tu la solution ?
stepibou
Messages postés112Date d'inscriptionjeudi 11 mars 2004StatutMembreDernière intervention11 octobre 2006 18 mai 2006 à 02:36
ici les boucles seraient apreciables.
a+
BaroqueW
Messages postés11Date d'inscriptionsamedi 15 avril 2006StatutMembreDernière intervention14 juin 2006 17 mai 2006 à 22:20
En effet, je vois bien un __MACOSX, désolé, c'est pas propre. Je vais l'enlever. Cela dit, les fichiers qui sont à la racine de l'archive sont valides chez moi : je viens de la retélécharger.
Merci
Baro
mickbad
Messages postés71Date d'inscriptionmercredi 17 juillet 2002StatutMembreDernière intervention20 avril 2008 17 mai 2006 à 22:17
mouais mouais mouais ... les fichiers semblent corrompues !
tu travailles sous MAC ? (pa'que ya un sous dossier __MACOSX)
15 juin 2006 à 23:51
Je suis chez Free, et ça remarche sans avoir fait aucune Manip !
Merci A+
Jacques
14 juin 2006 à 00:27
Vérifie que ton hebergeur n'a pas changé des réglages au niveau php (version, sécurité etc.)
Pour l'outre-mer, je ne sais pas et je n'ai pas trop de temps en ce moment, désolé :(
13 juin 2006 à 23:31
J'ai installé le script meteo sur mon site et tout marchait pas trop mal.
Or apparement depuis 2 ou 3 jours je ne peux plus me connecter à meteofrance!
Problème avec fsockopen ligne 26 et implode() ligne 241.
Qui peux me dire si ce script fonctionne encore ?
merci
Jacques
24 mai 2006 à 08:34
J'ai testé pour les depts outre mer, et la requète ne reconnait pas ( FR/mameteo/ que j'ai changé par FR/voyage/, suivant le type d'url que météo france envoies entre autre), savez quels paramatre il faudrait changer pour que l'on puisse interroger les dom ( notamment la Réunion ) ?
Merci pour tout
22 mai 2006 à 03:15
"Mais évitez de les flooder, merci :)"
lol
t'inkiete, puis c'est comme en géolocalisation, les meilleurs services sont payant et ce paye à la requete :)
Pour neolien: jete 1 oeil sur webmastravel.net si tu es dans les voyages. La météo sur un site de voyages, t'evite grave a moins d'avoir beaucoup de traff!! le voyage c'est forcément direction plein soleil, meme au groeland :-)
++
20 mai 2006 à 18:31
Sinon, ça fait un peu plus d'un mois et demi que leur code HTML a pas changé, je croise les doigts !
Et les données récupérées sont bien gratuites et publiques, oui. Mais je viens de voir que l'article 2 du §3 de leur Licence d'Utilisation (http://www.meteofrance.com/FR/index.jsp#) interdit "l'extraction répétée et systématique d'éléments même non protégés du site causant un préjudice à METEO-FRANCE."
Après je suis pas sûr qu'une requête HTTP par-ci par-là soit préjudiciable au niveau serveur pour eux. Mais évitez de les flooder, merci :)
Et pas de XML en vue, mais ils doivent en faire un payant pour les sites commerciaux je suppose.
PS pour Mick : j'essaye le HTTP 1.0 demain
20 mai 2006 à 17:47
Effectivement il y a encore une erreur sur l'affichage.
> "sur le temps de demain à 14h ou il s'arrête en disant
> le temps sera (mais plus de commentaires)"
En fait, le programme repère certaines parties de code HTML de meteofrance (showAlt('gnagna',false)) et les extrait dans un tableau => fonction parsemeteo et bloc "//previsions"
Entre parenthèses, la boucle "for" pourrait être améliorée pour la condition de sortie. En effet avec notre erreur, il manque une donnée donc $weather[] possède non plus 4 éléments mais 3 !
Il est plus judicieux d'écrire:
for($i = 0; $i < count($weather); $i++)
Alors comme le fait remarquer BaroqueW, il y a des ajouts de caractères (des nombres en hexadécimal) dans le $buffer. Pas de bol (tout de même), j'ai remarqué que dans un des commentaires le nombre 800 s'est ajouté !! Vue que l'expression régulière ne garde pas les chiffres .. argh pas d'extraction donc une donnée manquante !!
J'avoue avoir cherché et trouvé un peu par hasard :)
J'ai donc remarqué une incompatibilité chronique entre les fonctions fgets/fread avec le protocole HTTP/1.1
Ainsi, au moins dans la fonction parsepage il faut remplacer le 1.1 par 1.0 à
fputs($fp,"GET ".$url2." HTTP/1.1\n");
=> fputs($fp,"GET ".$url2." HTTP/1.0\n");
Le fgets suivant semble mieux réagir et il n'y a plus d'ajout de code numérique (en hexa) intempestif :)
Ouf, ça maaaaaaaarche ! Vous pouvez le confirmer ?
J'ajoute encore une chose, la phrase "global $meteohost, $meteoIP;" devrait plutôt être insérée *dans* les fonctions parsehost et parsepage. Le mettre en haut ne sert à rien (du moins pour moi et ma version car j'ai toujours le warning/notice à ce propos, héhé :)
Enfin, je veux saluer le travail au niveau des expressions régulières .. là ya eu du boulot :))
Faut juste vérifier régulièrement que meteofrance.com ne change pas trop souvent son rendu HTML !!
Ya pas un flux XML qui peut être récupéré vu qu'il s'agit de données publiques et gratuites (vrai ça?)
Enjoy!
.Mick.
20 mai 2006 à 12:46
20 mai 2006 à 08:29
Well BAROQUEW tes modifications inspirées de NICKBAD ont eu raison des erreurs
implode(): Bad arguments, donc cela fonctionne avec un petit bémol sur le temps de demain à 14h ou il s'arrête en disant le temps sera (mais plus de commentaires).
Sinon bel effort communautaire pour résoudre des petites erreurs de programmation, cela fais plaisir le partage..
@++ et bonne journée sur CS
19 mai 2006 à 23:45
Mais sinon merci bien, j'ai même fait des efforts sur l'indentation et les commentaires :)
19 mai 2006 à 20:35
Enfin, je vais essayer tes modifications mais je dois avouer que les fsockopen, j'ai repris des morceaux de code qui marchaient jusque là, d'où l'absence de commentaire sur ces parties (ce qui n'excuse pas l'absence de commentaire sur les autres parties, je sais ^^).
Et je le prends pas mal pour l'indentation, j'étais déjà au courant mais c'est dur de m'en débarrasser ^^
19 mai 2006 à 16:20
Je reviens donc pour donner mon avis sur le problème rencontré avec le implode().
Je ne sais pas si, NEOLIEN, il s'agit du même problème mais je ne crois que faire un chmod 777 arrangerait les choses :)
En fait j'ai repéré 2 erreurs (ou 4 si on veux) et je serais tenté de dire : "ben voilà ce qui arrive qd on programme un truc n'importe comment" ! [dis avec le sourire naturellement sans volonté de blesser ;)]
Pourquoi je dis ça ?
- pas beaucoup de commentaires (debug pas facile à faire) à l'intérieur des fonctions
- des morceaux de codes (fonctions) sur une ligne : mouais
- des indentations dans tous les sens (du moins pour mon éditeur PSPad)
- des variables non déclarées mais utilisées (pas de pbm ok mais ce n'est pas propre et ça génère des NOTICEs sur certains serveurs)
M'enfin, tu as compris BaroqueW je ne trouve ça pas très joli à regarder et qd tu veux débusquer un bug ce n'est pas si facile que ça (surtout sans connaitre ni le code ni la pensée de l'auteur :))
Personnellement (je dis bien *personnellement*), je programme toujours en me disant que quelqu'un d'autre va lire le code pour me forcer à bien présenter les choses.
Mettre tout sur une ligne par exemple n'est pas top parfois et l'idée de "gagner de la place" n'est pas bonne.
Et puis, soyons NOUS aussi des artistes ! :)
BaroqueW, ne t'offusque absolument pas car je dis simplement mon avis dans le simple but de t'aider. Je n'ai pas la science infuse mais je pense que quelque part je n'ai pas tort :))
Au niveau des erreurs que j'ai trouvé :
- (pour moi du moins), les fonctions parsehost et parsepage n'ont pas forcément accès aux variables mis en tant que global. J'ai mis:
global $meteohost, $meteoIP;
- Dans ces mêmes fonctions, après la connexion et le test de la validité du descripteur de fichier $fp, tu envoies la requête : fputs($fp,"GET ".$url2." HTTP/1.1\n\n");
Tu ne remarques pas ? 2 fois \n\n
C'est tellement bête et invisible que c'est évident :)
=> Tu indiques au serveur que tu as fini l'en-tête par une ligne vide. Seulement, tu envoies encore des données d'où le BAD REQUEST qui en ressort.
(pour le voir fait un echo $line après la réception de la réponse du serveur)
Sinon pas la peine de faire un \r\n, un \n suffit amplement car ce n'est pas du texte à lire directement avec un éditeur normal. Euh moi pas trop clair mais faire des efforts à l'avenir :))))
j'espère avoir aidé
Noelien, dit nous si c'est ça ton erreur :)
bye
.Mick.
19 mai 2006 à 16:19
19 mai 2006 à 15:45
Dans le doute j'ai mis des CHMOD 777 sur les deux fichiers, je pencherais donc plus pour une configuration Apache de mon Hébergeur et notamment du "fsockopen" qui semble être verrouillé !
Merci quand même et dommage que je ne puisse pas l'installer sur mon dernier site de voyage : http://www.voyage-location.com
@++
19 mai 2006 à 15:26
Je ne sais pas encore si c'est un problème de droits ou bien de compatibilité...
19 mai 2006 à 14:56
19 mai 2006 à 14:48
Warning: implode(): Bad arguments. in /home/httpd/vhosts/voyage-location.com/httpdocs/MeteoqueW.php on line 163
Ville non trouvée
As-tu la solution ?
18 mai 2006 à 02:36
a+
17 mai 2006 à 22:20
Merci
Baro
17 mai 2006 à 22:17
tu travailles sous MAC ? (pa'que ya un sous dossier __MACOSX)
Merci
.Mick.