读取提供JSON数据的API的问题

时间:2019-03-01 21:09:40

标签: php html json api

我想为自己编程一个显示一些公司数据的网页。 我已经找到了一个显示不同值的API,有人可以选择。

https://financialmodelingprep.com/developer/docs#Companies-Financial-Statements

所以我开始整理我的网页并添加了输入。这样,用户可以选择他要搜索的公司。

<input type="text" name="Ticker" placeholder="Ticker Symbol">

然后,在文件末尾,我添加了一个php部分,该部分从URL中选择数据(JSON):

<?php
            if(isset($_GET['Ticker']))
            {
                $Ticker_Name = $_GET['Ticker'];
                echo '<p>Your choosen company is '. $Ticker_Name . '</p>';
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, 'https://financialmodelingprep.com   /api/financials/income-statement/' . $Ticker_Name);
                curl_setopt($ch, CURLOPT_HEADER, 0);
                curl_exec($ch);
                curl_close($ch);
            }           
        ?>

这将显示从api提供的原始信息。 但是我遇到的问题是格式化/访问API提供的json数据。

我最后尝试的是:

<?php
            if(isset($_GET['Ticker']))
            {
                $Ticker_Name = $_GET['Ticker'];
                echo '<p>Your choosen company is '. $Ticker_Name . '</p>';
                $url = file_get_contents('https://financialmodelingprep.com/api/financials/income-statement/' . $Ticker_Name);
                //$daten = file_get_contents($url);
                $json = json_decode($url, true);

                echo $json->Revenue;
            }   
?>  

获取此消息:

注意:试图获取非对象的属性“收入”

不显示任何数据。

如果有人能帮助我,我将非常感谢。

2 个答案:

答案 0 :(得分:0)

之所以会这样,是因为您在 json_decode 中传递了 true ,这意味着它返回了关联数组而不是对象,您可以像 echo $ json [$ Ticker_Name ] ['Revenue'] ['2013-09'] print_r($ json [$ Ticker_Name] ['Revenue'])

尝试此代码

代码段

<?php
            if(isset($_GET['Ticker']))
            {
                $Ticker_Name = $_GET['Ticker'];
                echo '<p>Your choosen company is '. $Ticker_Name . '</p>';
                $url = file_get_contents('https://financialmodelingprep.com/api/financials/income-statement/' . $Ticker_Name);
                $url = str_replace('<pre>','',$url); //Removing <pre> html tag
                $json = json_decode($url, true);
                print_r($json[$Ticker_Name]['Revenue'];
            }   
?>  

注意:此API返回一个无效的json,它在响应的开始处添加了<pre>标签。因此,json_decode始终无法解码,您需要使用str_replace删除该标签。我添加了$url = str_replace('<pre>','',$url);这一行以使其正常工作。

答案 1 :(得分:0)

谢谢您的回答,它正在起作用。

但是,如果我尝试在该输入框附近放置另一个输入框,以使用户正在搜索网页的哪个值不再更新所选输入。 它不再更新。

        <label>Enter Ticker Symbol</label>
        <input type="text" name="Ticker" placeholder="Ticker Symbol">
        <label>Enter your Value</label>
        <input type="text" name="Value" placeholder="Value">

<?php
        if(isset($_GET['Ticker']))
        {
                $Ticker_Name = $_GET['Ticker'];
                $Value = $_GET['Value'];
                echo '<p>Your choosen company is '. $Ticker_Name . '</p>';
                echo '<p>Your choosen value is '. $Value . '</p>';
                $url = file_get_contents('https://financialmodelingprep.com/api/financials/income-statement/' . $Ticker_Name);
                $url = str_replace('<pre>','',$url); //Removing <pre> html tag
                $json = json_decode($url, true);
                print_r($json[$Ticker_Name][$Value]);
        }   
?>  

非常感谢您。