Coldfusion ノート|Twitter API v2 と OAuth 2.0
ColdfusionでTwitter API v2 を使って Tweet する手順のメモ
*完全なプログラムじゃなくて、手作業を介在させて確認しながらやっています。
変数の設定
<cfset client_id = "Developers Portal よりClient ID ">
<cfset client_secret = "Developers Portal よりClient Secret ">
<cfset client_b64 = ToBase64('#client_id#:#client_secret#')>
<cfset state = "kit_mu"><!--- 任意の文字列、クライアント認証後にリダイレクト時にURLのクエリとしても取得可能 --->
<cfset code_verifier = "任意の推測されない文字列 43〜128文字">
<cfset code_challenge = "code_verifie を SHA256で計算した値">
<cfset rd_url = "https://twitter.com/"><!--- リダイレクト先 最終的には認証後にえらえるコードを読み取るプログラムの設置URL --->
<cfset tweet_text = '{"text":"こんにちは!"}'>
1.クライアントがアプリ使用の認証コードを発行
<cfoutput>
https://twitter.com/i/oauth2/authorize?response_type=code&#client_id#&redirect_uri=#rd_url#&scope=tweet.read%20tweet.write%20users.read%20offline.access&state=#state#&code_challenge=#code_challenge#&code_challenge_method=s256
</cfoutput>
2.APIを実際に使うための認証トークンと再取得のためのトークンを取得
1.でつくったURLをリクエストするとTwitterのアプリ認証画面になり、許可すると次のクエリを付与してリダイレクトされます。
?state=#state#&code=XXXXXXX
このコードを30秒以内に次のプログラムを実行すると認証トークン(access_token)と再取得のためのトークン(refresh_token)が得られます。
<cfhttp url="https://api.twitter.com/2/oauth2/token?code=#URL.code#&grant_type=authorization_code&client_id=#client_id#&redirect_uri=#rd_url#&code_verifier=#code_verifier#" method="post" result="r1">
<cfhttpparam type="header" name="Authorization" value="Basic #client_b64#">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencode">
</cfhttp>
<cfset jsontext = DeserializeJSON(r1.Filecontent)>
<cfdump var="#jsontext#">
<cfset session.access_token = jsontext.access_token>
<cfset session.refresh_token = jsontext.refresh_token>
3.ツイートする
2.の認証トークンは7200秒有効です。
<cfhttp url="https://api.twitter.com/2/tweets" method="post" result="r2" charset="utf-8">
<cfhttpparam type="header" name="Content-type" value="application/json">
<cfhttpparam type="header" name="Authorization" value="Bearer #session.access_token#">
<cfhttpparam type="body" value="#tweet_text#">
</cfhttp>
<cfdump var="#r2#">
タイムラインで確認して、ツイートできてればOK
4.7200秒後は
7200秒後は認証トークンが無効になっているので、下記プログラムで再取得。
<cfhttp url="https://api.twitter.com/2/oauth2/token?refresh_token=#session.refresh_token#&grant_type=refresh_token&client_id=#client_id#&redirect_uri=#rd_url#&code_verifier=#code_verifier#" method="post" result="r3">
<cfhttpparam type="header" name="Authorization" value="Basic #client_b64#">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencode">
</cfhttp>
<cfset jsontext = DeserializeJSON(r3.Filecontent)>
<cfset session.access_token = jsontext.access_token>
<cfset session.refresh_token = jsontext.refresh_token>
この記事が気に入ったらサポートをしてみませんか?