проблемы с отметкой времени поиска в медиа в инстаграме

Я использую API поиска медиа в Instagram

https://api.instagram.com/v1/media/search?lat=8.51&lng=115.239394&MAX_TIMESTAMP=xyz&MIN_TIMESTAMP=abc&client_id=my_client_id

Теперь я вызываю этот API в цикле for и меняю значение минимальной и максимальной временных меток на каждой итерации. Так что я получаю изображения для этого периода времени.

Проблема, с которой я сталкиваюсь, заключается в том, что я получаю один и тот же результат (или набор изображений) на каждой итерации. Таким образом, изменение временных меток не влияет на результат.

Это из-за кеширования? или Instagram не разрешает такие запросы в итерации? Или есть другой способ, например. нумерацию страниц или что-то делать такие запросы?

Вот код (на питоне):

import urllib2
import datetime
import time
import json

clientId = 'ef63de4634b344e3856b4f4138a8db56'
city = "Bali"
baliLat = '8.51'
baliLong = '115.239394'
distance = 1000

def callApi(startStamp, endStamp):
    searchStr = 'https://api.instagram.com/v1/media/search?lat=' + baliLat + '&lng=' + baliLong + '&client_id=' + clientId + '&MAX_TIMESTAMP=' + str(endStamp) + '&MIN_TIMESTAMP=' + str(startStamp) + '&distance='  + str(distance) + '&count=10'
    print searchStr
    response = urllib2.urlopen(searchStr)
    res = json.loads(response.read())
    return res

if __name__ == "__main__":
    # call instagram api for 1 year for each month for 1st week.
    # compare the dates of creation for each month.
    start = '1/05/2014'
    startDate = datetime.datetime.strptime(start, '%d/%m/%Y')
    count = 0
    result = {}
    while count < 12:
        endDate = startDate + datetime.timedelta(days=7)
        minStamp = time.mktime(startDate.timetuple())
        maxStamp = time.mktime(endDate.timetuple())
        res = callApi(minStamp, maxStamp)
        result[str(startDate)] = res
        startDate = startDate + datetime.timedelta(days=30)
        count += 1
    f = open('out-y.json', 'w')
    f.write(json.dumps(result))
    f.close()

person anupam    schedule 08.05.2015    source источник
comment
сколько дней вы пытаетесь получить?   -  person Pedro Casado    schedule 08.05.2015
comment
7 дней (за каждый месяц). Перекрёстка не было. Есть ли что-то еще, о чем я должен знать?   -  person anupam    schedule 08.05.2015
comment
опубликуйте код, он не должен давать вам такой же результат, если вы делаете слишком много звонков, что-то в вашем коде может быть   -  person krisrak    schedule 09.05.2015
comment
Я добавил код, который использую.   -  person anupam    schedule 09.05.2015


Ответы (3)


MAX_TIMESTAMP и MIN_TIMESTAMP должны быть строчными: max_timestamp и min_timestamp

документация API в Instagram показывает параметры в верхнем регистре, это вводит в заблуждение, все должно быть в нижнем регистре.

person krisrak    schedule 09.05.2015
comment
Я пытался использовать строчные max_timestamp и min_timestamp, но они не работают. Поэтому я прибегнул к использованию верхнего регистра, который, по крайней мере, работает, хотя и не правильно. - person anupam; 09.05.2015
comment
если вы используете прописные буквы, то они игнорируются, и вы получаете последние фотографии, если вы используете строчные буквы, и вы ничего не получаете, то это правильно, нет фотографий во временном диапазоне или ваши значения времени неверны, проверьте фотографии с вашим временем здесь: gramfeed.com/instagram/map - person krisrak; 09.05.2015

Я боролся с той же проблемой на прошлой неделе, и я думаю, что мои проблемы связаны с time.mktime() - это предполагает, что даты установлены в местном часовом поясе, а не в формате UTC/GMT, на котором основаны данные Instagram. Попробуйте заменить все ваши вызовы time.mktime() на calendar.timegm() и посмотрите, поможет ли это - похоже, это решило проблему для меня.

person Cody Kestigian    schedule 13.05.2015
comment
Нет, изменение не решило проблему для меня. Мой код есть, можете ли вы заменить time.mktime на calendar.timegm и посмотреть, работает ли он. - person anupam; 14.05.2015

API Instagram использует метки времени в секундах, а не в миллисекундах. Разделите все ваши метки времени на 1000.

person Yuval Adam    schedule 10.06.2015
comment
Пробовал это. Не работает. По-прежнему получают одинаковые результаты для обоих вызовов, которые относятся к последовательным месяцам. - person anupam; 17.06.2015