ig_api 0.0.15 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,115 +1,118 @@
1
- module IgApi
2
- class Account
3
- def initialized
4
- @api = nil
5
- end
6
-
7
- def api
8
- @api = IgApi::Http.new if @api.nil?
9
-
10
- @api
11
- end
12
-
13
- def using(session)
14
- user = User.new session: session
15
-
16
- # response = api.get(Constants::URL + 'accounts/current_user/?edit=true')
17
- # .with(ua: user.useragent, session: user.session).exec
18
- #
19
- # response.body
20
- #
21
-
22
- user
23
- end
24
-
25
- def login(username, password, config = IgApi::Configuration.new)
26
- user = User.new username: username,
27
- password: password
28
-
29
- request = api.post(
30
- Constants::URL + 'accounts/login/',
31
- format(
32
- 'ig_sig_key_version=4&signed_body=%s',
33
- IgApi::Http.generate_signature(
34
- device_id: user.device_id,
35
- login_attempt_user: 0, password: user.password, username: user.username,
36
- _csrftoken: 'missing', _uuid: IgApi::Http.generate_uuid
37
- )
38
- )
39
- ).with(ua: user.useragent).exec
40
-
41
- json_body = JSON.parse request.body
42
- logged_in_user = json_body['logged_in_user']
43
-
44
- user.data = {
45
- id: logged_in_user['pk'],
46
- full_name: logged_in_user['full_name'],
47
- is_private: logged_in_user['is_private'],
48
- profile_pic_url: logged_in_user['profile_pic_url'],
49
- profile_pic_id: logged_in_user['profile_pic_id'],
50
- is_verified: logged_in_user['is_verified'],
51
- is_business: logged_in_user['is_business']
52
- }
53
- cookies_array = []
54
- all_cookies = request.get_fields('set-cookie')
55
- all_cookies.each do |cookie|
56
- cookies_array.push(cookie.split('; ')[0])
57
- end
58
- cookies = cookies_array.join('; ')
59
- user.config = config
60
- user.session = cookies
61
-
62
- user
63
- end
64
-
65
- def self.search_for_user_graphql(user, username)
66
- endpoint = "https://www.instagram.com/#{username}/?__a=1"
67
- result = IgApi::API.http(
68
- url: endpoint,
69
- method: 'GET',
70
- user: user
71
- )
72
- response = JSON.parse result.body, symbolize_names: true
73
- return nil unless response[:user].any?
74
- {
75
- profile_id: response[:user][:id],
76
- external_url: response[:user][:external_url],
77
- followers: response[:user][:followed_by][:count],
78
- following: response[:user][:follows][:count],
79
- full_name: response[:user][:full_name],
80
- avatar_url: response[:user][:profile_pic_url],
81
- avatar_url_hd: response[:user][:profile_pic_url_hd],
82
- username: response[:user][:username],
83
- biography: response[:user][:biography],
84
- verified: response[:user][:is_verified],
85
- medias_count: response[:user][:media][:count],
86
- is_private: response[:user][:is_private]
87
- }
88
- end
89
-
90
- def search_for_user(user, username)
91
- rank_token = IgApi::Http.generate_rank_token user.session.scan(/ds_user_id=([\d]+);/)[0][0]
92
- endpoint = 'https://i.instagram.com/api/v1/users/search/'
93
- param = format('?is_typehead=true&q=%s&rank_token=%s', username, rank_token)
94
- result = api.get(endpoint + param)
95
- .with(session: user.session, ua: user.useragent).exec
96
-
97
- json_result = JSON.parse result.body
98
- if json_result['num_results'] > 0
99
- user_result = json_result['users'][0]
100
- user_object = IgApi::User.new username: username
101
- user_object.data = {
102
- id: user_result['pk'],
103
- full_name: user_result['full_name'],
104
- is_private: user_result['is_prive'],
105
- profile_pic_url: user_result['profile_pic_url'],
106
- profile_pic_id: user_result['profile_pic_id'],
107
- is_verified: user_result['is_verified'],
108
- is_business: user_result['is_business']
109
- }
110
- user_object.session = user.session
111
- user_object
112
- end
113
- end
114
- end
115
- end
1
+ module IgApi
2
+ class Account
3
+ def initialized
4
+ @api = nil
5
+ end
6
+
7
+ def api
8
+ @api = IgApi::Http.new if @api.nil?
9
+
10
+ @api
11
+ end
12
+
13
+ def using(session)
14
+ user = User.new session: session
15
+
16
+ # response = api.get(Constants::URL + 'accounts/current_user/?edit=true')
17
+ # .with(ua: user.useragent, session: user.session).exec
18
+ #
19
+ # response.body
20
+ #
21
+
22
+ user
23
+ end
24
+
25
+ def login(username, password, config = IgApi::Configuration.new)
26
+ user = User.new username: username,
27
+ password: password
28
+
29
+ request = api.post(
30
+ Constants::URL + 'accounts/login/',
31
+ format(
32
+ 'ig_sig_key_version=4&signed_body=%s',
33
+ IgApi::Http.generate_signature(
34
+ device_id: user.device_id,
35
+ login_attempt_user: 0, password: user.password, username: user.username,
36
+ _csrftoken: 'missing', _uuid: IgApi::Http.generate_uuid
37
+ )
38
+ )
39
+ ).with(ua: user.useragent).exec
40
+
41
+ json_body = JSON.parse request.body
42
+
43
+ raise json_body['message'] if json_body['status'] == 'fail'
44
+
45
+ logged_in_user = json_body['logged_in_user']
46
+
47
+ user.data = {
48
+ id: logged_in_user['pk'],
49
+ full_name: logged_in_user['full_name'],
50
+ is_private: logged_in_user['is_private'],
51
+ profile_pic_url: logged_in_user['profile_pic_url'],
52
+ profile_pic_id: logged_in_user['profile_pic_id'],
53
+ is_verified: logged_in_user['is_verified'],
54
+ is_business: logged_in_user['is_business']
55
+ }
56
+ cookies_array = []
57
+ all_cookies = request.get_fields('set-cookie')
58
+ all_cookies.each do |cookie|
59
+ cookies_array.push(cookie.split('; ')[0])
60
+ end
61
+ cookies = cookies_array.join('; ')
62
+ user.config = config
63
+ user.session = cookies
64
+
65
+ user
66
+ end
67
+
68
+ def self.search_for_user_graphql(user, username)
69
+ endpoint = "https://www.instagram.com/#{username}/?__a=1"
70
+ result = IgApi::API.http(
71
+ url: endpoint,
72
+ method: 'GET',
73
+ user: user
74
+ )
75
+ response = JSON.parse result.body, symbolize_names: true
76
+ return nil unless response[:user].any?
77
+ {
78
+ profile_id: response[:user][:id],
79
+ external_url: response[:user][:external_url],
80
+ followers: response[:user][:followed_by][:count],
81
+ following: response[:user][:follows][:count],
82
+ full_name: response[:user][:full_name],
83
+ avatar_url: response[:user][:profile_pic_url],
84
+ avatar_url_hd: response[:user][:profile_pic_url_hd],
85
+ username: response[:user][:username],
86
+ biography: response[:user][:biography],
87
+ verified: response[:user][:is_verified],
88
+ medias_count: response[:user][:media][:count],
89
+ is_private: response[:user][:is_private]
90
+ }
91
+ end
92
+
93
+ def search_for_user(user, username)
94
+ rank_token = IgApi::Http.generate_rank_token user.session.scan(/ds_user_id=([\d]+);/)[0][0]
95
+ endpoint = 'https://i.instagram.com/api/v1/users/search/'
96
+ param = format('?is_typehead=true&q=%s&rank_token=%s', username, rank_token)
97
+ result = api.get(endpoint + param)
98
+ .with(session: user.session, ua: user.useragent).exec
99
+
100
+ json_result = JSON.parse result.body
101
+ if json_result['num_results'] > 0
102
+ user_result = json_result['users'][0]
103
+ user_object = IgApi::User.new username: username
104
+ user_object.data = {
105
+ id: user_result['pk'],
106
+ full_name: user_result['full_name'],
107
+ is_private: user_result['is_prive'],
108
+ profile_pic_url: user_result['profile_pic_url'],
109
+ profile_pic_id: user_result['profile_pic_id'],
110
+ is_verified: user_result['is_verified'],
111
+ is_business: user_result['is_business']
112
+ }
113
+ user_object.session = user.session
114
+ user_object
115
+ end
116
+ end
117
+ end
118
+ end
@@ -1,5 +1,5 @@
1
- module IgApi
2
- class Configuration
3
- attr_accessor :proxy_list
4
- end
1
+ module IgApi
2
+ class Configuration
3
+ attr_accessor :proxy_list
4
+ end
5
5
  end
@@ -1,22 +1,22 @@
1
- # frozen_string_literal: true
2
-
3
- module IgApi
4
- module Constants
5
- PRIVATE_KEY = {
6
- SIG_KEY: '0443b39a54b05f064a4917a3d1da4d6524a3fb0878eacabf1424515051674daa',
7
- SIG_VERSION: '4',
8
- APP_VERSION: '10.33.0'
9
- }.freeze
10
-
11
- HEADER = {
12
- capabilities: '3QI=',
13
- type: 'WIFI',
14
- host: 'i.instagram.com',
15
- connection: 'Close',
16
- encoding: 'gzip, deflate, sdch',
17
- accept: '*/*'
18
- }.freeze
19
-
20
- URL = 'https://i.instagram.com/api/v1/'
21
- end
22
- end
1
+ # frozen_string_literal: true
2
+
3
+ module IgApi
4
+ module Constants
5
+ PRIVATE_KEY = {
6
+ SIG_KEY: '673581b0ddb792bf47da5f9ca816b613d7996f342723aa06993a3f0552311c7d',
7
+ SIG_VERSION: '4',
8
+ APP_VERSION: '42.0.0.19.95'
9
+ }.freeze
10
+
11
+ HEADER = {
12
+ capabilities: '3brTPw==',
13
+ type: 'WIFI',
14
+ host: 'i.instagram.com',
15
+ connection: 'Close',
16
+ encoding: 'gzip, deflate, sdch',
17
+ accept: '*/*'
18
+ }.freeze
19
+
20
+ URL = 'https://i.instagram.com/api/v1/'
21
+ end
22
+ end