Module: Instagram::API

Defined in:
lib/Instagram/api.rb,
lib/Instagram/API/version.rb

Constant Summary collapse

VERSION =
"0.1.5.2"

Class Method Summary collapse

Class Method Details

.compute_hash(data) ⇒ Object



13
14
15
# File 'lib/Instagram/api.rb', line 13

def self.compute_hash(data)
  OpenSSL::HMAC.hexdigest OpenSSL::Digest.new('sha256'), CONSTANTS::PRIVATE_KEY[:SIG_KEY], data
end

.create_md5(data) ⇒ Object



25
26
27
# File 'lib/Instagram/api.rb', line 25

def self.create_md5(data)
  Digest::MD5.hexdigest(data).to_s
end

.generate_device_idObject



29
30
31
32
# File 'lib/Instagram/api.rb', line 29

def self.generate_device_id
  timestamp = Time.now.to_i.to_s
  'android-' + create_md5(timestamp)[0..16]
end

.generate_rank_token(pk) ⇒ Object



62
63
64
# File 'lib/Instagram/api.rb', line 62

def self.generate_rank_token(pk)
  format('%s_%s', pk, Instagram::API.generate_uuid)
end

.generate_signature(data) ⇒ Object



34
35
36
37
# File 'lib/Instagram/api.rb', line 34

def self.generate_signature(data)
  data = data.to_json
  compute_hash(data) + '.' + data
end

.generate_uuidObject



17
18
19
20
21
22
23
# File 'lib/Instagram/api.rb', line 17

def self.generate_uuid
  'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.gsub(/[xy]/) do |c|
    r = (Random.rand * 16).round | 0
    v = c == 'x' ? r : (r & 0x3 | 0x8)
    c.gsub(c, v.to_s(16))
  end.downcase
end

.http(args) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/Instagram/api.rb', line 39

def self.http(args)
  args[:url] = URI.parse(args[:url])
  http = Net::HTTP.new(args[:url].host, args[:url].port, '127.0.0.1', '8888')
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  request = nil
  if args[:method] == 'POST'
    request = Net::HTTP::Post.new(args[:url].path)
  elsif args[:method] == 'GET'
    request = Net::HTTP::Get.new(args[:url].path + (!args[:url].nil? ? '?' + args[:url].query : ''))
  end

  request.initialize_http_header(:'User-Agent' => args[:user].useragent,
                                 :Accept => Instagram::CONSTANTS::HEADER[:accept],
                                 :'Accept-Encoding' => Instagram::CONSTANTS::HEADER[:encoding],
                                 :'Accept-Language' => args[:user].language,
                                 :'X-IG-Capabilities' => Instagram::CONSTANTS::HEADER[:capabilities],
                                 :'X-IG-Connection-Type' => Instagram::CONSTANTS::HEADER[:type],
                                 :Cookie => (args[:user].session.nil? ? '' : args[:user].session))
  request.body = args.key?(:body) ? args[:body] : nil
  http.request(request)
end