【问题标题】:SimpleXML parse errorSimpleXML 解析错误
【发布时间】:2012-12-28 19:50:06
【问题描述】:
<a href="http://maps.apple.com/?ll=<?php echo $_GET[q] ?>" style="text-
decoration:none;color:gray;"><div class="box" style="position:absolute;top:0px;left:0px;font-family:Lato;"><span style="float:left;">Directions</span><span style="color:#F2473F;float:right;">About <?php
$lat = $_GET['lat'];
$long = $_GET['long'];
$q = $_GET['q'];
$mysongs = simplexml_load_file('http://www.mapquestapi.com/geocoding/v1/address?key=Fmjtd%7Cluuan1urn9%2Cb0%3Do5-968206&location=' . $q . '&callback=renderGeocode&format=xml');
$lat2 = $mysongs->results[0]->result[0]->result[0]->locations[0]->location[0]->latLng[0]->lat;
$long2 = $mysongs->results[0]->result[0]->result[0]->locations[0]->location[0]->latLng[0]->lng;
$mysongs4 = simplexml_load_file('http://www.mapquestapi.com/directions/v1/route?key=Fmjtd%7Cluuan1u2nh%2C2a%3Do5-96rw5u&from=' . $lat . ',' . $long . '&to=' . $lat2 . ',' . $long2 . '&callback=renderNarrative&outFormat=xml');
$vari = $mysongs4->route[0]->time;
$vari = $vari / 60;
echo round($vari);
?> minutes</span><br></div>

我做错了什么? 变量 $lat2 和 $long2 为空。当我 print_r $mysongs 时,它说 API 密钥是错误的,但它不是,它返回一个 403 错误。

我很确定这是我在 $mysongs 中发送 URI 的方式的问题,(因为我之前使用相同的 API 也遇到过类似的问题),但我不太确定在哪里。

我正在做的请求是 ?q=19540 Jamboree Rd Ste 200 Irvine, CA&lat=33.852471&long=-117.7325256。

非常感谢!

【问题讨论】:

  • 403 表示Forbidden。可能您需要先进行身份验证。
  • @shiplu.mokadd.im 在 MapQuest API 中,您通过 API 密钥进行身份验证。正如我在帖子中所说,API 密钥是正确的。我很确定。 “当我 print_r $mysongs 时,它说 API 密钥是错误的,但它不是,它返回一个 403 错误。我很确定这是我在 $mysongs 中发送 URI 的方式的问题, (因为我之前使用相同的 API 也遇到过类似的问题),但我不太确定在哪里。”
  • 请向我们展示您正在使用的请求变量(URL 参数)的内容,谢谢。哦等等,没关系 - 我现在在问题中看到了!
  • @RayPaseur 我在我的原始帖子中发布了“?q=19540 Jamboree Rd Ste 200 Irvine, CA&lat=33.852471&long=-117.7325256”。
  • @RayPaseur 试过了,还是不行。 :(

标签: php xml simplexml


【解决方案1】:

这对我来说很完美。也许以此为基础,从那里开始。 http://www.laprbass.com/RAY_temp_solene.php

<?php // RAY_temp_solene.php
error_reporting(E_ALL);
echo "<pre>";


// API KEYS
require_once('api.php');

// REQUEST VARIABLES SIMULATED HERE
$qadr = urlencode('19540 Jamboree Rd Ste 200 Irvine, CA');
$qlat = 33.852471;
$qlng = -117.7325256;

// CALL THE MAPQUEST SERVICE
$mysongs = simplexml_load_file('http://www.mapquestapi.com/geocoding/v1/address?key=' . MAPQUEST_API . '&location=' . $qadr . '&callback=renderGeocode&format=xml');

// SHOW THE RESPONSE
var_dump($mysongs);

// ISOLATE THE GEOCODE OF THE RESPONSE
$lat = (string)$mysongs->results->result->locations->location->latLng->lat;
$lng = (string)$mysongs->results->result->locations->location->latLng->lng;

// DO SOMETHING ELSE
$mysongs4 = simplexml_load_file('http://www.mapquestapi.com/directions/v1/route?key=' . MAPQUEST_API . '&from=' . $qlat . ',' . $qlng . '&to=' . $lat . ',' . $lng . '&callback=renderNarrative&outFormat=xml');

// SHOW THE RESPONSE
var_dump($mysongs4);

$vari = $mysongs4->route[0]->time;
$vari = $vari / 60;

// THE FINAL DATA WE WANT TO FIND
echo '<h1>';
echo round($vari);
echo '</h1>';

【讨论】:

  • 非常感谢你的帖子,虽然我很想知道我做错了什么......
  • 我不知道。我不考虑代码——我认为是数据。当我可以看到数据时,我几乎总是发现代码是自己编写的。我只是不够聪明,无法调试其他人的代码;我自己的代码是一个完整的挑战。我的猜测,也只是猜测,是 URL 需要 urlencode()
  • 啊,是的!我找到了!我要使用 $_GET,我必须为所有这些都做 urlencode!很抱歉……非常感谢!!! :)
  • 是的,PHP 在将 URL 加载到 $_GET 之前会自动对其进行解码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多