getElementsByTagName() on a non-object

Petit nouveau ! | 5 Messages

29 juin 2013, 18:53

bonjour,
j'ai erreur php :
Fatal error: Call to a member function getElementsByTagName () on a non-object in /weather /classes/BxWeatherModule.php on line 37
l'erreur ne se produit pas toujours ,parfois sa fonctionne bien


voiçi la fonction:
function serviceWeatherIndexPage(){
include("geoipcity.inc");
include("geoipregionvars.php");
$ip = $_SERVER['REMOTE_ADDR'];
$weather_feed = "";
$pathr= BX_DOL_URL_ROOT;
$gi = geoip_open("../GeoLiteCity.dat",GEOIP_STANDARD);
$record = geoip_record_by_addr($gi,$ip);
geoip_close($gi);
$city = $record->city;
if ($city == "") 
    $city = "Sydney";
$url_post = "http://where.yahooapis.com/v1/places.q('".urlencode($city)."')?appid=foOF4CzV34EFIIW4gz1lx0Ze1em._w1An3QyivRalpXCK9sIXT5de810JWold3ApkdMdCrc-";
$weather_feed = file_get_contents($url_post);
$objDOM = new DOMDocument();
$objDOM->loadXML($weather_feed);
$woeid = $objDOM->getElementsByTagName("place")->item(0)->getElementsByTagName("woeid")->item(0)->nodeValue;
}
le fichier xml:

Code : Tout sélectionner

<places xmlns="http://where.yahooapis.com/v1/schema.rng" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:start="0" yahoo:count="1" yahoo:total="38"> <script>...</script> <place yahoo:uri="http://where.yahooapis.com/v1/place/615702" xml:lang="fr-FR"> <woeid>615702</woeid> <placeTypeName code="7">Ville</placeTypeName> <name>Paris</name> <country type="Pays" code="FR" woeid="23424819">France</country> <admin1 type="Région" code="" woeid="7153319">Île-de-France</admin1> <admin2 type="Département" code="FR-75" woeid="12597155">Paris</admin2> <admin3/> <locality1 type="Ville" woeid="615702">Paris</locality1> <locality2/> <postal/> <centroid> <latitude>48.856930</latitude> <longitude>2.341200</longitude> </centroid> <boundingBox> <southWest> <latitude>48.658291</latitude> <longitude>2.086790</longitude> </southWest> <northEast> <latitude>49.046940</latitude> <longitude>2.637910</longitude> </northEast> </boundingBox> <areaRank>3</areaRank> <popRank>13</popRank> </place> </places>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 juin 2013, 13:22

salut,


je dirais que ton file_get_contents ne retourne pas toujours quelque chose ou n'est pas toujours complet? (limitation du nombre de requête par le webservice ?)

affiche $weather_feed poru en être certain.

Tu pourrais aussi utiliser simplexml pour simplifier la chose (au pire une requête xpath ;) ).


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

30 juin 2013, 14:09

quand j’utilise un proxy sa marche il me détecte avec la ville sacranton au état unis
$city = $record->city;
if ($city == "")
    $city = "Sydney";
$url_post = "http://where.yahooapis.com/v1/places.q('".var_dump(urlencode($city))."')?appid=foOF4CzV34EFIIW4gz1lx0Ze1em._w1An3QyivRalpXCK9sIXT5de810JWold3ApkdMdCrc-";
$weather_feed = file_get_contents($url_post);
$objDOM = new DOMDocument();
$objDOM->loadXML($weather_feed);
$woeid = $objDOM->getElementsByTagName("place")->item(0)->getElementsByTagName("woeid")->item(0)->nodeValue;
le probléme c'est que quand le nom de la ville a un accent exemple : garge-lés-gonésse

ça ne fonctionne pas ,

j'ai cette erreur :

string(20) "Garges-l%E8s-gonesse"
Warning: file_get_contents(http://where.yahooapis.com/v1/places.q( ... ApkdMdCrc-) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /homez.627/dolphint/www/Dolphin-Boonex-Templates/modules/doldesign/newsinfos/weather/index.php on line 19

Warning: DOMDocument::loadXML() [domdocument.loadxml]: Empty string supplied as input in /homez.627/dolphint/www/Dolphin-Boonex-Templates/modules/doldesign/newsinfos/weather/index.php on line 21

Fatal error: Call to a member function getElementsByTagName() on a non-object in /homez.627/dolphint/www/Dolphin-Boonex-Templates/modules/doldesign/newsinfos/weather/index.php on line 22

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 juin 2013, 15:42

d'après ce que j'ai testé rapidement le places.q('') avec la chaine vide ne plait pas, j'ai ajouté paris et aucune problème.

et en mettant directement dans un navigateur l'url suivante : http://where.yahooapis.com/v1/places.q( ... ApkdMdCrc-

tu a un bien résultat

[xml]<places xmlns="http://where.yahooapis.com/v1/schema.rng" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:start="0" yahoo:count="1" yahoo:total="1">
<place yahoo:uri="http://where.yahooapis.com/v1/place/55863480" xml:lang="fr-FR">
<woeid>55863480</woeid>
<placeTypeName code="7">Ville</placeTypeName>
<name>Garges-Les-Gonesse</name>
<country type="Pays" code="FR" woeid="23424819">France</country>
<admin1 type="Région" code="" woeid="7153319">Île-de-France</admin1>
<admin2 type="Département" code="FR-95" woeid="12597124">Val-d'Oise</admin2>
<admin3 type="Zone Administrative Locale" code="" woeid="12637397">Garges-Les-Gonesse</admin3>
<locality1 type="Ville" woeid="55863480">Garges-lès-Gonesse</locality1>
<locality2/>
<postal type="Code postal" woeid="12728415">95140</postal>
<centroid>
<latitude>48.970951</latitude>
<longitude>2.399240</longitude>
</centroid>
<boundingBox>
<southWest>
<latitude>48.954498</latitude>
<longitude>2.382620</longitude>
</southWest>
<northEast>
<latitude>48.981350</latitude>
<longitude>2.434440</longitude>
</northEast>
</boundingBox>
<areaRank>3</areaRank>
<popRank>10</popRank>
</place>
</places>[/xml]

test avec un urlencode pour remplacer les accents par les équivalents "url" ça devrait aller mieux ;)


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

30 juin 2013, 21:19

salut,
j'ai déjà tester avec url encode
http://where.yahooapis.com/v1/places.q('".urlencode($city)."')

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 juin 2013, 21:25

et ?

sinon test le retour ne contient pas le message 400, si c'est le cas tu affiche rien ;)


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

30 juin 2013, 22:18

voiçi le lien de l'application http://dolphintemplatesboonex.com/Dolph ... /index.php
si on rentre cette url http://dolphintemplatesboonex.com/Dolph ... /index.php
dans un proxy comme içi :http://www.evade123.com/
sa fonctionne

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 juin 2013, 23:25

la je dirais que tu est black listé ?
regarde dans la doc de l'api que tu interroge il y a des grande chances que le nombre de requête soit restreint.

comme déjà dit, traite correctement le retour afin de ne pas bloquer ta page sur cette erreur.
tu test le tag error existe, si oui tu affiche un message d'erreur, sinon tu récupère les infos.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

03 juil. 2013, 21:10

merci pour ton aide,mais j'abandonne ,pas moyen de faire marcher cette appli