ilyakmet
@ilyakmet

Как правильно собрать данные из Instagram API и Foursquare API?

Мне нужно собрать максимум чекинов по конкретному городу из Foursquare и тоже проделать с Instagram.
Проблема в том, что помимо лимитов на запросы (в час), API выдает по 10-20 результатов на любой запрос, даже если я меняю параметры запроса и увеличиваю кол-во результатов. Понимаю что одним запросом много не собрать и нужно прогонять алгоритм несколько раз (уже для найденных локаций), но все же очень мало выдает.
Как мне быть?
Буду рад примеру запроса для конкретного города.
  • Вопрос задан
  • 1363 просмотра
Пригласить эксперта
Ответы на вопрос 2
1. Обходить ограничения на один токен => нужно больше токенов, либо морочишься и регаешь кучу аккаунтов в данных соцсетях, либо вооружаешься поисковиками и ищешь на сайтах аля pastebin, ссылка на поисковик по 100+ таких ресурсов тык тык, там идешь в раздел Documents -> Custom Pastebins (Meta search). Цель - найти исходники чьи то, из которых забыли убрать токены, я однажды около 10 так насобирал, но заранее напиши себе небольшой скрипт чекер токенов, например такой:
from requests import get
ig_api_key = 'YOUR INSTAGRAM API KEY'
answer = get('https://api.instagram.com/v1/users/search?q=facebook' + '&access_token=' + ig_api_key, verify=True).json()
print answer

Там соответственно подставляешь токен найденный и смотришь ответ, если все нормально, значит токен рабочий.
НО: уверен, что в ToS Instagram API такое делать запрещено, поэтому на свой страх и риск.

2. Как и сказано выше, кури доки и читай про Pagination, вот для примера два метода, которые вытаскивают данные о фотках пользователя (осторожно быдлокод, но для примера хватит).
def get_data_from_json(json_text):
    answer = list()
    for element in json_text['data']:
        answer.append(element)
    return answer


def get_media(username):
    answer = list()
    user_id = get_user_id(username)
    data = get('https://api.instagram.com/v1/users/' + user_id + '/media/recent/?access_token=' +\
               ig_api_key, verify=True).json()
    try:
        if data[u'meta'][u'code'] == 200:
            if data[u'pagination'] == {}:
                answer += get_data_from_json(data)
            else:
                answer += get_data_from_json(data)
                while True:
                    if data[u'pagination'] != {}:
                        data = get(data[u'pagination'][u'next_url'], verify=True).json()
                        answer += get_data_from_json(data)
                    else:
                        break
        else:
            answer = list()
    except:
        answer = list()
    return answer

3. Теперь про город, для этого тебе нужно знать его координаты (либо можешь сам это автоматизировать через Google Maps API, там будет адрес -> координаты), далее придумываешь алгоритм по которому из двух координат lat\long будет генериться множество точек для последующего запроса к Instagram API, конкретнее, обратись к вот этому методу, он дает возможность получить данные по координатом на дистанции от 1 до 5 км, значит просто нужно покрыть город кругами с радиусом в 5 км, статья с хабра с похожей тематикой и кодом на питоне вот здесь. Дерзай и удачи!
Ответ написан
@Narrator69
Вы читали документацию? Нет? Читайте.

Максимально Instagram API возвращает 20 результатов, дальше — pagination.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы