API-интерфейс Foursquare Venue и количество результатов более эффективным способом?

Я хотел бы спросить, есть ли более эффективный способ получить более 50 результатов помимо этих вариантов?

Я использую текущий API Foursquare для поиска места проведения https://developer.foursquare.com/docs/venues/search .

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

Есть ли альтернативное решение? Заранее спасибо.


person cndv    schedule 15.12.2011    source источник


Ответы (5)


На самом деле здесь не упоминается еще один вариант (хотя и не нумерация страниц)

Использование (экспериментального?) фильтра categoryId.

Вы можете выполнить поиск одной точки (ll) несколько раз с разными идентификаторами категорий, что даст вам много результатов (некоторые дубликаты, поскольку места могут иметь более одной категории).

Таким образом, вы можете искать места «Еда» и «Ночная жизнь» в одном и том же месте, получая 100 результатов на стенде из 50.. как сказано, это 100 результатов, но не уникальные результаты, могут быть дубликаты. Я думаю, что это более эффективно, чем пытаться поиграть с радиусом просмотра.

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

Но да, иметь какой-то способ извлечь более 50 в одной точке невозможно, но было бы неплохо :)

person Jonathan Levison    schedule 16.12.2011
comment
Только что наткнулся на эту старую тему. Мои мысли: используйте приведенный выше идентификатор категории, но вместо использования точек широты / долготы используйте параметры se (юго-восток) и nw (северо-запад) для определения ограничивающей рамки. Это позволяет вам лучше покрыть заданную область, чем перекрывающиеся вызовы широты / долготы. Начните с небольшого разумного ограничивающего прямоугольника, который в большинстве случаев не дает 50 результатов. (максимум, который указывает, что их, вероятно, больше). Для тех, которые возвращают 50 результатов, разделите ограничивающую рамку на 4, промойте и повторите. - person Geert-Jan; 28.11.2012
comment
Использование намерения в качестве просмотра дает аналогичный результат, если вы представляете широту и длину с радиусом. - person Nath; 10.09.2014

вы должны использовать исследование мест проведения со смещением и ограничением в качестве параметров, исследование мест проведения дает вам totalResults, и вы можете использовать этот ответ для расчета количества страниц, которые вам нужны в разбиении на страницы

например, предположим, что totalResults равен 90 (обратите внимание на значение параметра offset и limit) в первом запросе: =category_id&intent=browse&offset=0&limit=30" rel="nofollow">https://api.foursquare.com/v2/venues/explore?client_id=client_id&client_secret=client_secret&v=20150825&near=city_name&categoryId=category_id&intent=browse&offset=0&limit=30

во втором запросе: https://api.foursquare.com/v2/venues/explore?client_id=client_id&client_secret=client_secret&v=20150825&near=city_name&categoryId=category_id&intent=browse&offset=30&limit=30

в третьем запросе: https://api.foursquare.com/v2/venues/explore?client_id=client_id&client_secret=client_secret&v=20150825&near=city_name&categoryId=category_id&intent=browse&offset=60&limit=30

для 90 результатов вы можете получить все записи с тремя вышеуказанными запросами

person atf.sgf    schedule 26.07.2015

Не боюсь. В настоящее время нумерация страниц отсутствует, чтобы найти больше мест, вам нужно переместить область поиска, как в ответах, которые вы выделили. Я согласен, но разбиение на страницы было бы удобно!

person Martin    schedule 16.12.2011
comment
Да, было бы неплохо, я думаю, я попробую комбинацию перемещения области поиска и изменения идентификатора категории. - person cndv; 16.12.2011

Для конечной точки проводника это сработало для меня: если максимальное количество возвращаемых результатов, например, равно 100, просто используйте offset=100 в следующем вызове, который даст вам следующие 100 результатов, начиная со 100 (смещение). Повторяйте (например, используя цикл while) и продолжайте увеличивать смещение на 100, пока не достигнете общего числа или результатов (которые возвращаются в API для totalResults). Мой первый пост о переполнении стека, я пытался ответить как можно яснее

person Wouter Bouma    schedule 20.04.2020

def getNearbyVenues(neighborhoods, latitudes, longitudes, radius=500,ven_num=300):
 
    venues_list=[]
    for name, lat, lng in zip(neighborhoods, latitudes, longitudes):
        i=0
        while (i < ven_num+50):
            
        
            url = 'https://api.foursquare.com/v2/venues/explore?&client_id={}&client_secret={}&v={}&ll={},{}&radius={}&offset={}&limit={}'.format(
            CLIENT_ID, 
            CLIENT_SECRET, 
            VERSION, 
            lat, 
            lng, 
            radius,
            i,
            LIMIT)
            
        # make the GET request
            results = requests.get(url).json()['response']['groups'][0]['items']
        
        # return only relevant information for each nearby venue
            venues_list.append([(
            name, 
            lat, 
            lng, 
            v['venue']['name'], 
            v['venue']['location']['lat'], 
            v['venue']['location']['lng'],  
            v['venue']['categories'][0]['name']) for v in results])
            i=i+50
            

    nearby_venues = pd.DataFrame([item for venue_list in venues_list for item in venue_list])
    nearby_venues.columns = ['Neighborhood', 
                  'Neighborhood Latitude', 
                  'Neighborhood Longitude', 
                  'Venue', 
                  'Venue Latitude', 
                  'Venue Longitude', 
                  'Venue Category']
    print('Ok')
    return(nearby_venues)

приведенный выше код отлично сработал со мной, где переменная ven_num – это желаемый лимит для звонков в заведения в определенном районе

person mba_sy    schedule 12.12.2020