Ruby - Facebook API でアカウント情報取得!
Updated:
Ruby + Facebook API で自分のアカウントの情報を取得する方法についてです。
ただし、Facebook API 用の RubyGems ライブラリは使用しません。
忠実に、HTTP リクエストを投げて、戻ってきた JSON 形式のデータを取得する方法です。
0. 前提条件
- Ruby 2.0.0-p247 で作成・動作確認。
- 当然 Facebook アカウント取得済み。
- 当然 Facebook アプリ作成済み。
- アクセストークンには複数種類があることを認識している。(「Facebook API - アクセストークン!」も参照)
- Facebook API は非常に頻繁に仕様変更があるため、当記事の内容が通用しなくなる可能性は非常に大きい。
1. Ruby スクリプト作成
以下のような Ruby スクリプトを作成する。
実際に使用する場合は、定数に値を設定する。
また、以下は取得したデータを一括で出力しているが、JSON 形式データなので当然個別に指定して取得することも可能。
もちろん、URL を指定する時点で取得する項目を指定することも可能。(クエリストリングに fields=id,name
等を付与することで)
(ちなみに、App Access Token では自アカウントに “me” は指定できないようだ)
File: fb_api.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
require 'json'
require 'net/https'
# 各種定数
URL_BASE = "https://graph.facebook.com/{自分のユーザID or ユーザ名}"
APP_ID = "{Facebook アプリの APP-ID}"
APP_SECRET = "{Facebook アプリの APP-SECRET}"
# [CLASS] Facebook API
class FbApi
def initialize
# App Access Token 取得
@token = get_token
end
# Facebook 情報取得
def get_info
begin
uri = URI.parse(URL_BASE)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
res = http.request(Net::HTTP::Get.new("#{uri.request_uri}?access_token=#{@token}"))
contents = JSON.parse(res.body)
puts JSON.pretty_generate(contents)
# 個別に取得するなら以下のように。
#puts contents["location"]["id"]
#puts contents["location"]["name"]
rescue => e
STDERR.puts "[ERROR][#{self.class.name}.get_info] #{e}"
exit 1
end
end
private
# App Access Token 取得
# ( ここでのアクセストークンは、
# User に紐付いている User Access Token ではない。
# Facebook アプリに紐付いていている App Access Token のこと。 )
def get_token
begin
uri = URI.parse("https://graph.facebook.com/oauth/access_token")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
res = http.request(Net::HTTP::Get.new("#{uri.request_uri}?client_id=#{APP_ID}&client_secret=#{APP_SECRET}&grant_type=client_credentials"))
return res.body.split("=")[1]
rescue => e
STDERR.puts "[ERROR][#{self.class.name}.get_token] #{e}"
exit 1
end
end
end
# 開始メッセージ
puts "#### Get Facebook information [ START ]"
# Facebook 情報取得
obj_main = FbApi.new
obj_main.get_info
# 終了メッセージ
puts "#### Get Facebook information [ E N D ]"
2. Ruby スクリプト実行
作成した Ruby スクリプトを実行してみる。
$ ruby fb_api.rb
#### Get Facebook information [ START ]
{
"id": "999999999999999",
"name": "姓 名",
"first_name": "名",
"last_name": "姓",
"link": "http://www.facebook.com/xxxxxxxxxxxxx",
"username": "xxxxxxxxxxxxx",
"location": {
"id": "197013146978193",
"name": "島根県松江市"
},
"quotes": "どんなに石下を固めても、高いところに上がらなければ水平線は見えません。\n高い塔(技術開発)を建ててみなければ、新たな水平線は見えてこないのです。",
"sports": [
{
"id": "145721112161192",
"name": "自転車競技"
}
],
"favorite_teams": [
{
"id": "129160933813749",
"name": "島根スサノオマジック"
},
{
"id": "209252052429922",
"name": "チームがんばれ!ニッポン!(Japan Olympic Team)"
}
],
"favorite_athletes": [
{
"id": "126411047453055",
"name": "宇佐美里香(Rika Usami)"
},
{
"id": "199013876792444",
"name": "隠岐の海 歩"
},
{
"id": "331199495270",
"name": "Kei Nishikori"
}
],
"gender": "male",
"email": "masaru@mk-mode.com",
"locale": "ja_JP",
"languages": [
{
"id": "208998719126251",
"name": "日本語"
}
]
}
#### Get Facebook information [ E N D ]
正常に取得できている。
参考サイト
プログラムを作成・実行する前に、どのようなリクエストでどのような値が取得できるかを以下のサイトで事前に確認できる。(ブラウザで確認するより断然確認しやすい)
その他、ドキュメントは以下を参照。
今回はユーザ情報を取得したが、当然様々な情報が取得可能です。情報の取得どころか投稿等も可能です。
何か有用なアプリを作ってみたくなります。
以上。
Comments