この記事はWACUL Advent Calendar の22日目です。
はじめに
FacebookのAPIをgo言語から扱いたいと思います。
FacebookのAPIはOauthの認証をする必要があります。ユーザの認証を経て、トークンを取得し、そのトークンを使用してAPIを呼びます。
下準備
適当にFacebookアプリを登録し、アプリIDとapp secret を控えておきます。
そして、Reidirect URL に http://localhost:8080
を登録しておきます。
APIを呼ぶ
以下の手順を実装します。
- 認証ページのURLを表示
- コールバックされたときのために:8080でサーバを起動
- ユーザはURLをコピーしてブラウザに貼り付け
- 認証するとlocalhost:8080にコールバック
- コールバックの実装では、パラメータで渡ってくるコードからトークンに変換し、トークンを使ってAPIを呼ぶ
ソースコードは以下です。
package main
import (
"fmt"
"log"
"net/http"
fb "github.com/huandu/facebook"
"golang.org/x/oauth2"
fbauth "golang.org/x/oauth2/facebook"
)
var conf *oauth2.Config
func main() {
conf = &oauth2.Config{
ClientID: "11111111111111",
ClientSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxx",
Endpoint: fbauth.Endpoint,
RedirectURL: "http://localhost:8080/",
}
//認証ページのURL
url := conf.AuthCodeURL("")
fmt.Println(url)
fmt.Println("Please access the URL")
//リダイレクトURLで指定したサーバを起動しておく
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
code := r.FormValue("code") //codeが返ってくるので取得
//codeを使ってAccessTokenを取得する
token, err := conf.Exchange(oauth2.NoContext, code)
if err != nil {
log.Fatal("exchange error", err.Error())
}
client := conf.Client(oauth2.NoContext, token)
session := &fb.Session{
Version: "v2.8",
HttpClient: client,
}
//APIを使って自身の情報を取得
res, err := session.Get("/me?fields=id,name", nil)
if err != nil {
log.Fatal("api get error", err.Error())
}
fmt.Println(res["name"]) // your facebook name
}
以上で、facebook APIを呼ぶことができました。