見出し画像

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>



この記事が気に入ったらサポートをしてみませんか?