class IgApi::User
Attributes
config[RW]
data[RW]
language[R]
password[R]
session[RW]
username[RW]
Public Class Methods
new(params = {})
click to toggle source
# File lib/ig_api/user.rb, line 9 def initialize(params = {}) @account = nil @feed = nil @api = IgApi::Http.singleton if params.key? :session @username = params[:session].scan(/ds_user=(.*?);/)[0][0] id = params[:session].scan(/ds_user_id=(\d+)/)[0][0] if data.nil? @data = { id: id } else @data[:id] = id end end inject_variables(params) end
Public Instance Methods
account()
click to toggle source
# File lib/ig_api/user.rb, line 65 def account @account = IgApi::Account.new if @account.nil? @account end
api()
click to toggle source
# File lib/ig_api/user.rb, line 91 def api (18 + (md5int % 5)).to_s end
device_id()
click to toggle source
# File lib/ig_api/user.rb, line 133 def device_id 'android-' + md5[0..15] end
dpi()
click to toggle source
# File lib/ig_api/user.rb, line 100 def dpi %w[801 577 576 538 515 424 401 373][md5int % 8] end
feed()
click to toggle source
# File lib/ig_api/user.rb, line 71 def feed @feed = IgApi::Feed.new if @feed.nil? @feed.using(self) end
followers(limit = Float::INFINITY, data = {})
click to toggle source
# File lib/ig_api/user.rb, line 49 def followers(limit = Float::INFINITY, data = {}) IgApi::Feed.user_followers(self, data, limit) end
info()
click to toggle source
# File lib/ig_api/user.rb, line 109 def info line = Device.devices[md5int % Device.devices.count] { manufacturer: line[0], device: line[1], model: line[2] } end
info_by_name(username)
click to toggle source
# File lib/ig_api/user.rb, line 37 def info_by_name(username) response = @api.get(Constants::URL + "users/#{username}/usernameinfo/") .with(ua: useragent, session: session) .exec JSON.parse response.body end
inject_variables(params)
click to toggle source
# File lib/ig_api/user.rb, line 29 def inject_variables(params) params.each { |key, value| instance_variable_set(:"@#{key}", value) } end
md5()
click to toggle source
# File lib/ig_api/user.rb, line 83 def md5 Digest::MD5.hexdigest @username end
md5int()
click to toggle source
# File lib/ig_api/user.rb, line 87 def md5int (md5.to_i(32) / 10e32).round end
relationship()
click to toggle source
# File lib/ig_api/user.rb, line 57 def relationship unless instance_variable_defined? :@relationship @relationship = Relationship.new self end @relationship end
release()
click to toggle source
@return [string]
# File lib/ig_api/user.rb, line 96 def release %w[4.0.4 4.3.1 4.4.4 5.1.1 6.0.1][md5int % 5] end
resolution()
click to toggle source
# File lib/ig_api/user.rb, line 104 def resolution %w[3840x2160 1440x2560 2560x1440 1440x2560 2560x1440 1080x1920 1080x1920 1080x1920][md5int % 8] end
search_for_user(username)
click to toggle source
# File lib/ig_api/user.rb, line 33 def search_for_user(username) account.search_for_user(self, username) end
search_for_user_graphql(username)
click to toggle source
# File lib/ig_api/user.rb, line 45 def search_for_user_graphql(username) account.search_for_graphql(self, username) end
thread()
click to toggle source
# File lib/ig_api/user.rb, line 77 def thread @thread = IgApi::Thread.new unless defined? @thread @thread.using self end
user_followers_graphql(limit = Float::INFINITY, data = {})
click to toggle source
# File lib/ig_api/user.rb, line 53 def user_followers_graphql(limit = Float::INFINITY, data = {}) IgApi::Feed.user_followers_graphql(self, data, limit) end
useragent()
click to toggle source
# File lib/ig_api/user.rb, line 129 def useragent format('Instagram %s Android(%s)', useragent_hash[:version], useragent_hash[:agent].rstrip) end
useragent_hash()
click to toggle source
# File lib/ig_api/user.rb, line 118 def useragent_hash agent = [api + '/' + release, dpi + 'dpi', resolution, info[:manufacturer], info[:model], info[:device], @language] { agent: agent.join('; '), version: Constants::PRIVATE_KEY[:APP_VERSION] } end