scribejavaでOAuthの認証を行いアクセストークンを取得する
この記事ではTwitterを対象にAmmoniteでやります。
依存を追加
執筆時点の最新版を使います
@ import $ivy.`com.github.scribejava:scribejava-apis:6.4.1` import $ivy.$
サービスクラスのインスタンスを得る
Twitter, Yahoo! など、デフォルトでいくつかのWebサービスに対応したクラスが提供されている。
@ import com.github.scribejava.apis.
AWeberApi KeycloakApi TumblrApi
Asana20Api LinkedInApi TutByApi
AutomaticAPI LinkedInApi20 TwitterApi
BoxApi20 LiveApi UcozApi
DataportenApi MailruApi ViadeoApi
DiggApi MediaWikiApi VkontakteApi
DiscordApi MeetupApi WunderlistAPI
DoktornaraboteApi MicrosoftAzureActiveDirectory20Api XingApi
EtsyApi MicrosoftAzureActiveDirectoryApi YahooApi
FacebookApi MisfitApi YahooApi20
FitbitApi20 NaverApi facebook
FlickrApi OdnoklassnikiApi fitbit
Foursquare2Api PinterestApi imgur
FoursquareApi Px500Api mailru
FrappeApi RenrenApi microsoftazureactivedirectory
FreelancerApi SalesforceApi odnoklassniki
GeniusApi SinaWeiboApi openid
GitHubApi SinaWeiboApi20 salesforce
GoogleApi20 SkyrockApi tutby
HHApi StackExchangeApi vk
HiOrgServerApi20 TheThingsNetworkV1StagingApi wunderlist
ImgurApi TheThingsNetworkV2PreviewApi
KaixinApi20 TrelloApi
Twitterだとこんな感じ
@ import com.github.scribejava.core.builder.ServiceBuilder import com.github.scribejava.core.builder.ServiceBuilder @ import com.github.scribejava.apis.TwitterApi import com.github.scribejava.apis.TwitterApi @ val twitter = new ServiceBuilder("your_api_key").apiSecret("your_api_secret").build(TwitterApi.instance) twitter: com.github.scribejava.core.oauth.OAuth10aService = com.github.scribejava.core.oauth.OAuth10aService@160cf225
リクエストトークンを取得する
@ val requestToken = twitter.getRequestToken
requestToken: com.github.scribejava.core.model.OAuth1RequestToken = com.github.scribejava.core.model.OAuth1RequestToken@f46f5616
「簡単でしょう?」 と、ドキュメントでは言っている
認証画面のURLを得る
@ val authUrl = twitter.getAuthorizationUrl(requestToken) authUrl: String = "https://api.twitter.com/oauth/authorize?oauth_token=x8052gAAAAAA3Q69Axxxxxxxxxx"
ユーザ認証を行いPINを得る
前節の authUrl
をブラウザで開く。
コピペが面倒なひとは java.aws.Desktop#browse
を使うといいでしょう。
@ java.awt.Desktop.getDesktop.browse(new java.net.URI(authUrl))
(ブラウザが開く)
RequestToken と PIN から AccessToken を得る
@ val accessToken = twitter.getAccessToken(requestToken, "3xxxxx4") accessToken: com.github.scribejava.core.model.OAuth1AccessToken = com.github.scribejava.core.model.OAuth1AccessToken@f8e4cf29 @ accessToken.getToken res15: String = "your_access_token" @ accessToken.getTokenSecret res16: String = "your_token_secret"
やった~
(おまけ) Twitterのアクセストークンを取得するScalaスクリプト
twitter_auth.sc
import $ivy.`com.github.scribejava:scribejava-apis:6.4.1` import com.github.scribejava.core.builder.ServiceBuilder import com.github.scribejava.apis.TwitterApi import java.awt.Desktop import java.net.URI @main def main(apiKey: String, apiSecret: String): Unit = { val twitter = new ServiceBuilder(apiKey).apiSecret(apiSecret).build(TwitterApi.instance) val requestToken = twitter.getRequestToken() val authUrl = twitter.getAuthorizationUrl(requestToken) Desktop.getDesktop.browse(new URI(authUrl)) println("Enter the PIN...") val pin = scala.io.StdIn.readLine val accessToken = twitter.getAccessToken(requestToken, pin) println(s"Access Token: ${accessToken.getToken}") println(s"Access Token Secret: ${accessToken.getTokenSecret}") }
amm twitter_auth.sc --apiKey your_api_key --apiSecret your_api_secret