METEOQUEW[PHP] : RÉCUPÈRE LES INFOS DE METEOFRANCE

mickbad Messages postés 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 avril 2008 - 17 mai 2006 à 22:17
cs_epsilon2 Messages postés 3 Date d'inscription dimanche 17 août 2003 Statut Membre Dernière intervention 15 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.

https://codes-sources.commentcamarche.net/source/37642-meteoquew-php-recupere-les-infos-de-meteofrance

cs_epsilon2 Messages postés 3 Date d'inscription dimanche 17 août 2003 Statut Membre Dernière intervention 15 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és 11 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 14 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és 3 Date d'inscription dimanche 17 août 2003 Statut Membre Dernière intervention 15 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és 27 Date d'inscription lundi 22 septembre 2003 Statut Membre Derniè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és 369 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 20 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és 11 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 14 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és 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 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és 11 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 14 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és 63 Date d'inscription mardi 4 mai 2004 Statut Membre Derniè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és 11 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 14 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és 11 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 14 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és 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 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és 112 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 11 octobre 2006
19 mai 2006 à 16:19
paye ta pub
neolien Messages postés 63 Date d'inscription mardi 4 mai 2004 Statut Membre Derniè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és 11 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 14 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és 11 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 14 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és 63 Date d'inscription mardi 4 mai 2004 Statut Membre Derniè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és 112 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 11 octobre 2006
18 mai 2006 à 02:36
ici les boucles seraient apreciables.

a+
BaroqueW Messages postés 11 Date d'inscription samedi 15 avril 2006 Statut Membre Dernière intervention 14 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és 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 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)

Merci
.Mick.
Rejoignez-nous