2015-02-11 5 views
0

Я пытаюсь создать сценарий, где я могу получить регистрационные данные для определенного места. По какой-то причине, когда я указываю lat, длинные координаты VK никогда не возвращают никаких проверок, поэтому я должен сначала получить идентификаторы местоположений, а затем запросить учетные записи из этого списка. Однако я не уверен, как использовать функцию смещения, которая, как я полагаю, должна работать как функция разбиения на страницы.Как использовать смещение в ВКонтакте с Python?

До сих пор у меня есть это:

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 так ясно, что пока не очень хорош.

Спасибо!

ответ

1

Я работал с VK API с javascript, но, я думаю, логика такая же.

TL; DR: Смещение является количество результатов (начиная с первого), который API должен пропустить в ответ

Например, вы делаете запрос, который должен вернуть 1000 результатов (позволяет представить себе, что вы знаете, точное количество результатов). Но VK вернет вам только 100 за запрос. Итак, как получить другие 900?

Вы говорите API: дайте мне next 100 результатов. Далее - смещение - количество результатов, которые вы хотите пропустить, потому что вы уже обработали их. Таким образом, VK API принимает 1000 результатов, пропускает первые 100 и возвращает к вам следующий (второй) 100.

+0

Спасибо, это сработало, просто нужно было прокрутить счет смещения после каждого запроса. – James

0

Кроме того, если вы говорите об этом методе (http://vk.com/dev/places.getCheckins) в первом абзаце, пожалуйста, проверьте, что ваш lat/long float, а не целое число. И может быть полезно попробовать swap lat/long - может быть, вы их перепутали?

+0

Пол, я определенно испортил лат/долго несколько раз, но узнал после этого. Я использовал float, так как использование int-коордов было слишком широким. – James