使用cURL在PHP中获取api数据

时间:2014-01-17 10:01:02

标签: php api curl

我使用和服制作了一个简单的api终点,用于提取阿肯色州水禽报告及其各自的发布日期。

我从Kimono获得以下api url:

curl --include --request GET "http://www.kimonolabs.com/api/e45oypq8?apikey=XXXXX"

因为我不熟悉如何使用cURL提取数据,所以我访问了网页并阅读了多篇文章,使用cURL从api中提取数据的教程。我觉得有大约100万种方法可以做到这一点。我花了太多时间在桌子上敲头。这就是我想出的:

<!DOCTYPE html>
<html>
<body>
  <?php
    $json_string = file_get_contents("http://www.kimonolabs.com/api/e45oypq8?apikey=XXX");
    $parsed_json = json_decode($json_string);
    $title = $parsed_json->{'results'}->{'collection1'}->{'title'};
    $posted = $parsed_json->{'results'}->{'collection1'}->{'posted'};
    echo "${title} \n ${posted}\n\n";
  ?>
</body>
</html>

api端点吐出以下内容(截断了问题的长度):

{
  name: "agfc",
  lastrunstatus: "success",
  lastsuccess: "Fri Jan 17 2014 06:39:54 GMT+0000 (UTC)",
  nextrun: "Sat Jan 18 2014 06:39:54 GMT+0000 (UTC)",
  frequency: "daily",
  newdata: true,
  results: {
      collection1: [
          {
            title: {
            text: "January 8, 2014 Weekly Waterfowl Report",
            href: "http://e2.ma/message/zgkue/nnlu0d"
            },
            posted: "1/8/2014"
            }
          ]
}

我只是想从api端点获取所有数据,并且'echo''$ title'和'$ posted'链接到每个数据点的属性url('href')。

我确信有一种简单的方法可以做到这一点。我错过了什么。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

'collection1'是一个数组。

$title = $parsed_json->{'results'}->{'collection1'}[0]->{'title'}->text;

如果collection1包含多个元素,则必须循环遍历它们。

foreach ($parsed_json->{'results'}->{'collection1'} as $item) {
  $title = $item->title->text;
  $posted = $item->posted;
}

答案 1 :(得分:0)

使用curl的一种方法

<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.kimonolabs.com/api/e45oypq8?apikey=xxxx");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$parsed_json = curl_exec($ch);
$parsed_json = json_decode($parsed_json);

foreach($parsed_json->results->collection1 as $collection){
    echo $collection->title->text . '<br>';
    echo $collection->title->href . '<br>';
    echo $collection->posted . '<br><br>';
}

curl_close($ch);
?>

你做的另一件事

<?php
$json_string = file_get_contents("http://www.kimonolabs.com/api/e45oypq8?apikey=XXX");
$parsed_json = json_decode($json_string);
//var_dump($parsed_json->results->collection1);

foreach($parsed_json->results->collection1 as $collection){
    echo $collection->title->text . '<br>';
    echo $collection->title->href . '<br>';
    echo $collection->posted . '<br><br>';
}
?>

答案 2 :(得分:0)

试试吧:

$json_string = file_get_contents("http://www.kimonolabs.com/api/e45oypq8?apikey=YOUR_API_KEY");
    //json string to array
$parsed_arr = json_decode($json_string,true);


$collection1=$parsed_arr['results']['collection1'];
for($i=0;$i<count($collection1);$i++)
{
    echo $collection1[$i]['title']['text']."--".$collection1[$i]['posted']."<br/>"; 
}