Получение всех фотографий пользователя с помощью драгоценного камня Instagram

Я хочу получать все свои фотографии с помощью драгоценного камня instagram (https://github.com/Instagram/instagram-ruby-gem), но я не могу понять, как это сделать.

Это то, что я пытаюсь до сих пор:

client = Instagram.client(access_token: token)
client.user_recent_media.each do |media|
    puts media.images.thumbnail.url
end

Очевидно, это работает (это мои изображения из Instagram), но я не могу получить все из них или каким-либо образом выбрать, какой контент мне нужен из Instagram.

Например, я вижу, что метод user_recent_media принимает атрибут "count", который должен позволить мне использовать разбиение на страницы:

(from https://github.com/Instagram/instagram-ruby-gem/blob/master/lib/instagram/client/users.rb#L150)
@option options [Integer] :count (nil) Limits the number of results returned per page

К сожалению, я не понимаю, как должна работать эта разбивка на страницы. Если, например, я запрашиваю 1000 медиа-элементов (просто говоря, все), это не работает и возвращает гораздо меньше элементов, в этот момент я застрял, потому что понятия не имею, как запросить страницу 2.

Кто-нибудь использовал жемчужину Instagram для чего-то подобного? Любая помощь приветствуется


person ngw    schedule 14.05.2015    source источник


Ответы (3)


Ниже приведен работающий код из старого приложения, которое импортирует пользователей (я только что запустил его с Instagram Gem 1.1.5, и оно все еще работает), которое также использует курсор. Вы должны быть в состоянии изменить несколько переменных и строк и быть в пути:

  def import_followers
    response = user.client.user_follows
    followers = [].concat(response)
    next_cursor = response.pagination[:next_cursor]
    while !(next_cursor.to_s.empty?) do
      response = Instagram.user_follows(uid, {:cursor => next_cursor})
      next_cursor = response.pagination[:next_cursor]
      followers.concat(response)
    end
    return followers
  end
person zzz    schedule 14.05.2015

Основываясь на ответе @nrowegt, я настроил код.

Во-первых, мы инициализируем Instagram Gem (токен доступа будет отображать идентификатор пользователя Instagram).

client = Instagram.client(:access_token => session[:access_token])

Затем мы запустим метод user_recent_media и сохраним ответ в переменной.

response = client.user_recent_media

Нам нужно создать пустой массив, чтобы сохранить все картинки и добавить наш ответ. Помните, API Instagram возвращает только 20 элементов за вызов, поэтому нам нужно сделать массив и «пока» ниже.

album = [].concat(response)

Если у пользователя есть больше изображений, переменная ответа будет иметь переменную с именем next_max_id. Это внутри метода разбиения на страницы; поэтому мы сохраняем next_max_id в переменной.

max_id = response.pagination.next_max_id

Это сложная часть. Вам нужно запустить приведенный выше код, пока существует переменная max_id. Он будет пустым, если мы дойдем до последней страницы с картинками пользователя. Так:

while !(max_id.to_s.empty?) do
        response = client.user_recent_media(:max_id => max_id)
        max_id = response.pagination.next_max_id
        album.concat(response)
end

С ЕДИНСТВЕННЫМ отличием в том, что на этот раз мы запускаем метод user_recent_media, передавая переменную max_id, чтобы Instagram мог выяснить, с чего начать получение изображений.

И мы отправляем финальную переменную в представление

@album = album

Вот полный код.

client = Instagram.client(:access_token => session[:access_token])
        response = client.user_recent_media
        album = [].concat(response)
        max_id = response.pagination.next_max_id

        while !(max_id.to_s.empty?) do
            response = client.user_recent_media(:max_id => max_id)
            max_id = response.pagination.next_max_id
            album.concat(response)
        end

        @album = album
person Emmanuel Orozco    schedule 21.05.2015
comment
Да благословят тебя Зевс и Один вечной жизнью - person Arthur Collé; 25.05.2015
comment
Рад, что смог помочь :-) - person Emmanuel Orozco; 26.05.2015

Согласно документации, вы должны получать хэш pagination в любом ответе, который вы получите от API. Что-то вроде следующего (взято из документации):

{
    ...
    "pagination": {
        "next_url": "https://api.instagram.com/v1/tags/puppy/media/recent?access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d&max_id=13872296",
        "next_max_id": "13872296"
    }
}

Вам нужно будет вызвать URL-адрес из атрибута next_url, чтобы получить следующий набор данных.

Итак, я предполагаю, что вы сможете получить это следующим образом:

client.user_recent_media.pagination.next_url
person Kevin    schedule 14.05.2015