Class: FansWatch::FbApi
- Inherits:
-
Object
- Object
- FansWatch::FbApi
- Defined in:
- lib/fanswatch/fb_api.rb
Overview
Service for all FB API calls
Constant Summary collapse
- FB_URL =
'https://graph.facebook.com'
- API_VER =
'v2.8'
- FB_API_URL =
URI.join(FB_URL, "#{API_VER}/")
- FB_TOKEN_URL =
URI.join(FB_API_URL, 'oauth/access_token')
Class Method Summary collapse
- .access_token ⇒ Object
- .config ⇒ Object
- .config=(credentials) ⇒ Object
-
.page_feed(page_id) ⇒ Object
Get the collection of fans page’s postings’ (message, created_time and id) ex : { “message”=> “日前金管會確認 Apple Pay、Samsung Pay 等行動支付服務將可進入台灣市場運作後,Google 所提出 Android Pay 也確認將可進入台灣市場。而從相關說法透露,Android Pay 最快將會在近期內於台灣市場推行,但具體時間依然要等 Google 說明。”, “created_time”=>“2016-11-22T05:58:05+0000”, “id”=>“159425621565_10153840498126566” },.
-
.page_id(url) ⇒ Object
Get page_id by url ex: http “graph.facebook.com/v2.8/cyberbuzz? access_token=1311663858901254|UhNPeFDGUdXZVJwagwNxBK49t-4”.
-
.page_info(page_id) ⇒ Object
Get the fans page’s name and id ex: @id=“159425621565”, @name=“Inside 硬塞的網路趨勢觀察”.
-
.posting(posting_id) ⇒ Object
Get the single posting’s basic information by posting id which we can get from page_feed ex : { “created_time”=>“2016-11-22T03:44:08+0000”, “message”=>“網路中立性原則要求網路服務供應商及政府應平等處理所有網路上的資料,不差別對待或依不同用戶、內容、網站、平台、應用、接取裝置類型或通訊模式而差別收費。而這也是早逝的 RSS 共同開發者與 Reddit 創辦人 Aaron Swartz 長期以來所不斷捍衛的信念和目標。”, “id”=>“159425621565_10153840361851566” }.
-
.posting_attachments(posting_id) ⇒ Object
Get the attachment of a posting ex : { “description”=>“美國下一任總統川普正式任命兩名顧問,以幫助他完成在聯邦通信委員會監督(FCC)的過渡。這兩名顧問分別是 Jeff Eisenach 和 Mark Jamison,均是網路中立性原則的激烈反對者。”, “media”=> { “image”=> { “height”=>720, “src”=>“external.xx.fbcdn.net/safe_image.php?d=AQBO6Ai9foDoVI1f&w=720&h=720&url=https%3A%2F%2Fwww.inside.com.tw%2Fwp-content%2Fuploads%2F2016%2F11%2F24343769071_d409f67726_k.jpg&cfs=1&sx=450&sy=0&sw=1365&sh=1365”, “width”=>720 } }, “target”=> { “url”=>“www.facebook.com/l.php?u=https%3A%2F%2Fwww.inside.com.tw%2F2016%2F11%2F22%2Fdonald-j-trump-net-neutrality&h=ATO8VyRbirwfQAQraYgt8e1aQEoG6oAneIqomLzhe0gGVg_0iE5TAeJhKyhjRzwuCtvKy2mDXL6iSKtwmB6ABCLbyE8&s=1&enc=AZMg3ju-UJWf_VvBESGjeaIUYH7vIVJLQaULvMxBrH0BI7tKrX3KXKyvL-oU5dMdUzANLjxddUlsQOX7Auz-sChD” }, “title”=>“川普的 FCC 團隊,可能會終結網路中立性原則”, “type”=>“share”, “url”=>“www.facebook.com/l.php?u=https%3A%2F%2Fwww.inside.com.tw%2F2016%2F11%2F22%2Fdonald-j-trump-net-neutrality&h=ATO8VyRbirwfQAQraYgt8e1aQEoG6oAneIqomLzhe0gGVg_0iE5TAeJhKyhjRzwuCtvKy2mDXL6iSKtwmB6ABCLbyE8&s=1&enc=AZMg3ju-UJWf_VvBESGjeaIUYH7vIVJLQaULvMxBrH0BI7tKrX3KXKyvL-oU5dMdUzANLjxddUlsQOX7Auz-sChD” }.
Instance Method Summary collapse
-
#initialize(client_id:, client_secret:) ⇒ FbApi
constructor
A new instance of FbApi.
Constructor Details
#initialize(client_id:, client_secret:) ⇒ FbApi
Returns a new instance of FbApi.
12 13 14 15 16 17 18 19 |
# File 'lib/fanswatch/fb_api.rb', line 12 def initialize(client_id:, client_secret:) access_token_response = HTTP.get(FB_TOKEN_URL, params: { client_id: ENV['FB_CLIENT_ID'], client_secret: ENV['FB_CLIENT_SECRET'], grant_type: 'client_credentials' }) @access_token = JSON.load(access_token_response.to_s)['access_token'] end |
Class Method Details
.access_token ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/fanswatch/fb_api.rb', line 21 def self.access_token return @access_token if @access_token access_token_response = HTTP.get(FB_TOKEN_URL, params: { client_id: ENV['FB_CLIENT_ID'], client_secret: ENV['FB_CLIENT_SECRET'], grant_type: 'client_credentials' }) @access_token = access_token_response.parse['access_token'] end |
.config ⇒ Object
36 37 38 39 40 |
# File 'lib/fanswatch/fb_api.rb', line 36 def self.config return @config if @config @config = { client_id: ENV['FB_CLIENT_ID'], client_secret: ENV['FB_CLIENT_SECRET'] } end |
.config=(credentials) ⇒ Object
32 33 34 |
# File 'lib/fanswatch/fb_api.rb', line 32 def self.config=(credentials) @config ? @config.update(credentials) : @config = credentials end |
.page_feed(page_id) ⇒ Object
Get the collection of fans page’s postings’ (message, created_time and id)
ex : {
"message"=> "日前金管會確認 Apple Pay、Samsung Pay 等行動支付服務將可進入台灣市場運作後,Google 所提出 Android Pay 也確認將可進入台灣市場。而從相關說法透露,Android Pay 最快將會在近期內於台灣市場推行,但具體時間依然要等 Google 說明。",
"created_time"=>"2016-11-22T05:58:05+0000",
"id"=>"159425621565_10153840498126566"
},
.
.
.
{
"message"=>"橘子集團發表新的揪團通訊 App: BeanGo! 記者會",
"created_time"=>"2016-11-22T05:38:12+0000",
"id"=>"159425621565_10153840469861566"
}
79 80 81 82 83 84 |
# File 'lib/fanswatch/fb_api.rb', line 79 def self.page_feed(page_id) feed_response = HTTP.get(URI.join(fb_resource_url(page_id), 'feed'), params: { access_token: access_token }) JSON.load(feed_response.to_s)['data'] end |
.page_id(url) ⇒ Object
Get page_id by url
ex: http "https://graph.facebook.com/v2.8/cyberbuzz?
access_token=1311663858901254|UhNPeFDGUdXZVJwagwNxBK49t-4"
{
"id": "159425621565",
"name": "Inside 硬塞的網路趨勢觀察"
}
50 51 52 53 54 |
# File 'lib/fanswatch/fb_api.rb', line 50 def self.page_id(url) fb_page_name = url.split('/')[3] response = fb_resource(fb_page_name) return response['id'] end |
.page_info(page_id) ⇒ Object
Get the fans page’s name and id
ex: @id="159425621565",
@name="Inside 硬塞的網路趨勢觀察"
59 60 61 |
# File 'lib/fanswatch/fb_api.rb', line 59 def self.page_info(page_id) fb_resource(page_id) end |
.posting(posting_id) ⇒ Object
Get the single posting’s basic information by posting id
which we can get from page_feed
ex : {
"created_time"=>"2016-11-22T03:44:08+0000",
"message"=>"網路中立性原則要求網路服務供應商及政府應平等處理所有網路上的資料,不差別對待或依不同用戶、內容、網站、平台、應用、接取裝置類型或通訊模式而差別收費。而這也是早逝的 RSS 共同開發者與 Reddit 創辦人 Aaron Swartz 長期以來所不斷捍衛的信念和目標。",
"id"=>"159425621565_10153840361851566"
}
93 94 95 |
# File 'lib/fanswatch/fb_api.rb', line 93 def self.posting(posting_id) fb_resource(posting_id) end |
.posting_attachments(posting_id) ⇒ Object
Get the attachment of a posting
ex : {
"description"=>"美國下一任總統川普正式任命兩名顧問,以幫助他完成在聯邦通信委員會監督(FCC)的過渡。這兩名顧問分別是 Jeff Eisenach 和 Mark Jamison,均是網路中立性原則的激烈反對者。",
"media"=>
{
"image"=>
{
"height"=>720,
"src"=>"https://external.xx.fbcdn.net/safe_image.php?d=AQBO6Ai9foDoVI1f&w=720&h=720&url=https%3A%2F%2Fwww.inside.com.tw%2Fwp-content%2Fuploads%2F2016%2F11%2F24343769071_d409f67726_k.jpg&cfs=1&sx=450&sy=0&sw=1365&sh=1365",
"width"=>720
}
},
"target"=>
{
"url"=>"https://www.facebook.com/l.php?u=https%3A%2F%2Fwww.inside.com.tw%2F2016%2F11%2F22%2Fdonald-j-trump-net-neutrality&h=ATO8VyRbirwfQAQraYgt8e1aQEoG6oAneIqomLzhe0gGVg_0iE5TAeJhKyhjRzwuCtvKy2mDXL6iSKtwmB6ABCLbyE8&s=1&enc=AZMg3ju-UJWf_VvBESGjeaIUYH7vIVJLQaULvMxBrH0BI7tKrX3KXKyvL-oU5dMdUzANLjxddUlsQOX7Auz-sChD"
},
"title"=>"川普的 FCC 團隊,可能會終結網路中立性原則",
"type"=>"share",
"url"=>"https://www.facebook.com/l.php?u=https%3A%2F%2Fwww.inside.com.tw%2F2016%2F11%2F22%2Fdonald-j-trump-net-neutrality&h=ATO8VyRbirwfQAQraYgt8e1aQEoG6oAneIqomLzhe0gGVg_0iE5TAeJhKyhjRzwuCtvKy2mDXL6iSKtwmB6ABCLbyE8&s=1&enc=AZMg3ju-UJWf_VvBESGjeaIUYH7vIVJLQaULvMxBrH0BI7tKrX3KXKyvL-oU5dMdUzANLjxddUlsQOX7Auz-sChD"
}
118 119 120 121 122 123 |
# File 'lib/fanswatch/fb_api.rb', line 118 def self.(posting_id) = HTTP.get(URI.join(fb_resource_url(posting_id), 'attachments'), params: { access_token: access_token }) JSON.load(.to_s)['data'].first end |