Facebook Graph API を叩くプログラムを開発するために、
無期限のアクセストークンを生成するスクリプトを書いた。
Never Expiring Facebook Long Lived Access Token, Facebook Graph API でやっている内容と同等だと思う。
最初のアクセストークンは https://developers.facebook.com/tools/explorer から取得でき
期限の確認は https://developers.facebook.com/tools/debug/accesstoken/ からできる
none_expired_token.js
(async () => {
const axios = require('axios')
const config = {
redirect_uri: 'https://..../callback',
client_id: '978620.....',
client_secret: 'f50fcd29bb66.............',
}
// Usage
// $ node none_expired_token.js $FB_ACCESS_TOKEN
//
// $FB_ACCESS_TOKEN as User Access Token from
// https://developers.facebook.com/tools/explorer
const fb_exchange_token = process.argv[2]
// main
const client = axios.create({
baseURL: 'https://graph.facebook.com',
})
let response = null
response = await client.post(`/oauth/access_token`, {
redirect_uri: config.redirect_uri,
grant_type: 'fb_exchange_token',
client_id: config.client_id,
client_secret: config.client_secret,
fb_exchange_token,
}).catch(e => {
const message = e.response.data.error
console.error(message)
})
const access_token = response.data.access_token
response = await client
.get(`/me/accounts`, {
headers: {
'Authorization': `Bearer ${access_token}`
},
})
.catch(e => {
const message = e.response.data.error
console.error(message)
})
response.data.data.forEach(data => {
console.log(data)
})
})()
おまけ: Koala(Ruby)版
OAuth#exchange_access_token_info
というメソッドが生えてる。
oauth = Koala::Facebook::OAuth.new(app_id, secret, callback_url)
result = oauth.exchange_access_token_info(oauth_token)
source_access_token = result['access_token']
graph = Koala::Facebook::API.new(source_access_token)
accounts = graph.get_object("me/accounts")
puts accounts