Yahoo Weather API返回Null结果问题排查求助
解决Yahoo Weather API返回Null的问题
首先得给你一个关键信息:Yahoo的Weather API(包括基于YQL的weather.forecast查询)早在2019年就正式停止服务了,这是你调用返回Null的核心原因——这个接口已经完全无法使用了,不管你的代码写得多么正确,都拿不到有效数据。建议你更换其他公开的天气API来实现功能。
不过,就算忽略API停用的问题,你的代码本身也存在几个语法和逻辑问题,我一起指出来:
YQL查询的格式错误
你在geo.places的text参数里直接拼接了经纬度,但没有用双引号包裹,这会导致YQL解析失败。正确的写法应该把经纬度字符串用双引号括起来:$yql_query = 'select * from weather.forecast where woeid in (SELECT woeid FROM geo.places WHERE text="'.$time->latitude.','.$time->longitude.'")';URL参数拼接的实体转义问题
你在拼接URL时用了&(HTML实体),但在PHP的URL字符串里应该直接使用&,否则会被当作参数名的一部分,导致Yahoo服务器无法正确识别format、diagnostics等参数:$yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json&diagnostics=true&callback=";cURL代码不完整
你的代码里$session = cu...没有写完,要确保cURL正确配置并执行。比如需要设置CURLOPT_RETURNTRANSFER来获取返回的内容,否则cURL会直接输出结果而不是返回给变量:$session = curl_init($yql_query_url); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); $json_data = curl_exec($session); curl_close($session); // 解析JSON $data = json_decode($json_data, true);
但再次强调:以上代码修正只是针对语法问题,现在Yahoo的这个API已经完全不能用了,所以你必须更换其他天气服务提供商的接口才能完成你的天气系统开发。
内容的提问来源于stack exchange,提问作者Ghulam Abbas
相关产品推荐
相关产品推荐

