igm 1.0.0
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 +7 -0
- data/README.md +31 -0
- data/lib/igm.rb +53 -0
- metadata +75 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0548d51c30189106b6a506180cd0e53047444aa2
|
4
|
+
data.tar.gz: 522e7bcbb7c2d6bb4fac36a13803efd62ae7fc9d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ca93781e4a19aab081d644c848e03258c9d4be3dd24ad339baae2e5f34795317bb3ea76758ea02920fbcde6cea5347971c0b9be4ce5787ed3d73a927b140279e
|
7
|
+
data.tar.gz: 0a541abf507bb7028a61a1ffaa8fbae87316c86065f51efbca1ad43203cef0f655301ea9578e51edd1755970f9663d8eed4ebfe0ee1c4b2589905f7fecbb3367
|
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# IGM
|
2
|
+
|
3
|
+
You can use this library to implement Instagram login in your Ruby application.
|
4
|
+
|
5
|
+
We use this at [Chicisimo](https://github.com/chicisimo).
|
6
|
+
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
require "sinatra"
|
11
|
+
require "igm"
|
12
|
+
|
13
|
+
REDIRECT_URI = "https://something.com/login/instagram/token"
|
14
|
+
|
15
|
+
IGM.configure do |config|
|
16
|
+
config.client_id = "xxx"
|
17
|
+
config.client_secret = "xxx"
|
18
|
+
end
|
19
|
+
|
20
|
+
get "/login/instagram" do
|
21
|
+
redirect to(IGM.authorize_uri(redirect_uri: REDIRECT_URI, scope: %w{basic}))
|
22
|
+
end
|
23
|
+
|
24
|
+
get "/login/instagram/token" do
|
25
|
+
code = params[:code]
|
26
|
+
|
27
|
+
access_token = IGM.get_access_token(redirect_uri: REDIRECT_URI, code: code) # => "51116472.c3144az.2s1ce1c0074u4918aad3454263e4fe6c"
|
28
|
+
|
29
|
+
user = IGM.get_user_info(access_token) # => {:username=>"pedrotgimenez", :bio=>"autodidact. I write software at @chicisimo.", :website=>"https://twitter.com/pedrotgimenez", :profile_picture=>"https://igcdn-photos-d-a.akamaihd.net/hphotos-ak-xap1/t51.2885-19/11191353_1624249301122731_1724880273_a.jpg", :full_name=>"Pedro Giménez", :counts=>{:media=>65, :followed_by=>1, :follows=>1}, :id=>"xxxx"}
|
30
|
+
end
|
31
|
+
```
|
data/lib/igm.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require "json"
|
2
|
+
require "nestful"
|
3
|
+
|
4
|
+
module IGM
|
5
|
+
extend self
|
6
|
+
|
7
|
+
INSTAGRAM_URL = "https://api.instagram.com"
|
8
|
+
|
9
|
+
attr_writer :client_id, :client_secret
|
10
|
+
|
11
|
+
def configure
|
12
|
+
yield self
|
13
|
+
end
|
14
|
+
|
15
|
+
def authorize_uri(params)
|
16
|
+
params[:scope] = params[:scope].join("+")
|
17
|
+
params[:client_id] = @client_id
|
18
|
+
params[:response_type] = "code"
|
19
|
+
|
20
|
+
query_string = params_to_query_string(params)
|
21
|
+
|
22
|
+
"#{INSTAGRAM_URL}/oauth/authorize?#{query_string}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_access_token(params)
|
26
|
+
params[:client_id] = @client_id
|
27
|
+
params[:client_secret] = @client_secret
|
28
|
+
params[:grant_type] = "authorization_code"
|
29
|
+
|
30
|
+
response = Nestful.post("#{INSTAGRAM_URL}/oauth/access_token", params)
|
31
|
+
response = parse_response(response)
|
32
|
+
|
33
|
+
response[:access_token]
|
34
|
+
end
|
35
|
+
|
36
|
+
def get_user_info(token)
|
37
|
+
response = Nestful.get("#{INSTAGRAM_URL}/v1/users/self?access_token=#{token}")
|
38
|
+
|
39
|
+
response = parse_response(response)
|
40
|
+
|
41
|
+
response[:data]
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def params_to_query_string(params)
|
47
|
+
params.map { |k,v| "#{k}=#{v}" }.join("&")
|
48
|
+
end
|
49
|
+
|
50
|
+
def parse_response(response)
|
51
|
+
JSON.parse(response.body, symbolize_names: true)
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: igm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pedro Gimenez
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nestful
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.0'
|
41
|
+
description: Interacts with Instagram's API.
|
42
|
+
email:
|
43
|
+
- pedro@chicisimo.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files:
|
47
|
+
- README.md
|
48
|
+
files:
|
49
|
+
- README.md
|
50
|
+
- lib/igm.rb
|
51
|
+
homepage: http://github.com/pedrogimenez/igm
|
52
|
+
licenses:
|
53
|
+
- MIT
|
54
|
+
metadata: {}
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 2.1.0
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 2.2.0
|
72
|
+
signing_key:
|
73
|
+
specification_version: 4
|
74
|
+
summary: Interacts with Instagram's API.
|
75
|
+
test_files: []
|