class Instagram::Feed

Public Class Methods

new() click to toggle source
# File lib/Instagram/feed.rb, line 3
def initialize
  @api = V1.singleton
end
user_followers(user, data, limit) click to toggle source
# File lib/Instagram/feed.rb, line 28
def self.user_followers(user, data, limit)
  has_next_page = true
  followers = []
  user_id = (!data[:id].nil? ? data[:id] : user.data[:id])
  data[:rank_token] = Instagram::API.generate_rank_token user.session.scan(/ds_user_id=([\d]+);/)[0][0]
  while has_next_page && limit > followers.size
    response = user_followers_next_page(user, user_id, data)
    has_next_page = !response['next_max_id'].nil?
    data[:max_id] = response['next_max_id']
    followers += response['users']
  end
  limit.infinite? ? followers : followers[0...limit]
end
user_followers_graphql(user, data, limit) click to toggle source
# File lib/Instagram/feed.rb, line 42
def self.user_followers_graphql(user, data, limit)
  has_next_page = true
  followers = []
  user_id = (!data[:id].nil? ? data[:id] : user.data[:id])
  while has_next_page && limit > followers.size
    response = user_followers_graphql_next_page(user, user_id, data)
    has_next_page = response['data']['user']['edge_followed_by']['page_info']['has_next_page']
    data[:end_cursor] = response['data']['user']['edge_followed_by']['page_info']['end_cursor']
    followers += response['data']['user']['edge_followed_by']['edges']
  end
  limit.infinite? ? followers : followers[0...limit]
end
user_followers_graphql_next_page(user, user_id, data) click to toggle source
# File lib/Instagram/feed.rb, line 55
def self.user_followers_graphql_next_page(user, user_id, data)
  endpoint = "https://www.instagram.com/graphql/query/?query_id=17851374694183129&id=#{user_id}&first=5000"
  param = (!data[:end_cursor].nil? ? "&after=#{data[:end_cursor]}" : '')
  result = Instagram::API.http(
    url: endpoint + param,
    method: 'GET',
    user: user
  )
  JSON.parse result.body
end
user_followers_next_page(user, user_id, data) click to toggle source
# File lib/Instagram/feed.rb, line 66
def self.user_followers_next_page(user, user_id, data)
  endpoint = "https://i.instagram.com/api/v1/friendships/#{user_id}/followers/"
  param = "?rank_token=#{data[:rank_token]}" +
          (!data[:max_id].nil? ? '&max_id=' + data[:max_id] : '')
  result = Instagram::API.http(
    url: endpoint + param,
    method: 'GET',
    user: user
  )
  JSON.parse result.body
end

Public Instance Methods

timeline_media() click to toggle source
# File lib/Instagram/feed.rb, line 16
def timeline_media
  user_id = @user[:id]

  rank_token = Instagram::V1.generate_rank_token @user[:id]
  endpoint = "https://i.instagram.com/api/v1/feed/user/#{user_id}/"
  param = "?rank_token=#{rank_token}"
  result = @api.get(endpoint + param)
    .with(session: @user[:session], ua: @user[:ua]).exec

  JSON.parse result.body
end
using(user) click to toggle source
# File lib/Instagram/feed.rb, line 7
def using user
  @user = {
      id: user.data[:id],
      session: user.session,
      ua: user.useragent
  }
  self
end