LoginSignup
0
0

More than 1 year has passed since last update.

DataSpiderでTwitterにツイート投稿してみた(OAuth2.0)

Last updated at Posted at 2023-02-06

はじめに

こんにちは。すぎもんです:smiley:
今回は、DataSpiderでTwitterのAPIを使ってみます。TwitterのAPI認証は、OAuth認証です。
ユーザーとパスワードで認証するbasic認証よりセキュリティ性は高いですし、サービス間の認証に使うことで利便性も向上します。様々なコミュニケーションツールやサービスが連携し合って活用されることが増えた昨今では、OAuth認証は主流のようです。
※尚、OAuth2.0の仕組み自体についてはここでは省略します。

Twitterとは

皆さんご存じのTwitterです。
SNS(ソーシャルネットワーキングサービス)の一つで、Line,Instagram,Facebook,Tiktokなど国内外に様々ありますが、コミュニケーションツールのとして使われています。また、個人利用のみではなく、企業の広告やイベント集客など、組織単位での活用も主流です。拡散性やリアルタイム性も高く、情報収集にも活用されています。

今回やること

今回は、DataSpiderで、TwitterAPIを使ってTwitterにツイート投稿をしてみます。
「DataSpiderにおけるOAuth認証でのAPI利用」の観点でも、ご参考にしてみてください。

検証の流れ

<Twitterの設定>
    ①Twitterアカウントの作成
    ②デベロッパーサイトでアプリの作成
    ③Twitterアプリの設定(権限設定)
    ④Twitterアプリの設定(Twitter APIキーの再発行)

<DataSpiderの設定>
  ■トークン取得スクリプト
    ⑤スクリプト変数の作成
    ⑥POST実行の設定
    ⑦マッピングの設定
    ⑧スクリプトの作成(フロー作成)

  ■ツイート投稿スクリプト
    ⑨スクリプト変数の作成
    ⑩POST実行の設定
    ⑪マッピングの設定
    ⑫マッピング(入力元と出力先の紐づけ)
    ⑬スクリプトの作成(フロー作成)

  ⑭グローバルリソースの作成

<スクリプトの実行(OAhth認証)>
   1. 事前確認
   2. 「トークンの取得」スクリプトを実行
   3. アクセストークンを「ツイート投稿」スクリプトに設定
   4. 「ツイート投稿」スクリプトを実行

Twitterの設定

①Twitterアカウントの作成

始めに、Twitter のアカウントがない場合は新規作成します。
https://twitter.com/i/flow/signup
image.png

②デベロッパーサイトでアプリの作成

アカウントを作成後、「Twitter デベロッパーサイト」でアプリを作成します。
Twitter デベロッパーサイトにアクセスし、「Sign up」をクリックします。
image.png
必要事項を入力し、「Let's do this」をクリックします。
image.png

以下の通り入力しました。ご参考にしてください。
   ・Twitter Account         :  アカウント名(@以降)
   ・Email               : XXXX  
    ※未設定の場合は「Add email」で、メールアドレスの認証。
   ・What country are you based in ?  : 任意(Japan)
   ・What’s your use case?       : Exploring API
   ・Will you make Twitter・・・?   : No
   ・Get Involved and updates     : チェックしない

利用規約の同意画面で内容を確認し、チェックを入れ、登録操作を進めます。
下記の画面が出てきたら、Twitter アカウントに登録しているメールアドレス宛に、送
信されたメールを確認しましょう。
image.png
メールを確認し、[Confirm your email] で認証します。
image.png
Twitter デベロッパーサイトに戻り、任意の API 名を入力して、[Get keys]を押下します。
image.png
API Key、API Key Secret、Bearer Token が表示されますが、この後で、アプリの詳細設定をした後に各種キーの再作成を行うので、ここでは、[Skip to dashboard]を押下します。
image.png
ポップアップで「Did you save your Keys and Tokens?」と確認されるので、
「Yes, I saved them」を押下し完了します。

③Twitterアプリの設定(権限設定)

Twitterアプリの設定をしていきます。
まずは、Developer PortalもDashBoad画面へ遷移します。

[Projects&Apps]を押下すると、
image.png
先程作成したアプリ「twtest5j01」が追加されています。作成したアプリを選択し、
権限設定のために「User authentication settings」の[SetUp]を押下します。
image.png
※上記画像では「Edit」になっていますが、
未設定の場合は下記のように[SetUp]と表示されます。
image.png
権限設定(User authentication setting)は、下記の通りにします。
   ・App permissions : Read and write
   ・Type of App   : Web App, Automated App or Bot
image.png
App Infoでは、必須項目である「Callback URI/Redirect URI」と、
「Website URL」を下記の通り設定し、[Save]を押下してください。
   ・Callback URI / Redirect URI 
          : http://127.0.0.1:7700/dataspider/oauth_2_0
   ・WebsiteURL : https://twitter.com/

※「127.0.0.1」は、今回の検証で使ったDataSpiderのserverアドレスです。
※また今回の接続でWebsite URLは使用しません。任意のURLを指定します。

image.png
[Save]を押下すると、下記の通りClientIDClient Secret が表示されます。
[Copy]して控えておいてください。コピー後に、[Done]を押下します。
image.png

④Twitterアプリの設定(Twitter APIキーの再発行)

アプリ詳細画面の「Keys and tokens」を表示し、Consumer Keysを「Regenerate」で再作成します。API Keyと、API Key Secretが新たに作成されるので、コピーして控えておいてください。
image.png

もし権限設定の中で「Client ID」と「Client Secret」の表示がなく作成されていない場合は、APIの詳細画面「Keys and token」より再作成可能です。

DataSpiderの設定

ツイートの投稿をするために、下記2つのスクリプトを作成することにしました。
  ・トークン取得スクリプト
  ・ツイート投稿スクリプト

■トークン取得スクリプトの作成

まずは、「トークン取得」をするためのスクリプトを作成します。
Twitterデベロッパーサイト内のStep3を、参考に設定を行いました。
Twitterデベロッパーサイト
「How to connect to endpoints using OAuth 2.0 Authorization Code Flow with PKCE」と記載がある部分をご参照ください。

⑤スクリプト変数の作成

始めに、任意の名前でプロジェクトとスクリプトを作成し、
ロジック内で使う「スクリプト変数」を定義します。
image.png
   ・変数名  : twitter_clientid
   ・変数型  : 文字列型
   ・初期値  : XXXXXXXX(Twitterの設定時に取得したClientID
image.png

同様に、下記の通り、スクリプト変数を作成します。全部で4つ作成します。
   ・変数名  : twitter_clientsecret
   ・変数型  : 文字列型
   ・初期値  : XXXXXXXX(Twitterの設定時に取得したClient Secret

   ・変数名  : twitter_auth_code
   ・変数型  : 文字列型
   ・初期値  : なし

   ・変数名  : twitter_code_verifier
   ・変数型  : 文字列型
   ・初期値  : XXXXXXXX(RFC7636の記載に基づいた43~128文字 *1)


*1 今回の接続確認では、
RFC7636の「Appendix B. Example for the s256 code_challenge_method」
https://datatracker.ietf.org/doc/html/rfc7636#appendix-B
上記内に記載されている値をそのまま使用します。

実際には推測不可能なランダムな文字列を利用するようにしてください。
Online PKCE Genarator Toolも利用可能です。


⑥POST実行の設定

次に、デザイナ画面の右側「ツールパレット」から、
[ネットワーク]>[REST]>[POST実行]より、
POST実行アイコンを、デザイナ中央にドラッグ&ドロップし設定画面を開きます。

POST_OAuth2_token取得」という名前でPOST実行処理の設定をします。
image.png
まずは、「必須設定」タブの設定をします。
「接続先」のプルダウンリストから[追加]を選択し、下記の通り設定します。
「接続テスト」を押下し、入力したURLがDataSpiderと通信可能か確認してください。
   ・接続名 : twitter_REST接続設定
   ・URL   : https://api.twitter.com/(※RESTでの接続先URLを設定)
image.png

「接続先」は、「コントロールパネル」>「グローバルリソースの設定」から
事前に設定することも可能です。

「必須設定」タブは、「パス」に「2/oauth2/token※1」を設定し、「クエリパラメータ」を下記の通り、追加します。
  名前①  : grant_type   値① : authorization_code
  名前②  : code      値③ : ${twitter_auth_code}
  名前③  : redirect_uri  値② : ${twitter_redirect_uri}※2
  名前④  : client_id    値④ : ${twitter_client_id}
  名前⑤  : code_verifier  値⑤ : ${twitter_code_verifier}

※1  パスに設定する値は、今回利用するAPIの最終的なendpointの、
    " 接続先URLに設定していない残りの部分 " です。
※2  Twitterの設定で指定した「RedirectURI」を指定します。

DataSpiderの変数の記載方法は、${スクリプト変数名} です。

image.png
また、スクリプト変数の入力は、入力欄でダブルクリックして「▶」が表示され、
一覧から選択することで入力も可能です。
image.png

次に、「リクエスト設定」タブです。
ここではリクエストデータのbody部の入力形式を指定します。

データ入力形式は、下記の通り「データ」とし、データ形式は「JSON」とします。
image.png

次に「レスポンス設定」タブです。
ここではレスポンスをどのように扱うかの設定を行います。

従来であれば、レスポンスとして取得する「access token」 や 「refresh token」 は、
DB等に保持して、APIの実行時に活用しますが、今回は接続確認のためなので「ファイル」にしました。下記のように設定します。
   ・データ出力先  :  ファイル
   ・ファイルパス  :  /data/twitter/token_response.json
image.png
次に、「ヘッダ設定」タブです。
リクエストヘッダの追加ボタンを押下し、下記のように設定してください。
   ・名前      :  Content-type
   ・値       :  x-www-form-urlencoded
image.png
最後に、「認証設定」タブです。下記のように設定してください。
   ・認証      :  ベーシック認証
   ・ユーザー    :  ${twitter_clientid}
   ・パスワード   :  ${twitter_crientsecret}
image.png
POST実行の設定は、これで完了です。

⑦マッピングの設定

続いて、マッピングの設定を追加します。
今回、POST実行の入力データとして、JSONファイルを指定しています。
DataSpiderのデザイナ画面右側のツールパレットより、[変換]→[基本]→「マッピング」を選択し、ドラッグ&ドロップし、Mappingアイコンをダブルクリックし設定します。
image.png
まずは、出力先の出力データの設定です。
image.png
出力データを右クリックして、「仮スキーマを設定」を押下します。
image.png
「仮スキーマ」を右クリックして、「ルート要素の追加」を押下します。
image.png
手動で仮スキーマに要素を追加することもできますが、今回はDataSpiderのスキーマ設定仕様に従った、スキーマファイル(XML)を使用して、仮スキーマを設定します。
下記の内容をメモ帳等のエディタに張り付けて、xmlファイルとして保存します。
  ・ファイル名  : twitter_schema1.xml
  ・保存先    : /data/twitter/(※DataSpiderのdataフォルダ下)
■作成したXMLファイル
作成したXMLファイルはこちらです。

<?xml version="1.0" encoding="UTF-8" ?>
<root type="object">
<code></code>
<grant_type></grant_type>
<client_id></client_id>
<redirect_uri></redirect_uri>
<code_verifier></code_verifier>
</root>

スキーマ読み込みのためのファイル作成が完了しました。Mappingの設定に戻ります。
Mapping設定画面右側の出力先欄の「仮スキーマ」を右クリックし、「スキーマの読み込み」を押下します。
image.png
「XMLファイルから読み込み」を選択し、「参照」より、作成したxmlファイルを指定します。
image.png
下記の通り、出力データの仮スキーマの要素が設定されたことが確認できます。
image.png
次に、デザイナ右側のツールパレットから[文字列]→[基本]→「単一文字列定数」を、Mappingキャンバスにドラッグ&ドロップします。
image.png
出力スキーマの「type」「grant_type」「redirect_uri」にそれぞれMappingするための、単一文字列定数(固定の文字列)を下記の通り、3つ作成します。

一行文字列 コメント
object object
authorization_code authorization_code
XXXXXX(※Twitter設定で指定したRedirect URI) redirect_uri

設定画面のイメージは下記の通りです。
image.png

冒頭作成したスクリプト変数と、先程作成した単一文字列定数を、それぞれ出力スキーマにマッピングしていきます。各入力元と各出力先は下記の通りです。それぞれのアイコンをドラック&ドロップでつなぎましょう。

入力元 出力先
スクリプト変数 twitter_auth_code code
スクリプト変数 twitter_ code_verifier code_verifier
スクリプト変数 twitter_clientid client_id
単一文字列定数 object type
単一文字列定数 authorization_code grant_type
単一文字列定数 redirect_uri redirect_uri

マッピング設定のイメージは下記の通りです。
image.png

⑧スクリプトの設定(フロー作成)

設定したMappingアイコンを、POST実行アイコンにドラッグ&ドロップします。

「フローの作成」というポップアップが出てくるので、[プロセスとデータフローを引く]を選択します。「マッピングを追加する」にはチェックを入れないでください。
image.png
最後に、StartアイコンをMappingアイコンに、POST実行アイコンをEndアイコンにドラッグ&ドロップして線を引きます。下記の通り、トークン取得のスクリプトが作成できました。
image.png
これで、「ツイート投稿」するために必要なスクリプトの1つ目である「トークン取得スクリプト」が完成です。

■ツイート投稿スクリプトの作成

まずは、TwitterAPIの仕様を確認し、ツイート投稿に必要な値を確認します。
ツイート投稿のAPI仕様

⑨スクリプト変数の作成

冒頭の手順通り、文字列型のスクリプト変数を下記4つ作成します。

変数名 変数の値
twitter_clientid XXXXX(※1)
twitter_clientsecret XXXXX(※1)
twitter_tweet テスト(※2)
twitter_access_token 未設定

※1 「クライアントID」「クライアントシークレット」は、TwitterのDeveloper Portalで設定した「Client ID」「Client Secret」の値を設定します。
image.png
※2 「ツイッターに投稿する文言(twitter_tweet)」は、「テスト」という文字列を初期値に設定しています。また、Twitterの場合、同一投稿はエラーになるので、初期値の設定に加え、後で実施するMapper設定の中で実行日時と連結させます。

スクリプト変数「twitter_access_token」は、テスト実行時にアクセストークンを取得して、その値を設定するので、ここでは「未設定」となります。

⑩POST実行の設定

次にデザイナ右側のツールパレットメニューから[ネットワーク]>[REST]>「POST実行」をデザイナ画面中央にドラッグ&ドロップし、POST実行の設定画面を開きます。

まずは、「必須設定」タブです。下記の通り設定します。
   ・接続先     :  twitter_REST接続設定
   ・パス      :  2/tweets
image.png
「リクエスト設定」タブは、下記の通り設定します。
   ・データ入力元  :  データ
   ・データ形式   :  JSON
image.png
「レスポンス設定」タブは、結果が確認しやすいようにファイルを指定しました。
   ・データ出力先  :  ファイル
   ・ファイルパス  :  /data/twitter/tweet_response.json
image.png
「ヘッダ設定」タブは、リクエストヘッダに下記の通り設定します。
   ・名前      :  Authorization
   ・値       :  bearer ${twitter_access_token}

${twitter_access_token}は、
スクリプト変数「twitter_access_token」のDataSpider表記です。

image.png
「認証設定タブ」は、"トークン取得設定"と同じように、ベーシック認証で、ユーザー、パスワードにそれぞれスクリプト変数の値を設定します。
下記の通り設定します。
  ・認証      :  ベーシック認証
  ・ユーザ     :  ${twitter_clientid}
  ・パスワード   :  ${twitter_clientsecret}
image.png
POST実行の設定はこれで完了です。

⑪マッピングの設定

続いて、スクリプトにマッピングを追加します。
マッピングアイコンの中で、POST実行処理の入力データとして設定するJSONの中身の設定をします。呼び出すAPI仕様を確認すると、様々なパラメータ設定が可能ですが、今回は単純に「text」のみを指定する形で実行します。

デザイナ右側のツールパレットメニューから[変換]→[基本]の「マッピング」をデザイナ中央部にドラッグ&ドロップ設定画面を開きます。

まずは、出力データのスキーマを作成しましょう。

画面右側にある出力先の出力データを設定します。
「出力データ」を右クリックし、「仮スキーマを設定」を押下します。
image.png
次に、「仮スキーマ」右クリックして「ルート要素の追加」を押下します。
image.png
作成された「root」を右クリックして[追加]→[属性]を押下します。
image.png
「出力先属性の編集」画面が表示されますので、属性名に「type」を入力しOKします。
image.png
先程同様に「root」を右クリックして[追加]→[子要素]を押下します。
image.png
「出力先属性の追加」画面が表示されますので、追加したい要素である「text」を入力しOKします。
image.png
マッピング設定画面右側の「出力先」の出力データの出力スキーマが作成できました。

⑫マッピング(入力元と出力先の紐づけ)

続いて、入力元の各スクリプト変数と出力先の各スキーマを紐づけます。

下記の通り、各入力元と各出力先をドラック&ドロップでつないでマッピングします。

入力元 出力先
スクリプト変数 twitter_tweet rootのtext
単一文字列定数 object root要素のtype

マッピング設定するイメージは、下記の通りです。
image.png
※スクリプト変数作成でご説明した通り、スクリプト変数「twitter_tweet」は、初期値"テスト"に、「実行日時」を「日時フォーマッティング」して「連結」しています。image.png
詳細設定は省略しますが、下記ページをご参考にしてみてください。
  ・DataSpiderの「日時フォーマッティング」について
  ・DataSpiderの「連結」アイコンについて

⑬スクリプトの作成(フロー作成)

スクリプト作成に戻ります。トークン取得スクリプトと同様に、StartアイコンからEndアイコンまでをそれぞれアイコンのドラッグ&ドロップでつなぎます。

mappingアイコンとPOST実行アイコンをつなぐ際に表示されるポップアップでは、「プロセスフローとデータフローを引く」を選択し、「マッピングに追加する」はチェックしないようにしてください。スクリプト完成イメージは下記の通りです。
image.png

⑭グローバルリソースの作成

最後に、認可コードを取得するための接続設定をします。

DataSpiderの「コントロールパネル」を開き、「グローバルリソースの設定」画面の「名前」項目欄にある「新しいグローバルリソースの作成」をダブルクリックします。
image.png
新たに追加するグローバルリソースの種類を選択します。
「認証」タブの「OAuth 2.0」を選択し、「次へ」を押下します。
image.png
接続内容は、下記の通りに設定します。
 ・接続名          : OAuth 2.0認証設定(twitter)

「必須設定」タブは、下記の通り設定します。
 ・クライアントID     : XXXXX
 ・クライアントシークレット: XXXXX
 ・リダイレクトURI    : http://127.0.0.1:7700/dataspider/oauth_2_0
 ・認可エンドポイント    : https://twitter.com/i/oauth2/authorize
 ・トークンエンドポイント  : https://api.twitter.com/2/oauth2/token

 ・スコープ:tweet.readusers.readoffline.accesstweet.write
 
 ・クライアント認証方式   : client_secret_basic
image.png
※「クライアントID」「クライアントシークレット」は、TwitterのDeveloper Portalで設定した「Client ID」「Client Secret」の値を設定します。
image.png
「詳細設定」タブの「追加パラメータ」に追加した「キー」と「値」の一覧です。

キー
grant_type authorization_code
response_type code
state state
code_challenge code_verifierをcode_challenge_methodで計算した値(※)
code_challenge_method s256(※使用したmethod)

下記の通り、5つ追加します。
image.png
※「code_challenge」は、トークン取得の「code_verifier」で記載している通り、サンプルサイトの値を使用しています。

詳細設定タブの入力が完了したら、グローバルリソースの設定は完了です。

設定内容は、下記ページのStep2を参考にしています。
How to connect to endpoints using OAuth 2.0 Authorization Code Flow with PKCE
必要なスコープは、下記ページの使用するエンドポイントのScopesで確認します。
OAuth 2.0 Authorization Code with PKCE列

スクリプトの実行(OAuth認証)

それでは、Twitterにツイート投稿するスクリプト実行をしてみます。
今回は、OAhth認証方式です。大枠の手順は下記の通りです。


1. 事前確認
2. 「トークンの取得」スクリプトを実行
3. アクセストークンを「ツイート投稿」スクリプトに設定
4. 「ツイート投稿」スクリプトを実行


1.事前確認

スクリプト実行前に、DataSpiderのエクスプローラdataフォルダ配下に「twitter」という名前のフォルダがあるか確認しましょう。無い場合は、作成してください。

2.「トークンの取得」スクリプトを実行

※④~⑥の手順は、30秒以内で実施してください。

①トークン取得スクリプトを開きます。
②作成したグローバルリソースと、トークン取得スクリプトのスクリプト変数「twitter_auth_code」の設定画面を開いておきます。
image.png
③グローバルリソースの設定画面内にある「トークンを発行する」を押下します。
④「認可コードの取得」リンクを押下します。
image.png
⑤ブラウザに「認可コード」が表示されるので、値をコピーして、開いておいたスクリプト変数「twitter_auth_code」の設定画面の値に張り付けて完了します。
image.png
⑥「トークン取得」のスクリプトを実行します。
image.png
DataSpiderのエクスプローラーを開き、「/data/twitter」に「token_response.json」が作成されていることを確認します。
作成されたファイルを開いて、「アクセストークン」を確認しましょう。
(※見やすいように「,」を「,改行」で置換しています。)
image.png

「"access_token":」の後に、""で括られた文字列がアクセストークンです。

3.アクセストークンを「ツイート投稿」スクリプトに設定

⑦「ツイート投稿」のスクリプト内にあるスクリプト変数「twitter_access_token」の設定画面を開きます。⑥で取得したアクセストークンを「初期値」に設定します。
image.png

4.「ツイートの投稿」スクリプトを実行

⑧ツイート投稿スクリプトを実行します。正常終了を確認出来たら、OKです。
実行後のレスポンスファイルの中身は下記の通りです。

ツイッター投稿文言が設定される出力スキーマ「text」に、スクリプト変数「twitter_tweet」の初期値「テスト」と、Mapping設定で設定した「スクリプト実行日時」が設定されていることが確認できます。
image.png

Twitter画面での投稿内容の確認

ブラウザでTwitterの管理画面を開き、投稿内容を確認します。
「ツイート投稿」スクリプトで作成したスクリプト変数「twitter_tweet」に設定した内容であり、レスポンスファイル内の「"text":"XXXXX"」のXXXXXの部分)と同じ内容が投稿されていたら成功です。

Top画面から【Home】の画像設定部分を押下し、
image.png
自身の投稿内容を確認してみます。
image.png
「ツイート投稿」スクリプト内のスクリプト変数「twitter_tweet」に設定した内容「テスト"スクリプト実行日時"」が表示されていることを確認できました。

最後に

いかがでしたでしょうか。今回は、「DataSpiderにおけるOAuth認証でのAPI利用」でした。アクセストークンの取得を実行して、取得した値を設定する等、必要な手順があるので少々手間にも思えますが、整理して実行してみると非常にシンプルかと思います。他にもOAuth認証でのサービスもたくさんありますので是非参考にしてDataSpiderと繋いでみてください。


実行方法についての補足

本来、DataSpiderのOAuth 2.0の接続設定では、
[トークンを発行する]→[認可コード取得]→取得した認可コードを貼り付けて[OK]で、
トークンが取得でき正しく扱われます。

ただわたしがやってみたところ、[OK]を押下すると、エラー(code_verifierが見つからない)となってしまいました。そのため、今回は記事内容の方法で実施してます。

アクセストークンについて

認可コードほど短くはありませんが、アクセストークンには有効期間があります。有効期限内は、ツイート投稿スクリプトを実行できます。但し、同じ内容の投稿はエラーになってしまうので、投稿内容は都度変える必要があります。

アクセストークンの再発行について

アクセストークンが期限切れとなった場合は、トークン取得スクリプトの結果ファイルである「refresh_token」を利用して、アクセストークンを取得できます。

例えば、アクセストークン、リフレッシュトークン、有効期限、の情報をDBに保持しておけば、アクセストークンの再取得が必要なのかを判定することが可能になり、状況に応じたスクリプトも作成できますね。


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0