使用 Python 代码从 Foursquare API 中提取特定场地类别

Posted

技术标签:

【中文标题】使用 Python 代码从 Foursquare API 中提取特定场地类别【英文标题】:Extracting specific venue categories from Foursquare API using Python code 【发布时间】:2019-08-06 17:49:05 【问题描述】:

我正在尝试提取巴尔的摩市的 Foursquare 场地数据,但只想获取特定类别(特别是超市、杂货店等)。如何搜索特定场地类别并仅返回特定类型?

我用来提取所需数据的语言(来自 Foursquare API)是 Python,我正在使用 Jupyter Notebooks。不过,我想将场地搜索限制在以下类别:

农贸市场 (4bf58dd8d48988d1fa941735) 杂货店 (4bf58dd8d48988d118951735) 有机杂货 (52f2ab2ebcbc57f1066b8b45) 超市(52f2ab2ebcbc57f1066b8b46)

我只从一个类别开始,并且在运行代码的内核中没有出现错误。但是,当我转到下一个内核时,我收到以下类型的错误:

'TypeError: 字符串索引必须是整数'

这段代码告诉我什么?

def getNearbyVenues(names, latitudes, longitudes, radius=2000, LIMIT=50, categoryId='52f2ab2ebcbc57f1066b8b46'):

    venues_list=[]
    for name, lat, lng in zip(names, latitudes, longitudes):
        print(name)

        # create the API request URL
        url = 'https://api.foursquare.com/v2/venues/search?&client_id=&client_secret=&v=&ll=,&radius=&limit=&categoryId='.format(
            CLIENT_ID, 
            CLIENT_SECRET, 
            VERSION, 
            lat, 
            lng, 
            radius, 
            LIMIT,
            categoryId)

        # make the GET request
        results = requests.get(url).json()["response"]['venues'][0]['id']

        # 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])

    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']

    return(nearby_venues)

上面的代码运行良好,没有返回错误。下面的代码给我带来了问题。

balt_markets = getNearbyVenues(names=balt_crime_df['Neighborhood'],
                                   latitudes=balt_crime_df['Latitude'],
                                   longitudes=balt_crime_df['Longitude']
                                  )

这是错误输出:

TypeError                                 Traceback (most recent call last)
<ipython-input-143-b1d736ce8ff2> in <module>
      2 balt_markets = getNearbyVenues(names=balt_crime_df['Neighborhood'],
      3                                    latitudes=balt_crime_df['Latitude'],
----> 4                                    longitudes=balt_crime_df['Longitude']
      5                                   )

<ipython-input-142-8aee194c1f65> in getNearbyVenues(names, latitudes, longitudes, radius, LIMIT, categoryId)
     27             v['venue']['location']['lat'],
     28             v['venue']['location']['lng'],
---> 29             v['venue']['categories'][0]['name']) for v in results])
     30 
     31     nearby_venues = pd.DataFrame([item for venue_list in venues_list for item in venue_list])

<ipython-input-142-8aee194c1f65> in <listcomp>(.0)
     27             v['venue']['location']['lat'],
     28             v['venue']['location']['lng'],
---> 29             v['venue']['categories'][0]['name']) for v in results])
     30 
     31     nearby_venues = pd.DataFrame([item for venue_list in venues_list for item in venue_list])

TypeError: string indices must be integers

【问题讨论】:

【参考方案1】:

您可以设置intent=browse 和逗号分隔的类别ID,例如

https://api.foursquare.com/v2/venues/search?categoryId=50aa9e094b90af0d42d5de0d,530e33ccbcbc57f1066bbff3,530e33ccbcbc57f1066bbff9,4f2a25ac4b909258e854f55f&intent=browse&client_id=CLIENT_ID&radius=30000&v=20171031&ll=51.51453,-0.12574&client_secret=CLIENT_SECRET&limit=30

【讨论】:

以上是关于使用 Python 代码从 Foursquare API 中提取特定场地类别的主要内容,如果未能解决你的问题,请参考以下文章

如何在Web API中使用C#获取Foursquare OAuth请求代码?

Restkit 从 Foursquare API 返回 nil 响应

foursquare 或 gowalla 从哪里获得他们的位置数据?

应用程序展示从foursquare网站消失

Python Foursquare API Checkin Add 突然开始返回 <Response [403]>

Foursquare 获取场地详情