8

请假设我对我将要提到的任何事情一无所知,因为我真的不知道。


大多数 OpenData 站点都有可能以 .csv 或 .json 格式(示例)导出呈现的文件。他们也总是有一个 API 选项卡(示例 API)。

我认为使用 API 意味着如果数据更新,您将收到更改,而将其导出为 .csv 将意味着内容将不再更改。

我的问题是:如何使用此 API 代码来显示导出 .csv 文件时会得到的同一张表。

你会使用数据库来提取这些信息吗?什么样的数据库以及如何将 API 链接到数据库?

4

2 回答 2

14

我认为使用 API 意味着如果数据更新,您将收到更改,而将其导出为 .csv 将意味着内容将不再更改。

从某种意义上说,您是正确的,如果您将 csv 下载到您的计算机,则该 csv 文件将不再更新。
API 是您可以调用的东西——在这种情况下,您可以调用 API,说“嘿,您有关于 xxx 的最新数据吗?”,您将获得有关您所询问内容的最新信息。但这并不意味着,当有新的更新时,该站点会通知您 - 您必须不断调用 API(每小时、每天等)以查看是否有任何更改。

我的问题是:如何使用此 API 代码来显示导出 .csv 文件时会得到的同一张表。

你会:

  1. 从服务器代码或云服务调用 API
  2. 让服务器代码或云服务解密(或“解析”)响应
  3. 使用解密后的响应创建一个由 HTML 组成的表,或将其放入数据库中

你会使用数据库来提取这些信息吗?什么样的数据库以及如何将 API 链接到数据库?

您不一定需要数据库来提取信息,尽管数据库可以很好地将最终数据放入其中。
您首先需要某种方式来“调用 REST API”。有很多方法可以做到这一点 - 使用 Shell 脚本、使用 Python、使用 Excel VBA 等。
我知道这很难可视化,所以这里是第 1 步的示例,您可以在其中检索信息。
尝试在 Chrome 浏览器的地址栏中输入以下 URL(取自您向我们展示的网站),然后点击输入 http://opendata.brussels.be/api/records/1.0/search/?dataset=associations-俱乐部运动

看看它是如何返回大量带有许多括号和逗号的文本的?您基本上已经要求该站点给您一些数据,这是他们返回的响应(不同的浏览器工作方式不同 - IE 要求您将响应下载为 .json 文件)。您基本上已经调用了 API。

要更清晰地查看这些数据,请打开 Chrome 浏览器的开发者工具,然后输入以下 JavaScript 代码

var url = 'http://opendata.brussels.be/api/records/1.0/search/?dataset=associations-clubs-sportifs';

var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.onload = function() {
    if (xhr.status === 200) {
        // success
        console.log(JSON.parse(xhr.responseText));
    } else {
        // error
        console.log(JSON.parse(xhr.responseText));
    }
};
xhr.send();

当您按 Enter 键时,会返回一个响应,说明“对象”。如果您单击箭头,您会看到这是我们刚刚看到的数据的更清晰版本 - 更易于阅读。

在此处输入图像描述

在本例中,我使用 JavaScript 来检索数据,但您可以使用任何您想要的代码。您可以继续使用 JavaScript 来破译数据、操作数据并将其推送到数据库中。

kintone是一个在线云数据库,您可以在其中对其进行自定义以运行 JavaScript 代码,并将数据存储在其数据库中,因此您将在线存储数据,如下图所示。这只是您可以使用的数据库的一个示例。

在此处输入图像描述

还有其他云服务允许您将不同服务的 API 端点相互连接,例如 IFTTT 和 Zapier,但我不确定它们是否与开放数据连接。

于 2016-10-18T08:19:44.973 回答
0

您链接到的页面显示 API 以 JSON 对象的形式返回值。要访问数据,您只需发送适当的 http 请求,响应将是JSON格式的请求数据。如果您愿意,您可以通过浏览器发送类似的请求。

如果您需要处理数据,大多数语言都允许以编程方式操作 JSON 对象。

于 2016-10-15T23:06:01.137 回答