Webmaster Hub: Récupérer 2 valeurs dans un fichier XML - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Récupérer 2 valeurs dans un fichier XML Noter : -----

#1 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 13 novembre 2011 - 17:47

Bonjour,

Je sais que vous n'aimez pas trop donner des solutions toutes faites mais çà fait plusieurs jours que je cherche comment récupérer deux valeurs dans un fichier XML et je capitule.

Voici le fichier

 <?xml version="1.0" ?> 
- <weatherdata>
- <weather weatherlocationcode="wc:FRXX0016" weatherlocationname="Bordeaux, Gironde" zipcode="33300" encodedlocationname="Bordeaux%2c+Gironde" url="http://meteo.msn.com/local.aspx?wealocations=wc:FRXX0016&q=Bordeaux%2c+Gironde"
 imagerelativeurl="http://blst.msn.com/as/wea3/i/fr/" degreetype="C" provider="Foreca" attribution="Données fournies par Foreca" attribution2="© Foreca" lat="44.8557549" long="-0.5782283" timezone="1" alert="" entityid="4486">
  <current temperature="19" skycode="32" skytext="Clair" date="2011-11-13" day="dimanche" shortday="dim." observationtime="17:00:00" observationpoint="Bordeaux / Merignac" feelslike="19" humidity="68" windspeed="15" winddisplay="15 km/h ESE" /> 
  <forecast low="13" high="20" skycodeday="30" skytextday="En partie nuageux" date="2011-11-13" day="dimanche" shortday="dim." precip="5" /> 
  <forecast low="11" high="19" skycodeday="30" skytextday="En partie nuageux" date="2011-11-14" day="lundi" shortday="lun." precip="5" /> 
  <forecast low="10" high="15" skycodeday="39" skytextday="Averses / Temps clair" date="2011-11-15" day="mardi" shortday="mar." precip="95" /> 
  <forecast low="8" high="16" skycodeday="30" skytextday="En partie nuageux" date="2011-11-16" day="mercredi" shortday="mer." precip="20" /> 
  <forecast low="7" high="17" skycodeday="30" skytextday="En partie nuageux" date="2011-11-17" day="jeudi" shortday="jeu." precip="5" /> 
  <toolbar timewindow="60" minversion="1.0.1965.0" /> 
  </weather>
  </weatherdata>


et je voudrai récupérer la valeurs des champs lat et long pour les afficher dans mon script PHP
lat="44.8557549" long="-0.5782283"

J'arrive à peu près à extraire des données lorsqu'il y a des balises ouvrantes et fermantes mais là, il n'y en a pas pour ces deux champs.
Merci par avance si vous pouvez m'aider
0

#2 L'utilisateur est hors-ligne   jcaron 

  • Groupe : Membre+
  • Messages : 864
  • Inscrit(e) : 15-janvier 08
  • Genre:Homme
  • Localisation:Londres

Posté 13 novembre 2011 - 20:48

Plusieurs méthodes:
- méthode bourrin avec une regex:
preg_match('/lat="([-0-9.]+)" long="([-0-9.]+)"/',$string,$matches)



- méthode je lis du XML, ça va dépendre de ce que tu utilises (XML Parser, SimpleXML...). En supposant que tu utilises SimpleXML:
$xml = simplexml_load_string($string);
$lat = (string)$xml->weather[0]->attributes()->lat;
$long = (string)$xml->weather[0]->attributes()->long;



(je n'ai rien testé, mais ça ne doit pas être très loin)

Jacques.
0

#3 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 14 novembre 2011 - 08:39

Voir le messagejcaron, le 13 novembre 2011 - 20:48, dit :

- méthode je lis du XML, ça va dépendre de ce que tu utilises (XML Parser, SimpleXML...). En supposant que tu utilises SimpleXML:


Bonjour jcaron et merci

Malheureusement sur mon hébergement mutualisé, je n'ai pas SimpleXML.

Jusqu'à présent, je prenais des bouts de code trouvés sur le net et que je modifiais pour traiter les fichiers xml avec des fonctions du style lit_xml().
Je regarde la méthode bourrin.

Résultat:
Depuis ce matin, je me bagarre avec la méthode "bourin" mais en vain, aucun résultat
J'appelle l'url du fichier xml en guise de $string mais rien après traitement

Je continue de chercher comment extraire ces 2 champs lat et long
Merci quand même

Ce message a été modifié par Alainp - 14 novembre 2011 - 13:30.

0

#4 L'utilisateur est hors-ligne   Leonick 

  • Groupe : Hubmaster
  • Messages : 1 313
  • Inscrit(e) : 07-mars 05
  • Genre:Homme
  • Localisation:Val de Marne

Posté 14 novembre 2011 - 18:50

pense à ajouter l'option multilignes pour ton regex
0

#5 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 15 novembre 2011 - 19:50

Voir le messageLeonick, le 14 novembre 2011 - 18:50, dit :

pense à ajouter l'option multilignes pour ton regex

Merci mais dans ce domaine, je suis complètement nul
Je continue mes recherches pour trouver un bout de script qui exploite le fichier xml de msn
0

#6 L'utilisateur est hors-ligne   Leonick 

  • Groupe : Hubmaster
  • Messages : 1 313
  • Inscrit(e) : 07-mars 05
  • Genre:Homme
  • Localisation:Val de Marne

Posté 15 novembre 2011 - 21:23

regarde s'ils ne proposent pas d'api
0

#7 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 16 novembre 2011 - 14:08

Voir le messageLeonick, le 15 novembre 2011 - 21:23, dit :

regarde s'ils ne proposent pas d'api


En fait, j'ai une base de données de plus de 50.000 villes dans le monde pour lesquelles je souhaite rajouter la latitude et la longitude pour chacune de ces villes.
Il n'y a que dans le fichier xml de msn météo que j'ai trouvé les codes de mes villes avec en parallèle, la latitude et la longitude

C'est pour cette raison que je cherche à extraire ces 2 champs de leur fichier xml sans avoir à le faire à la main vu la quantité de villes de ma base.
0

#8 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 16 novembre 2011 - 14:10

Pourquoi ne pas utiliser l'API de Google Maps (Ou toute autre API similaire) ? Ça me semblerait pourtant plus indiqué.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#9 L'utilisateur est hors-ligne   jcaron 

  • Groupe : Membre+
  • Messages : 864
  • Inscrit(e) : 15-janvier 08
  • Genre:Homme
  • Localisation:Londres

Posté 16 novembre 2011 - 14:21

Ah, je n'avais pas vu ça:

Voir le messageAlainp, le 14 novembre 2011 - 08:39, dit :

J'appelle l'url du fichier xml en guise de $string mais rien après traitement


Ah ben non, tu dois passer le XML que tu reçois (via un file_get_contents par exemple), pas l'URL...

Jacques.
0

#10 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 16 novembre 2011 - 17:26

Voir le messagecaptain_torche, le 16 novembre 2011 - 14:10, dit :

Pourquoi ne pas utiliser l'API de Google Maps (Ou toute autre API similaire) ? Ça me semblerait pourtant plus indiqué.


Depuis plusieurs années, j'utilisais les données fournies dans un fichier xml par un service météo. Ce dernier vient de remplacer l'accès gratuit par un accès payant (plus de 200$ par mois si je veux les mêmes données).
Résultat, je dois changer de fournisseur mais comme toutes mes pages sont référencées avec le code des villes et que le nouveau service que j'ai trouvé utilise la latitude et la longitude, je vais arranger mon script pour continuer d'utiliser le code ville.

Après recherche, seul le fichier xml de MSN permet d'avoir la correspondance code ville et latitude/longitude d'où mon besoin d'extraire ces deux champs de leur fichier xml

et je n'y arrive toujours pas!
0

#11 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 16 novembre 2011 - 18:03

Voir le messagejcaron, le 16 novembre 2011 - 14:21, dit :

Ah ben non, tu dois passer le XML que tu reçois (via un file_get_contents par exemple), pas l'URL...


Merci jcaron, j'ai l'impression d'avoir un peu avancé avec cette idée.
En utilisant un file_get_contents + ta méthode "bourrin" sur le fichier xml mentionné dans mon premier post , voila ce que j'obtiens

lat="44.8557549" long="-0.5782283"44.8557549

C'est déjà un premier pas mais comment je peux conserver uniquement 44.8557549 et -0.5782283
Merci
0

#12 L'utilisateur est hors-ligne   jcaron 

  • Groupe : Membre+
  • Messages : 864
  • Inscrit(e) : 15-janvier 08
  • Genre:Homme
  • Localisation:Londres

Posté 16 novembre 2011 - 18:10

$matches[0] -> lat
$matches[1] -> long

Jacques.
0

#13 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 16 novembre 2011 - 18:24

Voir le messagejcaron, le 16 novembre 2011 - 18:10, dit :

$matches[0] -> lat
$matches[1] -> long

Jacques.


C'est ce que j'ai fait :
$page = file_get_contents('http://weather.service.msn.com/data.aspx?s&weadegreetype=C&culture=fr-
fr&wealocations=wc:FRXX0016');

preg_match('/lat="([-0-9.]+)" long="([-0-9.]+)"/',$page,$matches);
echo $matches[0];
echo $matches[1];


echo $matches[0]; donne lat="44.8557549"
echo $matches[1]; donne long="-0.5782283"44.8557549

D'ailleurs, je ne comprends pas que 44.8557549 soit collé derrière long="-0.5782283"
0

#14 L'utilisateur est hors-ligne   Leonick 

  • Groupe : Hubmaster
  • Messages : 1 313
  • Inscrit(e) : 07-mars 05
  • Genre:Homme
  • Localisation:Val de Marne

Posté 16 novembre 2011 - 18:41

j'aurais échappé le . dans le [] sinon ça représente n'importe quel caractère
0

#15 L'utilisateur est hors-ligne   jcaron 

  • Groupe : Membre+
  • Messages : 864
  • Inscrit(e) : 15-janvier 08
  • Genre:Homme
  • Localisation:Londres

Posté 16 novembre 2011 - 19:07

Non, pas à l'intérieur de [].

Petite erreur de ma part, c'est $matches[1] et [2]. $matches[0] contient l'ensemble de ce qui a "matché", [1] et suivants chacune des expressions entre ().

Jacques.
0

#16 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 16 novembre 2011 - 19:44

Un grand merci Jacques, c'est impeccable
Cà faisait des jours que j'étais la dessus
Bonne soirée
0

#17 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 16 novembre 2011 - 22:19

Pour info, $matches[0] récupérait en fait toute la chaîne lat="44.8557549" long="-0.5782283", alors que $matches[1] donnait la valeur de latitude. C'est pour ça que tu t'étonnais de les voir attachées.
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)