1

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を印刷します。

4

1 に答える 1

1

網羅的な結果を返すことは、検索 API の意図されたユース ケースではないため、MQL またはバルク データ ダンプを使用することをお勧めします。

この最初のクエリは完全な 100 件の結果を返すため、PHP にバグがあると思います。推測する必要がある場合は、反復回数または最後の反復で返された結果の数を数えていると思いますが、おそらく後者です。

于 2013-05-19T16:59:25.433 に答える