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