【问题标题】:Paginating over travel destinations in Freebase在 Freebase 中对旅游目的地进行分页
【发布时间】:2013-05-18 22:57:47
【问题描述】:

我正在尝试从 Freebase API 获取所有旅行目的地。根据文档,我正在使用光标和限制参数。我从 0 处的光标开始并限制 100,然后在每次迭代中将 100 添加到光标。问题是我这样只能得到 76 个结果。 Freebase 数据库中应该有 cca​​ 1500 个旅游目的地。

文档:

https://developers.google.com/freebase/v1/search

这是我的代码:

<?php

require_once __DIR__ . '/vendor/autoload.php';

$apiKey = 'SUPER_SECRET_API_KEY';

use Guzzle\Http\Client;

//// GOOGLE FREEBASE
$client = new Client('https://www.googleapis.com');

$cursor = 0;
$limit = 100;
$results = array();

do {

    $request = $client->get('/freebase/v1/search');
    $request->getQuery()->set('key', $apiKey);
    $request->getQuery()->set('filter', '(all type:/travel/travel_destination)');
    $request->getQuery()->set('cursor', $cursor);
    $request->getQuery()->set('limit', $limit);
    $request->getQuery()->set('indent', 'true');
    $request->getQuery()->set('query', '');

    $response = $request->send()->json();

    foreach ($response['result'] as $result) {
        $results[] = $result;
    }

    $cursor += $limit;

} while (count($response['result']) > 0);

echo count($results);exit;

打印 76。

【问题讨论】:

    标签: php google-api freebase


    【解决方案1】:

    返回详尽的结果并不是搜索 API 的预期用例,因此最好使用 MQL 或批量数据转储来完成。

    由于第一个查询返回完整的 100 个结果,我假设您的 PHP 中存在错误。如果我不得不猜测,我猜你要么计算迭代次数,要么计算上一次迭代中返回的结果数,可能是后者。

    【讨论】:

    • 感谢 Tom,我已经使用 MQL 解决了这个问题。顺便说一句,我认为我的代码中没有错误。我曾尝试从浏览器手动调用 API,但我永远无法获得更多的 tann 76 结果。我认为搜索 API 中可能存在错误。但是 MQL API 有效,所以我使用了它。
    • 我在写答案之前对其进行了测试,并使用 OpenRefine 获取和解析结果的前两页中的每一页都获得了 100 个结果的完整返回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多