2013-07-04 3 views
1

Я пытаюсь провести анализ аналитики на фотографиях Instagram, которые публикуются с заданным хэштегом. Итак, теперь я пытаюсь сохранить все изображения во временной базе данных, которые будут использоваться для анализа.Instagram get next_max_tag_id

Я использую python, и у меня есть задача celery для получения всех изображений, но он не работает, когда я запускаю next_max_tag_id, что, вероятно, неверно.

Кто-нибудь знает, как получить правильный next_max_tag_id?

это код, я использую:

@task() 
def get_latest_photos(): 
    next_max_tag_id = get_option('next_max_tag_id') 

    if not next_max_tag_id: 
     next_max_tag_id = 0 

    url = BASE + '/tags/{tag}/media/recent?client_id={cliend_id}' \ 
     '&max_tag_id={max_id}'.format(**{ 
      'tag': a_tag, 
      'cliend_id': getattr(settings, 'INSTAGRAM_CLIENT_ID'), 
      'max_id': next_max_tag_id 
     }) 

    while url: 
     request = requests.get(url) 

     if request.status_code != 200: 
      pass #TODO: error 

     json_response = request.json() 

     if json_response['meta']['code'] != 200: 
      pass #TODO: error 

     # do something with json_response['data']: 

     url = None 
     if json_response.has_key('pagination'): 
      pagination = json_response['pagination'] 

      if pagination.has_key('next_url'): 
       url = json_response['pagination']['next_url'] 

      if pagination.has_key('next_max_tag_id'): 
       next_max_tag_id = pagination['next_max_tag_id'] 

    update_option('next_max_tag_id', next_max_tag_id) 

Поток в основном это:

  1. прибудете next_max_tag_id из БД (по умолчанию 0)
  2. в то время как у нас есть действительный URL-адрес он извлекает данные, следующий URL-адрес и next_max_tag_id
  3. обновляет next_max_tag_id

Единственное, что мне кажется неправильным, это next_max_tag_id, потому что каждый раз, когда я перехожу к URL-адресу API с последним next_max_tag_id, я получаю старые изображения.

+0

Я экспериментирую себя прямо сейчас, насколько я увидел, что next_max собирается в каталоге истории, а next_min переходит в будущее – Dukeatcoding

ответ

0

Да. Вот как правильно использовать разбиение на страницы. Вы должны прокручивать страницы и ссылаться на функцию, в которой вы находитесь. Вы можете обновить приведенный ниже скрипт, чтобы получить все, за чем вы следуете, и запросить также next_max_id.

currently_following = set([]) 
def parse_following(next_url=None): 
    if next_url == None: 
     urlUserMedia = "https://api.instagram.com/v1/users/self/follows?access_token=%s" % (auth_token) 
    else: 
     urlUserMedia = next_url 
    values = { 
       'client_id' : client_id} 
    try: 
     data = urllib.urlencode(values) 
     req = urllib2.Request(urlUserMedia,None,headers) 
     response = urllib2.urlopen(req) 
     result = response.read() 
     dataObj = json.loads(result) 
     next_url = None 
     if dataObj.get('pagination') is not None: 
      next_url = dataObj.get('pagination').get('next_url') 
      currently_following.update(user['id'] for user in dataObj['data']) 
     if next_url is not None: 
      parse_following(next_url) 

    except Exception as e: 
     print e 
Смежные вопросы