Module: Insta::Feed

Defined in:
lib/insta/feed.rb

Class Method Summary collapse

Class Method Details

.user_followers(user, data, limit) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/insta/feed.rb', line 35

def self.user_followers(user, data, limit)
  has_next_page = true
  followers = []
  user_id = (!data[:id].nil? ? data[:id] : user.data[:id])
  proxies = Insta::ProxyManager.new data[:proxies] unless data[:proxies].nil?
  data[:rank_token] = Insta::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, proxies)
    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) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/insta/feed.rb', line 50

def self.user_followers_graphql(user, data, limit)
  has_next_page = true
  followers = []
  user_id = (!data[:id].nil? ? data[:id] : user.data[:id])
  proxies = Insta::ProxyManager.new data[:proxies] unless data[:proxies].nil?
  while has_next_page && limit > followers.size
    response = user_followers_graphql_next_page(user, user_id, data, proxies)
    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, proxies) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
# File 'lib/insta/feed.rb', line 64

def self.user_followers_graphql_next_page(user, user_id, data, proxies)
  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 = Insta::API.http(
    url: endpoint + param,
    method: 'GET',
    user: user,
    proxy: proxies&.next
  )
  JSON.parse result.body
end

.user_followers_next_page(user, user_id, data, proxies) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/insta/feed.rb', line 76

def self.user_followers_next_page(user, user_id, data, proxies)
  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 = Insta::API.http(
    url: endpoint + param,
    method: 'GET',
    user: user,
    proxy: proxies&.next
  )
  JSON.parse result.body
end

.user_media(user, data) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/insta/feed.rb', line 3

def self.user_media(user, data)
  user_id = (!data[:id].nil? ? data[:id] : user.data[:id])
  rank_token = Insta::API.generate_rank_token user.session.scan(/ds_user_id=([\d]+);/)[0][0]
  endpoint = "https://i.instagram.com/api/v1/feed/user/#{user_id}/"
  proxies = Insta::ProxyManager.new data[:proxies] unless data[:proxies].nil?
  param = "?rank_token=#{rank_token}" +
          (!data[:max_id].nil? ? '&max_id=' + data[:max_id] : '')
  result = Insta::API.http(
    url: endpoint + param,
    method: 'GET',
    user: user,
    proxy: proxies&.next
  )

  JSON.parse result.body
end

.user_media_graphql(user, data) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/insta/feed.rb', line 20

def self.user_media_graphql(user, data)
  user_id = (!data[:id].nil? ? data[:id] : user.data[:id])
  endpoint = "https://www.instagram.com/graphql/query/?query_id=17880160963012870&id=#{user_id}&first=80&after="
  proxies = Insta::ProxyManager.new data[:proxies] unless data[:proxies].nil?
  result = Insta::API.http(
    url: endpoint,
    method: 'GET',
    user: user,
    proxy: proxies&.next,
    desktop: true
  )

  JSON.parse result.body
end