如何在 Python 的 VKontakte 中使用偏移量?

How to use offset in VKontakte with Python?

我正在尝试构建一个脚本,我可以在其中获取特定位置的签到。出于某种原因,当我指定纬度时,长坐标 VK 从不 returns 任何签到,所以我必须先获取位置 ID,然后从该列表中请求签到。但是我不确定如何使用偏移功能,我认为它应该有点像分页功能。

到目前为止我有这个:

import vk
import json


app_id =   #enter app id 
login_nr =    #enter your login phone or email
password = ''   #enter password  
vkapi = vk.API(app_id, login_nr, password)

vkapi.getServerTime()

def get_places(lat, lon, rad):

    name_list = []
    try:
        locations = vkapi.places.search(latitude=lat, longitude=lon, radius=rad)
        name_list.append(locations['items'])
    except Exception, e:
        print '*********------------ ERROR ------------*********'
        print str(e)

    return name_list


 # Returns last checkins up to a maximum of 100
 # Define the number of checkins you want, 100 being maximum

def get_checkins_id(place_id,check_count):

    checkin_list= []

    try:
        checkins = vkapi.places.getCheckins(place = place_id, count = check_count)
        checkin_list.append(checkins['items'])
    except Exception, e:
        print '*********------------ ERROR ------------*********'
        print str(e)

    return checkin_list

我最终想做的是将两者组合成一个函数,但在此之前我必须弄清楚偏移量是如何工作的,当前的 VK API 文档对此解释得不太好。我希望代码读取类似于:

def get_users_list_geo(lat, lon, rad, count):
    users_list = []
    locations_lists = []
    users = []

    locations = vkapi.places.search(latitude=lat, longitude=lon, radius=rad)

    for i in locations[0]:
        locations_list.append(i['id'])

    for i in locations:
        # Get each location ID 
        # Get Checkins for location
        # Append checkin and ID to the list

据我所知,我必须在签到时计算偏移量,然后以某种方式计算签到次数超过 100 次的位置。无论如何,我将不胜感激任何类型的帮助、建议或任何东西。如果您对脚本有任何建议,我也很想听听。我正在自学 Python 很明显我到目前为止还不是很好。

谢谢!

我和 VK API 和 javascript 一起工作过,但我认为,逻辑是一样的。

TL;DR:偏移量是一些结果(从第一个开始),API 应该在响应中跳过

例如,您进行查询,应该 return 1000 个结果(假设您知道结果的确切数量)。 但是VKreturn给你每次请求只有100。那么,如何获得其他900呢?

你对API说:给我next 100个结果。接下来是偏移量——您想要跳过的结果数,因为您已经处理了它们。所以,VK API 需要 1000 个结果,跳过前 100 个,然后 return 给你下一个(第二个)100.

此外,如果您在第一段中谈论此方法 (http://vk.com/dev/places.getCheckins),请检查您的 lat/long 是浮点数,而不是整数。尝试 swap lat/long 可能会有用 - 也许你把它们弄混了?