instagram_uploader 0.1.1.3 → 0.1.2.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cbeebd61f5607142327f5c671076b9a3d6142898
4
- data.tar.gz: 2ff6eb4befdfa378553450352134d78c8ac316e0
3
+ metadata.gz: fbe2a280a2e13daa77f63c5fbd93b6a937b366ea
4
+ data.tar.gz: 5abc54fc8d2dcb88b64146f8bd6a746e12a47558
5
5
  SHA512:
6
- metadata.gz: 4a6af2003cf43b023c501085c0895c665bc1f3caf136aa9885e1b91093b66eb6d0daeabb5bdd0a12dd1de00f1710366cec7253a3601748a282a9bdca5f57aa1a
7
- data.tar.gz: 9e08b0fcd44009629a4cd6041cb20b6a38525c7886d05d82dc548a003fa41dd76420637a21a6c2bb46b8739881e94784e74ee9863b05bdaa2410a237a84c70b6
6
+ metadata.gz: c73e3cb66dae3dab59cc1f19ca63a0b44854b5489935e4e08696512af51fb7e4f06d2dca75601214a52b86533968636a006a9387bb14d20dde7ba6579306bf16
7
+ data.tar.gz: aa6502dcc15599854200365d9d772e832027d5f4c77c61b62e2e1fd5f80c6c4a0ec43c153bc1b287d1099650c2a7e63d3665548fd0f1276866edc020be1e9b78
@@ -1,9 +1,7 @@
1
1
  require "instagram_uploader/version"
2
2
  require "instagram_uploader/uploader"
3
- require "curb"
3
+
4
4
  require "json"
5
- require "tempfile"
6
- require "openssl"
7
5
 
8
6
  module InstagramUploader
9
7
 
@@ -0,0 +1,31 @@
1
+ module InstagramUploader
2
+ module Login
3
+ def login
4
+ url = 'https://instagram.com/api/v1/accounts/login/'
5
+
6
+ data = "{'username':'#{@username}','password':'#{@password}','guid':'#{generate_guid}','device_id':'#{generate_device_id}','Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}".gsub("'", '"')
7
+ signature = generate_signature(data)
8
+ body = 'ig_sig_key_version=4&signed_body=' + signature + '.' + URI::encode(data, /\W/)
9
+
10
+ response = login_request(url, body)
11
+ raise Error, response['message'] if response['status'] != 'ok'
12
+ end
13
+
14
+ private
15
+
16
+ def login_request(url,data)
17
+ http = Curl::Easy.new(url)
18
+ http.headers["User-Agent"] = generate_user_agent
19
+ http.verbose = true
20
+ http.follow_location = true
21
+ http.enable_cookies = true
22
+ http.cookiejar = @cookie
23
+ http.send('post', data)
24
+ response = JSON.parse(http.body)
25
+ http.close
26
+ response
27
+ end
28
+ class Error < RuntimeError
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,71 @@
1
+ module InstagramUploader
2
+ module PhotoCommit
3
+ require "openssl"
4
+
5
+ def commit_photo(media_id, desc)
6
+ url = 'https://instagram.com/api/v1/media/configure/'
7
+
8
+ device_timestamp = Time.now.to_i.to_s
9
+ data = "{'guid':'#{@guid}','device_id':'#{@device_id}','device_timestamp':'#{device_timestamp}','media_id':'#{media_id}','caption': '#{desc}','source_type':'5','filter_type':'0','extra':'{}','Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}".gsub("'", '"')
10
+ signature = generate_signature(data)
11
+ body = 'ig_sig_key_version=4&signed_body=' + signature + '.' + URI::encode(data, /\W/)
12
+
13
+ response = commit_request(url, body)
14
+ if response['status'] != 'ok'
15
+ raise Error, response['message']
16
+ else
17
+ response
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def commit_request(url, data)
24
+ http = Curl::Easy.new(url)
25
+
26
+ http.headers["User-Agent"] = generate_user_agent
27
+ http.verbose = true
28
+ http.follow_location = true
29
+ http.enable_cookies = true
30
+
31
+ http.cookiefile = @cookie
32
+
33
+ http.send('post', data)
34
+ response = JSON.parse(http.body)
35
+ http.close
36
+
37
+ response
38
+ end
39
+
40
+ def generate_guid
41
+ guid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
42
+ rand(0..65535),
43
+ rand(0..65535),
44
+ rand(0..65535),
45
+ rand(16384..20479),
46
+ rand(32768..49151),
47
+ rand(0..65535),
48
+ rand(0..65535),
49
+ rand(0..65535))
50
+ end
51
+
52
+ def generate_device_id
53
+ guid = generate_guid
54
+ "android-#{guid}"
55
+ end
56
+
57
+ def generate_signature(data)
58
+ return OpenSSL::HMAC.hexdigest('sha256', 'b4a23f5e39b5929e0666ac5de94c89d1618a2916', data)
59
+ end
60
+
61
+ def generate_user_agent
62
+ resolution = ['720x1280', '320x480', '480x800', '1024x768', '1280x720', '768x1024', '480x320'].sample
63
+ version = ['GT-N7000', 'SM-N9000', 'GT-I9220', 'GT-I9100'].sample
64
+ dpi = ['120', '160', '320', '240'].sample
65
+
66
+ 'Instagram 4.' + rand(1..2).to_s + '.' + rand(0..2).to_s + ' Android (' + rand(10..11).to_s + '/' + rand(1..3).to_s + '.' + rand(3..5).to_s + '.' + rand(0..5).to_s + "; #{dpi}; #{resolution}; samsung; #{version }; #{version}; smdkc210; ru_RU)"
67
+ end
68
+ class Error < RuntimeError
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,39 @@
1
+ module InstagramUploader
2
+ module PhotoUploader
3
+
4
+ def upload_photo(image)
5
+ url = 'https://instagram.com/api/v1/media/upload/'
6
+ device_timestamp = Time.now.to_i.to_s
7
+
8
+ data = [
9
+ Curl::PostField.file('photo', image),
10
+ Curl::PostField.content('device_timestamp', device_timestamp)
11
+ ]
12
+ response = upload_request(url, data)
13
+
14
+ response['status'] != 'ok' ? (raise Error, response['message']) : response
15
+ end
16
+
17
+ private
18
+
19
+ def upload_request(url, data)
20
+ http = Curl::Easy.new(url)
21
+
22
+ http.headers["User-Agent"] = generate_user_agent
23
+ http.multipart_form_post = true
24
+ http.verbose = true
25
+ http.follow_location = true
26
+ http.enable_cookies = true
27
+
28
+ http.cookiefile = @cookie
29
+
30
+ http.send('post', data)
31
+ response = JSON.parse(http.body)
32
+ http.close
33
+
34
+ response
35
+ end
36
+ class Error < RuntimeError
37
+ end
38
+ end
39
+ end
@@ -1,5 +1,17 @@
1
+ require "instagram_uploader/login"
2
+ require "instagram_uploader/photo_uploader"
3
+ require "instagram_uploader/photo_commit"
4
+
5
+ require "curb"
6
+ require "tempfile"
7
+
1
8
  module InstagramUploader
2
9
  class Uploader
10
+ include Login
11
+ include PhotoUploader
12
+ include PhotoCommit
13
+
14
+
3
15
  def initialize(username, password)
4
16
  @username = username
5
17
  @password = password
@@ -13,103 +25,6 @@ module InstagramUploader
13
25
  end
14
26
 
15
27
  private
16
-
17
- def login
18
- url = 'https://instagram.com/api/v1/accounts/login/'
19
-
20
- data = "{'username':'#{@username}','password':'#{@password}','guid':'#{generate_guid}','device_id':'#{generate_device_id}','Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}".gsub("'", '"')
21
- signature = generate_signature(data)
22
- body = 'ig_sig_key_version=4&signed_body=' + signature + '.' + URI::encode(data, /\W/)
23
-
24
- response = request(url, body, false, false)
25
- raise Error, response['message'] if response['status'] != 'ok'
26
- end
27
-
28
- def upload_photo(image)
29
- url = 'https://instagram.com/api/v1/media/upload/'
30
- device_timestamp = Time.now.to_i.to_s
31
-
32
- data = [
33
- Curl::PostField.file('photo', image),
34
- Curl::PostField.content('device_timestamp', device_timestamp)
35
- ]
36
-
37
- response = request(url, data, true, true)
38
-
39
- if response['status'] != 'ok'
40
- raise Error, response['message']
41
- else
42
- response
43
- end
44
- end
45
-
46
- def commit_photo(media_id, desc)
47
- url = 'https://instagram.com/api/v1/media/configure/'
48
-
49
- device_timestamp = Time.now.to_i.to_s
50
- data = "{'guid':'#{@guid}','device_id':'#{@device_id}','device_timestamp':'#{device_timestamp}','media_id':'#{media_id}','caption': '#{desc}','source_type':'5','filter_type':'0','extra':'{}','Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}".gsub("'", '"')
51
- signature = generate_signature(data)
52
- body = 'ig_sig_key_version=4&signed_body=' + signature + '.' + URI::encode(data, /\W/)
53
-
54
- response = request(url, body, false, true)
55
- if response['status'] != 'ok'
56
- raise Error, response['message']
57
- else
58
- response
59
- end
60
- end
61
-
62
- def request(url, data, is_upload, cookies)
63
- http = Curl::Easy.new(url)
64
-
65
- http.headers["User-Agent"] = generate_user_agent
66
- http.multipart_form_post = is_upload
67
- http.verbose = true
68
- http.follow_location = true
69
- http.enable_cookies = true
70
-
71
- if cookies
72
- http.cookiefile = @cookie
73
- else
74
- http.cookiejar = @cookie
75
- end
76
-
77
- http.send('post', data)
78
- response = JSON.parse(http.body)
79
- http.close
80
-
81
- response
82
- end
83
-
84
- def generate_guid
85
- guid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
86
- rand(0..65535),
87
- rand(0..65535),
88
- rand(0..65535),
89
- rand(16384..20479),
90
- rand(32768..49151),
91
- rand(0..65535),
92
- rand(0..65535),
93
- rand(0..65535))
94
- end
95
-
96
- def generate_device_id
97
- guid = generate_guid
98
- "android-#{guid}"
99
- end
100
-
101
- def generate_signature(data)
102
- return OpenSSL::HMAC.hexdigest('sha256', 'b4a23f5e39b5929e0666ac5de94c89d1618a2916', data)
103
- end
104
-
105
- def generate_user_agent
106
- resolution = ['720x1280', '320x480', '480x800', '1024x768', '1280x720', '768x1024', '480x320'].sample
107
- version = ['GT-N7000', 'SM-N9000', 'GT-I9220', 'GT-I9100'].sample
108
- dpi = ['120', '160', '320', '240'].sample
109
-
110
- 'Instagram 4.' + rand(1..2).to_s + '.' + rand(0..2).to_s + ' Android (' + rand(10..11).to_s + '/' + rand(1..3).to_s + '.' + rand(3..5).to_s + '.' + rand(0..5).to_s + "; #{dpi}; #{resolution}; samsung; #{version }; #{version}; smdkc210; ru_RU)"
111
- end
112
-
113
28
  class Error < RuntimeError
114
29
  end
115
30
  end
@@ -1,3 +1,3 @@
1
1
  module InstagramUploader
2
- VERSION = "0.1.1.3"
2
+ VERSION = "0.1.2.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instagram_uploader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1.3
4
+ version: 0.1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - q3pp
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-04 00:00:00.000000000 Z
11
+ date: 2016-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -68,6 +68,9 @@ files:
68
68
  - bin/setup
69
69
  - instagram_uploader.gemspec
70
70
  - lib/instagram_uploader.rb
71
+ - lib/instagram_uploader/login.rb
72
+ - lib/instagram_uploader/photo_commit.rb
73
+ - lib/instagram_uploader/photo_uploader.rb
71
74
  - lib/instagram_uploader/uploader.rb
72
75
  - lib/instagram_uploader/version.rb
73
76
  homepage: https://github.com/q3pp/instagram_uploader