Help us understand the problem. What is going on with this article?

Google Apps Script (GAS) でTwitterへ投稿するだけの機能を実装してみる

More than 1 year has passed since last update.

はじめに

GASを使ってみたくて何か良い題材が無いかなーと探していたところ、Twitter Bot という題材を見つけました。
ただ、もっと一番シンプルなサンプルを練習用に作ろうということで、手動でTwitterに投稿するだけ、のサンプルを作ります。
まぁ投稿だけなら本来はTwitterでやればいいんですけどね。あくまで練習用ということで。

下準備

Twitter API のキーを取得する

Twitter Application Management にアクセスし、APIキー(Consumer Key)を取得する。
「Consumer Key (API Key)」「Consumer Secret (API Secret)」が取得できたらOK。
アクセストークンでは無いのでご注意を。

※ APIキーを取得するだけなんですが、意外に苦労したので、詰みポイントをまとめました。
・APIキー取得するためにTwitterに電話番号の登録が必要
・Twitterに電話番号を登録する際に認証番号の通知が来ないことがある
⇒言語設定を[英語]にすることで通知が受け取れるようになる
・確認番号の認証が失敗する
⇒言語設定を[日本語]に戻してから認証を行う
・Callback URLを設定する
⇒ Callback URLを設定していないと後述の authorize() で認証エラーが発生します

Twitter DevelopersでAPIキーの取得すると書いてある記事もあるのですが、これは昔の話で現在はTwitter Application ManagementからAPIキーを取得するようですね。

TwitterWebService ライブラリ の導入

TwitterWebService ライブラリを導入します。公式のライブラリではないようです。(TwitterWebService.gs)

プロジェクトキー: 1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF

ネットで見かけるのは「MFE2ytR_vQqYfZ9VodecRE0qO0XQ_ydfb」のプロジェクトキーを利用しているサンプルが多かったのですが、こっちのほうが新しそうなのでこっちで。

導入方法は、以下。
① スプレッドシートのスクリプトエディタのメニューから「リソース>ライブラリ」を選択し、ライブラリウィンドウを開く
2017-11-16_125538.png

② 「ライブラリの追加」欄にプロジェクトキーを打ち込み、「追加」ボタンをクリック
2017-11-21_125544.png

③ ライブラリのバージョン(最新)を指定して「保存」ボタンを押す
2017-11-21_125607.png

投稿機能の実装

入力欄と投稿ボタンを作成

以下の様に入力欄と投稿ボタンを設置します。
と言っても、セルに罫線を引いて、図形描画で図形を配置しただけです。画面準備はこれで完了。
2017-11-17_125943.png

プログラム作成

まずは、スクリプトエディタに以下のコードを入力する。
'Consumer Key (API Key)', 'Consumer Secret (API Secret)' は自分のAPIキーに置き換えてください。

// 認証用インスタンス
var twitter = TwitterWebService.getInstance(
  'Consumer Key (API Key)',       // 作成したアプリケーションのConsumer Key
  'Consumer Secret (API Secret)'  // 作成したアプリケーションのConsumer Secret
);

// 認証
function authorize() {
  twitter.authorize();
}

// 認証解除
function reset() {
  twitter.reset();
}

// 認証後のコールバック
function authCallback(request) {
  return twitter.authCallback(request);
}

// セルを取得
var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 「シート1」はシート名
var postMessageCell = sheetData.getRange(2, 3); // セルの位置。縦横それぞれ1~の番号で指定できる

// ツイートを投稿
function postUpdateStatus() {
  var service  = twitter.getService();
  var response = service.fetch('https://api.twitter.com/1.1/statuses/update.json', {
    method: 'post',
    payload: { status: postMessageCell.getValue() }
  });
}

Twitterアプリの認証を行う

① スクリプトエディタのメニューバーにある「関数を選択」をクリックし、「authorize」を選ぶ。
2017-11-28_125212.png

② 「実行」ボタンをクリックする。
2017-11-28_125221.png

③ メニューから「表示>ログ」を選択してログを開いて、そこに表示されたURLをコピーする。(ここが最初分からなかった。)
2017-11-28_125606.png
2017-11-28_125713.png
↑認証用URL(選択されている部分)をコピーする

④ 認証用URLにアクセスし、認証を完了させる。
2017-11-29_084225.png
2017-11-29_084246.png
↑成功すると「Success」と書かれた画面が表示される。表示されたら閉じて問題ない。

送信ボタンに関数へのトリガを設定する

① 図形を選択すると出て来る「︙」をクリックし、「スクリプトを割り当て…」を選ぶ。
2017-11-28_124301.png

② 出てきたウィンドウで関数名を入力して「OK」ボタンをクリックする。
2017-11-28_124516.png

動かす

あとは、入力欄に文字列を入力して、投稿ボタンをクリックする。
2017-11-30_124008.png

これで投稿できました。
2017-11-30_124224.png

最後に

Twitter APIキーの取得やTwitterアプリの認証などの思いもよらないところで躓いて苦労しました。

あと、参考にさせていただいたサイトです。勉強になりました。
google apps script + twitter api 【001】タイムラインの取得とツイート
どうやら Twitter 社は日本人に Twitter API Key を取得させる気がないらしい

akkey2475
技術迷子中。 メインはPHPですが、他の強みを手に入れるべくいろいろ触ってみているところ。
http://dev-n-gine.akkey.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした