module Insta::Account
Public Class Methods
by_id(user, profile_id, data)
click to toggle source
# File lib/insta/account.rb, line 64 def self.by_id(user, profile_id, data) rank_token = Insta::API.generate_rank_token user.session.scan(/ds_user_id=([\d]+);/)[0][0] endpoint = "https://i.instagram.com/api/v1/users/#{profile_id}/info/" proxies = Insta::ProxyManager.new data[:proxies] unless data[:proxies].nil? param = format('?is_typehead=true&rank_token=%s', rank_token) result = Insta::API.http( url: endpoint + param, method: 'GET', user: user, proxy: proxies&.next ) response = JSON.parse result.body, symbolize_names: true return nil unless response[:user].any? { profile_id: response[:user][:id], external_url: response[:user][:external_url], followers: response[:user][:follower_count], following: response[:user][:following_count], full_name: response[:user][:full_name], avatar_url: response[:user][:hd_profile_pic_url_info][:url], avatar_url_hd: response[:user][:hd_profile_pic_url_info][:url], username: response[:user][:username], biography: response[:user][:biography], verified: response[:user][:is_verified], medias_count: response[:user][:media_count], is_private: response[:user][:is_private], phone: response[:user][:contact_phone_number], email: response[:user][:public_email] } end
login(user, config = Insta::Configuration.new)
click to toggle source
# File lib/insta/account.rb, line 3 def self.login(user, config = Insta::Configuration.new) request = Insta::API.http( url: CONSTANTS::URL + 'accounts/login/', method: 'POST', user: user, body: format( 'ig_sig_key_version=4&signed_body=%s', Insta::API.generate_signature( device_id: user.device_id, login_attempt_user: 0, password: user.password, username: user.username, _csrftoken: 'missing', _uuid: Insta::API.generate_uuid )) ) json_body = JSON.parse request.body logged_in_user = json_body['logged_in_user'] user.data = { id: logged_in_user['pk'], full_name: logged_in_user['full_name'], is_private: logged_in_user['is_private'], profile_pic_url: logged_in_user['profile_pic_url'], profile_pic_id: logged_in_user['profile_pic_id'], is_verified: logged_in_user['is_verified'], is_business: logged_in_user['is_business'] } cookies_array = [] all_cookies = request.get_fields('set-cookie') all_cookies.each do |cookie| cookies_array.push(cookie.split('; ')[0]) end cookies = cookies_array.join('; ') user.config = config user.session = cookies end
search_for_user(user, username, data)
click to toggle source
# File lib/insta/account.rb, line 97 def self.search_for_user(user, username, data) rank_token = Insta::API.generate_rank_token user.session.scan(/ds_user_id=([\d]+);/)[0][0] endpoint = 'https://i.instagram.com/api/v1/users/search/' proxies = Insta::ProxyManager.new data[:proxies] unless data[:proxies].nil? param = format('?is_typehead=true&q=%s&rank_token=%s', username, rank_token) result = Insta::API.http( url: endpoint + param, method: 'GET', user: user, proxy: proxies&.next ) json_result = JSON.parse result.body if json_result['num_results'] > 0 user_result = json_result['users'][0] user_object = Insta::User.new username, nil user_object.data = { id: user_result['pk'], full_name: user_result['full_name'], is_private: user_result['is_prive'], profile_pic_url: user_result['profile_pic_url'], profile_pic_id: user_result['profile_pic_id'], is_verified: user_result['is_verified'], is_business: user_result['is_business'] } user_object.session = user.session user_object end end
search_for_user_graphql(user, username, data)
click to toggle source
# File lib/insta/account.rb, line 37 def self.search_for_user_graphql(user, username, data) endpoint = "https://www.instagram.com/#{username}/?__a=1" proxies = Insta::ProxyManager.new data[:proxies] unless data[:proxies].nil? result = Insta::API.http( url: endpoint, method: 'GET', user: user, proxy: proxies&.next ) response = JSON.parse result.body, symbolize_names: true return nil unless response[:user].any? { profile_id: response[:user][:id], external_url: response[:user][:external_url], followers: response[:user][:followed_by][:count], following: response[:user][:follows][:count], full_name: response[:user][:full_name], avatar_url: response[:user][:profile_pic_url], avatar_url_hd: response[:user][:profile_pic_url_hd], username: response[:user][:username], biography: response[:user][:biography], verified: response[:user][:is_verified], medias_count: response[:user][:media][:count], is_private: response[:user][:is_private] } end