3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

株式会社シンプルウェイAdvent Calendar 2021

Day 1

GASとTwitterAPIを用いて、ツイートを投稿する

Posted at

はじめに

プライベートでよく閲覧するTwitterに自動投稿することで物忘れ防止ができないかと思い、GASとTwitterAPIを用いて自動投稿ツールを作りました。

参考にしたサイトは以下です。

事前に準備しておくべきもの・こと

  • TwitterAPIキー
  • GASのプロジェクトへ、TwitterWebServiceライブラリの導入
    • プロジェクトキー: 1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF

Twitterに書き込むための認証用プログラムの作成

TwitterAPIを経由してTwitterに投稿するためには、Twitter側で認証が必要になります。
その認証のためのプログラムが以下の通りです。

//認証用インスタンスの生成
var twitter = TwitterWebService.getInstance(
  API_KEY,
  API_KEY_SECRET
);
 
//アプリを連携認証する
function authorize() {
  twitter.authorize();
}
 
//認証を解除する
function reset() {
  twitter.reset();
}
 
//認証後のコールバック
function authCallback(request) {
  return twitter.authCallback(request);
}

このコードを保存した上で「authorize()」を実行すると、TwitterアカウントとTwitterAPIの認証確認画面が表示されるため、認証を行ってください。

Twitterに投稿用プログラムの作成

メッセージを引数で渡すことにより、その内容をTwitterに投稿するプログラムを作成します。

TWITTER_BASE_URL = "https://api.twitter.com/1.1/";

// ツイートを投稿
postTweet = function(message) {
  var service  = twitter.getService();
  var endPointUrl = TWITTER_BASE_URL + "statuses/update.json";
  
  try {
    var response = service.fetch(endPointUrl, {
      method: "post",
      payload: {
        status: message
      }
    });
    return 1;
  } catch(e) {
    console.log("投稿エラー" + e);
    return 0;
  }
}

Googleスプレッドシートを読み込んでメッセージを通知するプログラムの作成

Googleスプレッドの情報を読み込んで、「MESSAGE」シートに入力されているメッセージを通知します。


SheetMessage = {
  "sheet_name" : "MESSAGE",
  "sheet_length" : 2,
  "id" : 0,
  "message" : 1
};

ss = "";

// スプレッドシートの設定
setSpreadsheet = function() {
	if(ss == "") {
		ss = SpreadsheetApp.getActiveSpreadsheet();
	}
}

// シートのGetter
getSheetData = function(sheetData) {
	console.log("シートのGetter " + sheetData["sheet_name"]);
	setSpreadsheet();
  var lastRow = ss.getSheetByName(sheetData["sheet_name"]).getLastRow();
	dataList = ss.getSheetByName(sheetData["sheet_name"]).getRange(2, 1, lastRow-1, Number(sheetData["sheet_length"])).getValues();

  return arrangeList(dataList, sheetData["id"]);
}

// シートのSetter
setSheetData = function(list, sheetData) {
	console.log("シートのSetter " + sheetData["sheet_name"]);
  var arrangedList = arrangeList(list, sheetData["id"]);
	if(arrangedList.length <= 0) {
		console.log("保存すべきデータが存在しません。 シート名:" + sheetData["sheet_name"]);
		return;
	}
	ss.getSheetByName(sheetData["sheet_name"]).getRange(2, 1, arrangedList.length, Number(sheetData["sheet_length"])).setValues(arrangedList);
}

// 二次元配列の整形
arrangeList = function(list, column) {
	list.sort(function(a, b){
		return Number(a[column]) - Number(b[column]);
	});
	for(var i = list.length-1; i >= 0; i--) {
		if(list[i][column] == "") {
			list.splice(i, 1);
			continue;
		}
	}
	return list;
}

// メッセージの投稿
function postMessage() {
  // MESSAGEから通知メッセージを取得する
  listMessage = getSheetData(SheetMessage);
  for(var i = 0; i < listMessage.length; i++) {
       postTweet(listMessage[i][SheetMessage["message"]]);
  }
}

メッセージを通知する条件やフラグなどは、「MESSAGE」シートの列を増やした上で「postMessage()」に条件分岐を記載して作成しました。
トリガーやボタンなどを用いてpostMessage()の発火タイミングを別途登録し、使用することになります。

最後に

今回は「GASとTwitterAPIを用いて投稿すること」「GASを用いてGoogleスプレッドシートの情報を読み込むこと」の2つを行いました。
簡単ではありますが、日頃閲覧する場所に目標など意識すべきことが目に入ると達成しやすくなるため、うまく活用していきたいと思います。

3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?