我正在尝试从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。
答案 0 :(得分:1)
返回详尽的结果不是搜索API的预期用例,因此使用MQL或批量数据转储可以做得更好。
由于这第一个查询返回完整的100个结果,我假设您的PHP中存在错误。如果我不得不猜测,我猜你要么计算迭代次数,要么计算最后一次迭代中返回的结果数,可能是后者。