1

特定のハッシュタグを付けて投稿された Instagram の写真を分析しようとしています。そのため、分析に使用する一時データベースにすべての画像を保存しようとしています。

私はpythonを使用しており、すべての画像を取得するためのセロリタスクを持っていますが、おそらく間違っている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 を使用して API URL にアクセスするたびに古い画像を取得するため、next_max_tag_id だけが間違っているように思えます。

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 に答える