YQL查询返回错误

时间:2014-02-23 21:37:00

标签: php yql yahoo-finance

所以我一直在研究一个学校项目,并且有时会让网站的代码工作,但有时会返回错误:

Notice: Trying to get property of non-object in C:\xampp\htdocs\schoolproj\getdata.php on line 27

Notice: Trying to get property of non-object in C:\xampp\htdocs\schoolproj\getdata.php on line 27
Ask 
Notice: Trying to get property of non-object in C:\xampp\htdocs\schoolproj\getdata.php on line 39

Notice: Trying to get property of non-object in C:\xampp\htdocs\schoolproj\getdata.php on line 39

用于php代码:

<html>
 <body>

  <?php echo $_POST['name']; ?>!<br>


<?php  

$endpoint = "http://query.yahooapis.com/v1/public/yql";

$ticker = "'".$_POST["ticker"]."'";
$query = urlencode("env 'store://datatables.org/alltableswithkeys';select * from yahoo.finance.quotes where symbol in (".$ticker.")");
$ch = curl_init($endpoint.'?q='.$query. '&format=json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);

if (curl_error($ch)){
    die(curl_error($ch));
}
curl_close($ch);

//echo'<pre>';

$result = json_decode($result);


$symbol =  $result->query->results->quote->symbol;
print_r($symbol);




?>

Ask

<?php

$Ask = $result->query->results->quote->Ask;
print_r($Ask);

?>

 </body>
 </html> 

我想知道是否有人就如何永久解决问题或进行某种错误处理提出了一些建议。我是新手,所以任何帮助都会很棒。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您提供的代码是整个getdata.php文件,那么有问题的行是:

  • l.27:$symbol = $result->query->results->quote->symbol;
  • l.39:$Ask = $result->query->results->quote->Ask;

错误告诉你,在这一点你正在访问一个不是对象的属性。

考虑到你说它有时是有效的,有时却没有,有可能在您的查询中(根据您的输入)或datatables.org偶尔会出现错误(请参阅this old question on developer.yahoo表示查询当datatables.org没有响应时会失败。

然后如果出现错误,你收到的json将有一个如下所示的结构(这是我在尝试你的代码时最初得到的一个错误,因为我忘了把引号括起来)。

{
    "error": {
        "lang":"en-US",
        "description":"Query syntax error(s) [line 1:95 mismatched input 'in' expecting ISNOTNULL]"
    }
}

在此结果中,您没有query属性,因此在尝试访问它时会失败。然后,您应首先检查是否存在错误(查找error属性),并且仅在没有错误的情况下尝试访问查询结果。

要检查错误,您可以使用类似

的内容
if (property_exists($result, "error")) {
    // your error handling
} else {
    // your current code accessing the results
}