我想获取此YQL查询的天气预报的代码元素,问题是这会返回null。
php
var_dump(getResultFromYQL());
function getResultFromYQL( ) {
$yql_query_url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D946738&format=json&diagnostics=true&callback=?";
$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($session);
curl_close($session);
return json_decode($json);
}
?>
好的,我找到了解决方案 PHP
$Jakarta = 946738; /* Jakarta */
/* Use cURL to query the API for some XML */
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://weather.yahooapis.com/forecastrss?w='.$Jakarta.'&u=f');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$weather_rss = curl_exec($ch);
curl_close($ch);
/* Create an object of the XML returned */
$weather = new SimpleXMLElement($weather_rss);
/*
* Since I don't want to figure out an image system, I'll use Weather.com's (what Yahoo does)
* by pulling the image directly out of the returned API request. This could be done better.
*/
$weather_contents = $weather->channel->item->description;
// preg_match_all('/<img[^>]+>/i',$weather_contents, $img);
// $weather_img = $img[0][0];
/* Get clean parts */
$weather_cond = $weather->channel->item->xpath('yweather:condition');
/* Function to convert Wind Direction from given degree units into Cardinal units */
?>
hp
print $weather_cond[0]->attributes()->code;
?>
</div>
</div>
</div>
</div>
答案 0 :(得分:1)
删除callback=?
查询部分。它适用于JavaScript回调函数。
工作网址应为:$yql_query_url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D946738&format=json&diagnostics=true";
<强>更新强>
工作代码:(在PHP 5.3.27和5.4.17上测试)
<?php
function getResultFromYQL() {
$yql_query_url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D946738&format=json&diagnostics=true";
$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($session);
curl_close($session);
return json_decode($json);
}
var_dump(getResultFromYQL());
?>