fobos 0.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 80db1bacf6dad8f1052ece5a78d87915bc1541e0
4
+ data.tar.gz: bff2eb2103c9c469f458cb85e4fd6797313f577a
5
+ SHA512:
6
+ metadata.gz: 929cd0c4f8c94f985edfcd3f02a0be9148cab0b1819ee522ae9ae24ef045f08e1e8fa21600af0e443deff09ac3163ecae7c6056821e68adce743e3f77793c758
7
+ data.tar.gz: 51f3285424929faeda857505c7618f5cdc31934b525b239f8f117d777842106de71838285426d99832e8aa229a68275c3f341dfd4ca96f1612aaba211c9fe40b
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ .idea/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fobos.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Max Goncharov
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,64 @@
1
+ # Fobos
2
+
3
+ Fobos is a easy to use, based on HTTParty gem for working with Facebook Graph and REST API.
4
+
5
+
6
+ It's Ruby based, so it compatible with any frameworks like Rails, Sinatra, etc.
7
+
8
+ In current version it works only with basic Facebook Graph API features. In next versions REST API and new features for Graph API will be added.
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'fobos'
16
+ ```
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install fobos
25
+
26
+ ## Usage
27
+ At first you need to initialize OAuth.
28
+
29
+ ```ruby
30
+ oauth = Fobos::GraphAPI::OAuth.new(app_id, app_secret, oauth_callback_url)
31
+ ```
32
+
33
+ Then call method which generate URL for getting access code.
34
+
35
+ ```ruby
36
+ access_code_url = oauth.get_user_access_code_url
37
+ ```
38
+
39
+ **OR**, you can make HTTP request.
40
+
41
+ ```ruby
42
+ oauth.get_user_access_code
43
+ ```
44
+
45
+ Now you can get access token from access code.
46
+
47
+ ```ruby
48
+ oauth.get_user_access_token
49
+ ```
50
+
51
+ On oauth_callback_url facebook will send token in params.
52
+
53
+
54
+ With access token you can make requests to Facebook Graph API.
55
+
56
+ Use Fobos::GraphAPI::Users for working with user's data and Fobos::GraphAPI::Pages for working with Facebook Pages.
57
+
58
+ ## Contributing
59
+
60
+ 1. Fork it ( https://github.com/[my-github-username]/fobos/fork )
61
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
62
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
63
+ 4. Push to the branch (`git push origin my-new-feature`)
64
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'fobos/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "fobos"
8
+ spec.version = Fobos::VERSION
9
+ spec.authors = ["Max Goncharov"]
10
+ spec.email = ["mxgoncahrov@gmail.com"]
11
+ spec.summary = %q{Fobos is based on HTTParty gem for using Facebook Graph and REST API.}
12
+ spec.description = %q{}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+
24
+ spec.add_dependency "httparty", "~> 0.13"
25
+ end
@@ -0,0 +1,5 @@
1
+ require "fobos/version"
2
+
3
+ module Fobos
4
+ require 'fobos/graph_api'
5
+ end
@@ -0,0 +1,7 @@
1
+ module Fobos
2
+ module GraphAPI
3
+ require 'graph_api/o_auth'
4
+ require 'graph_api/pages'
5
+ require 'graph_api/pages'
6
+ end
7
+ end
@@ -0,0 +1,91 @@
1
+ module Fobos
2
+ module GraphAPI
3
+ # Provides generating of access codes and access tokens for working with Facebook API.
4
+ #
5
+ #
6
+ # Need HTTParty for making HTTP calls.
7
+ # More about HTTParty here: https://github.com/jnunemaker/httparty
8
+
9
+
10
+ class OAuth
11
+ require 'cgi'
12
+ include HTTParty
13
+
14
+
15
+ # ID of your Facebook App. You can get in your app's manage page.
16
+ attr_accessor :app_id
17
+ # Secret key of your Facebook App. You can get in your app's manage page.
18
+ attr_accessor :app_secret
19
+ # URL for redirecting after FB action on FB server-side. <b>NOTE:</b> callback_url must be the same for get_oauth_url and get_user_access_token_url
20
+ attr_accessor :oauth_callback_url
21
+ # Store long-live access token (set it manually).
22
+ attr_accessor :access_token
23
+
24
+ # Store Facebook default URL
25
+ FB_URI = 'https://www.facebook.com'
26
+ # Store Facebook Graph API URL
27
+ GRAPH_URI = 'https://graph.facebook.com'
28
+
29
+ # Initialize new object for Facebook OAuth actions.
30
+ def initialize(app_id, app_secret, oauth_callback_url)
31
+ @app_id = app_id
32
+ @app_secret = app_secret
33
+ @oauth_callback_url = oauth_callback_url
34
+ end
35
+
36
+ # Generate link for getting user's "access code" (<b>NOT ACCESS TOKEN</b>). After you make call of this link FB redirect you to @oauth_callback_url with "code" in params.
37
+ #
38
+ # <b>Options</b> you can see here https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/v2.1#login
39
+ def get_user_access_code_url(oauth_callback_url = @oauth_callback_url, options = {})
40
+ options_part = ''
41
+ options_part = "&" + options.map {|k,v| "#{k}=#{v.kind_of?(Array) ? v.join(',') : v}" }.join('&') unless options.empty?
42
+
43
+ query = "/dialog/oauth?client_id=#{@app_id}&redirect_uri=#{oauth_callback_url}#{options_part}"
44
+
45
+ (FB_URI.to_s + query.to_s).to_s
46
+ end
47
+
48
+ # Provide call of link what is result of get_user_access_code_url
49
+ def get_user_access_code(oauth_callback_url = @oauth_callback_url, options = {})
50
+ uri = get_user_access_code_url(oauth_callback_url, options)
51
+ self.class.get(uri)
52
+ end
53
+
54
+ # Generate link for getting user's <b>ACCESS TOKEN</b> by code given with get_user_access_code
55
+ def get_user_access_token_url(oauth_callback_url = @oauth_callback_url, code)
56
+ query = "/oauth/access_token?client_id=#{@app_id}&client_secret=#{@app_secret}&code=#{code}&redirect_uri=#{oauth_callback_url}"
57
+
58
+ GRAPH_URI.to_s + query.to_s
59
+ end
60
+
61
+ # Provide call of link what is result of get_user_access_token_url. Returned parsed access_token.
62
+ def get_user_access_token(oauth_callback_url = @oauth_callback_url, code)
63
+ response = self.class.get(get_user_access_token_url(oauth_callback_url, code))
64
+ parsed_params = CGI::parse(response.parsed_response)
65
+ parsed_params["access_token"].first
66
+ end
67
+
68
+ # Return users access code from params which returned by Facebook
69
+ def get_user_access_code_from_params(params)
70
+ code = params[:code]
71
+ if code.nil?
72
+ raise 'An error has occurred. You code is nil. Please check is your actions is valid.'
73
+ else
74
+ code
75
+ end
76
+ end
77
+
78
+ # Generate link for getting long-live token (~60 days) instead short-live token (~1-2 hours)
79
+ def get_user_long_live_access_token_url(access_token)
80
+ query = "/oauth/access_token?grant_type=fb_exchange_token&client_id=#{app_id}&client_secret=#{app_secret}&fb_exchange_token=#{access_token}"
81
+
82
+ GRAPH_URI.to_s + query.to_s
83
+ end
84
+
85
+ # Provide call of link what is result of get_user_long_live_access_token_url
86
+ def get_user_long_live_access_token(access_token)
87
+ self.class.get(get_user_long_live_access_token_url(access_token))
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,58 @@
1
+ module Fobos
2
+ module GraphAPI
3
+ class Pages
4
+ include HTTParty
5
+
6
+ # You can get access token with Fobos::GraphAPI::Oauth.
7
+ attr_accessor :access_token
8
+
9
+ # Store Facebook default URL
10
+ FB_URI = 'https://www.facebook.com'
11
+ # Store Facebook Graph API URL
12
+ GRAPH_URI = 'https://graph.facebook.com'
13
+
14
+ # Need access token for making calls.
15
+ def initialize(access_token)
16
+ @access_token = access_token
17
+ end
18
+
19
+ # Return list of user's accounts.
20
+ #
21
+ # Use access_token from Fobos::GraphAPI::Pages.new
22
+ def get_accounts
23
+ user = Fobos::GraphAPI::Users.new(@access_token)
24
+ user.get_request(fields: 'accounts')
25
+ end
26
+
27
+ # Publishing post to the page wall.
28
+ #
29
+ # If you call it with <b>USER_ACCESS_TOKEN</b> it will publish post from user!
30
+ #
31
+ # If you want publish something from Page you need call it with <b>PAGE_ACCESS_TOKEN</b>. You can get it from list of user's account returned by Fobos::GraphAPI::Pages.get_accounts.
32
+ def post_to_page(page_id, page_access_token, options = {})
33
+ options_part = ''
34
+ options_part = options.map {|k,v| "#{k}=#{v.kind_of?(Array) ? v.join(',') : v}" }.join('&') unless options.empty?
35
+
36
+ query = GRAPH_URI.to_s + "/#{page_id}" + "/feed?#{options_part}&access_token=#{page_access_token}"
37
+
38
+ encoded_url = URI.encode(query)
39
+
40
+ puts encoded_url
41
+
42
+ self.class.post(URI.parse(encoded_url))
43
+ end
44
+
45
+ # Return feed list of page.
46
+ #
47
+ # Use access_token from Fobos::GraphAPI::Pages.new
48
+ def get_feed(page_id, options = {})
49
+ options_part = ''
50
+ options_part = options.map {|k,v| "#{k}=#{v.kind_of?(Array) ? v.join(',') : v}" }.join('&') unless options.empty?
51
+
52
+ query = GRAPH_URI.to_s + "/#{page_id}" + "/feed?#{options_part}&access_token=#{@access_token}"
53
+
54
+ self.class.get(query)
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,49 @@
1
+ module Fobos
2
+ module GraphAPI
3
+ class Users
4
+ include HTTParty
5
+
6
+ # You can get access token with Fobos::GraphAPI::Oauth.
7
+ attr_accessor :access_token
8
+
9
+ # Store Facebook default URL
10
+ FB_URI = 'https://www.facebook.com'
11
+ # Store Facebook Graph API URL
12
+ GRAPH_URI = 'https://graph.facebook.com'
13
+
14
+ # Need access token for making calls.
15
+ def initialize(access_token)
16
+ @access_token = access_token
17
+ end
18
+
19
+ # Provides getting user's data with options.
20
+ # Options must be a hash. You can provide value as String or Array.
21
+ #
22
+ # E.g. Fobos::GraphAPI::Users.new(access_token).get_request(fields: 'id,first_name,last_name') will return ID, FIRST NAME and LAST NAME of user.
23
+ def get_request(options = {})
24
+ options_part = ''
25
+ options_part = options.map {|k,v| "#{k}=#{v.kind_of?(Array) ? v.join(',') : v}" }.join('&') unless options.empty?
26
+
27
+ query = GRAPH_URI.to_s + '/v2.1' '/me?' + options_part + "&access_token=#{@access_token}"
28
+
29
+ self.class.get(query)
30
+ end
31
+
32
+ # Provides sending post request (publishing) for user.
33
+ # Options must be a hash. You can provide value as String or Array.
34
+ #
35
+ # E.g. Fobos::GraphAPI::Users.new(access_token).post_request(message: 'This is test message') will post "This is test message" to user's feed.
36
+ def post_request(options = {})
37
+ options_part = ''
38
+ options_part = options.map {|k,v| "#{k}=#{v.kind_of?(Array) ? v.join(',') : v}" }.join('&') unless options.empty?
39
+
40
+ query = GRAPH_URI.to_s + '/v2.1' '/me/feed?' + options_part + "&access_token=#{@access_token}"
41
+
42
+ encoded_url = URI.encode(query)
43
+
44
+ self.class.post(URI.parse(encoded_url))
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,3 @@
1
+ module Fobos
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fobos
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Max Goncharov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: httparty
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.13'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.13'
55
+ description: ''
56
+ email:
57
+ - mxgoncahrov@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - fobos.gemspec
68
+ - lib/fobos.rb
69
+ - lib/fobos/graph_api.rb
70
+ - lib/fobos/graph_api/o_auth.rb
71
+ - lib/fobos/graph_api/pages.rb
72
+ - lib/fobos/graph_api/users.rb
73
+ - lib/fobos/version.rb
74
+ homepage: ''
75
+ licenses:
76
+ - MIT
77
+ metadata: {}
78
+ post_install_message:
79
+ rdoc_options: []
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubyforge_project:
94
+ rubygems_version: 2.2.2
95
+ signing_key:
96
+ specification_version: 4
97
+ summary: Fobos is based on HTTParty gem for using Facebook Graph and REST API.
98
+ test_files: []