2013-05-18 2 views
1

Я пытаюсь найти все туристические направления из Freebase API. Согласно документации, я использую курсор и предельные параметры. Я начинаю с курсора в 0 и предел 100, затем добавляю 100 к курсору на каждой итерации. Проблема в том, что я получаю только 76 результатов таким образом. В базе данных Freebase должно быть 1500 мест для поездок.Отслеживание путешествий в Freebase

Документация:

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.

ответ

1

Возвращение исчерпывающих результатов не намеренный случай использования для поиска API, так что это было бы лучше сделано с использованием MQL или массивных дампов данных.

Поскольку этот самый первый запрос возвращает 100 результатов, я предполагаю, что на вашем PHP есть ошибка. Если бы я должен был догадаться, я бы предположил, что вы либо подсчитываете количество итераций, либо количество результатов, возвращаемых на последней итерации, возможно, последнее.

+0

Спасибо Том, я решил проблему с помощью MQL. Я не думаю, что в моем коде есть ошибка. Я попытался вызвать API вручную из браузера, и я не смог получить больше результатов tann 76. Я думаю, что может быть ошибка в API поиска. Но MQL API работает, поэтому я использовал это. –

+0

Я протестировал его, прежде чем я написал свой ответ и получил полные результаты из 100 результатов для каждой из первых двух страниц, используя OpenRefine для извлечения и анализа результатов. –