Не возвращать «next_page_token» с помощью поиска рядом или поиска текста, используя библиотеку мест javascript - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь захватить все рестораны в определенном городе, перебирая результаты, полученные в Google, с помощью поблизости поисков или текстового поиска.Пока что я могу получить только первые 20 результатов.Я ожидал увидеть параметр в ответе «next_page_token», который я могу отправить с моим следующим запросом, чтобы получить следующий набор результатов, однако, независимо от того, какой API я выбрал или размер радиуса, я никогда не получу обратно«next_page_token» в моем ответе от Google.

Я попытался специально запросить «pagetoken» в качестве параметра обратного вызова в моей функции обратного вызова, и, к моему удивлению, он предоставляет мне информацию о маркере страницы.Я попытался сопоставить pagetoken.l с pagetoken в моем последовательном запросе, но он все еще возвращает тот же набор результатов.

Я искал онлайн несколько часов и не могу решить эту проблему.

Использование Node и VueJS для выполнения запроса на стороне клиента.Пример кода ниже находится внутри одного из шаблонов VueJS в разделе скриптов.TextSearch практически идентичен, за исключением того, что я заменяю местоположение и радиус на запрос, использующий ключевые слова для выполнения поиска.

Пример использования поблизости поиска

initialize(addressData, placeResults) {
    console.log("Address Data", addressData)
    console.log("Place Results", placeResults)

    this.location = {
        lat: addressData.latitude,
        lng: addressData.longitude
    }

    this.initMap()

},
initMap() {
    console.log("Refs", this.$refs)
    console.log("location", this.location)

    let map = new google.maps.Map(this.$refs.map, {
        center: this.location,
        zoom: 12,
        disableDefaultUI: true,
        scrollwheel: false
    })

    let request = {
        location: this.location,
        radius: 10000,
        type: ['restaurant']      
    }

    let service = new google.maps.places.PlacesService(map)
    service.nearbySearch(request, (results, status, pagetoken) => {
        console.log("Results", results)
        console.log("Status", status)
        console.log("Pagetoken", pagetoken)
        if (pagetoken.hasNextPage) {
            this.hasNextPage = true
            this.pagetoken = pagetoken.l
        }
    })
}

Я выиграл 'отправлять результаты, так как JSON очень длинный, но результаты содержат только массив найденных ресторанов и ничего больше.

Ответ Pagetoken от обратного вызова

{
  "l": "CqQCHwEAAHGTZMjzfdC-1RcLP8jYBOGy7oUFztGWLSWOCQGAcHe4NgVLfJRl1Yl1GH0G-mju4-A-1fwtDChtmoSQn_qNBIkiK8co2KWy28M3BhV95yvLAswbfTIRwB9wZAev2aaRc3Yd2_nY9dWbFMhv-KppnTGKJj7dYndtj-yyUwV2evznSAE_t5Fcd7OYHmBXPHjSL54jfadw2B96wEx_Ju-5O30J14LlXLkJQZHhCNaD-kb-OAofXVeY5My1-LavHDgdkw49vTeiMou7jU4wB7m47ZSWAB2NChYt5tHLeHPA8n7aCRc40cEzNwpI8T3nwrw8tsuBx9Lbh8mToaUbULBSTzKQzr3DC6v2N4AGDuK4v6A_AdzKZVfhD_GNcM1olyQ2xRIQ0sAvkEOTSJ4ByvjcRXs_uhoUm0CPRm7lHLG593au02QlXTEjeg4",
  "j": 1528657652795,
  "hasNextPage": true
}

1 Ответ

0 голосов
/ 12 июня 2018

Согласно документации, третьим параметром в функции обратного вызова близлежащего поиска является объект типа PlaceSearchPagination:

https://developers.google.com/maps/documentation/javascript/reference/3/places-service#PlaceSearchPagination

PlaceSearchPagination предоставляет публичное свойство hasNextPage логического типа и открытого метода nextPage() для получения следующей страницы результатов.

nextPage () - извлекает следующую страницу результатов.Использует ту же функцию обратного вызова, которая была предоставлена ​​для первого поискового запроса.

Я полагаю, вам следует использовать следующий код, чтобы получить следующую страницу результатов, когда она будет доступна

let service = new google.maps.places.PlacesService(map)
service.nearbySearch(request, (results, status, pagetoken) => {
    console.log("Results", results)
    console.log("Status", status)
    console.log("Pagetoken", pagetoken)
    if (pagetoken.hasNextPage) {
        pagetoken.nextPage();
    }
});
...