1

我正在尝试对带有指定主题标签的 Instagram 照片进行一些分析分析。所以现在我试图将所有图像存储在一个临时数据库中,用于分析。

我正在使用 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,因为每次我使用最后一个 next_max_tag_id 访问 API URL 时,我都会得到旧图像。

4

1 回答 1

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
于 2014-12-31T23:01:49.067 回答