Last active
July 3, 2020 19:37
-
-
Save tajuszk/17021115dbf04756d84921a9056d2cee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var accounts = ['account1', 'account2'] | |
// 認証用インスタンス(複数入れられるように) | |
var twitterInstances = {}; | |
for (var i in accounts) { | |
var instance = TwitterWebService.getInstance( | |
'XXXXXXXXXXXXXXXXXXXX', // 作成したアプリケーションのConsumer Key | |
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' // 作成したアプリケーションのConsumer Secret | |
); | |
// サービス名をアカウント名にしておく | |
var account = accounts[i] | |
// serviceNameが 『Twitter』 固定にならないようにライブラリの関数を上書き(あまり良くないけど…) | |
instance.service_name = account | |
instance.getService = function() { | |
return OAuth1.createService(this.service_name) | |
.setAccessTokenUrl('https://api.twitter.com/oauth/access_token') | |
.setRequestTokenUrl('https://api.twitter.com/oauth/request_token') | |
.setAuthorizationUrl('https://api.twitter.com/oauth/authorize') | |
.setConsumerKey(this.consumer_key) | |
.setConsumerSecret(this.consumer_secret) | |
.setCallbackFunction('authCallback') | |
.setPropertyStore(PropertiesService.getUserProperties()) | |
} | |
// 作ったserviceインスタンスを保存しておく | |
twitterInstances[account] = instance | |
} | |
// 認証 | |
function authorize() { | |
for (var key in twitterInstances) { | |
instance = twitterInstances[key] | |
instance.authorize(); | |
} | |
} | |
// 認証解除 | |
function reset() { | |
for (var key in twitterInstances) { | |
instance = twitterInstances[key] | |
instance.reset(); | |
} | |
} | |
// 認証後のコールバック | |
function authCallback(request) { | |
instance = twitterInstances[request.parameter.serviceName] | |
return instance.authCallback(request); | |
} | |
// セルを取得 | |
var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 「シート1」はシート名 | |
// ツイートを投稿 | |
function postUpdateStatus() { | |
var message = pickUpTweet(); | |
if (message == "") { | |
Logger.log("投稿しませんでした") | |
return; | |
} | |
for (var key in twitterInstances) { | |
instance = twitterInstances[key] | |
var service = instance.getService(); | |
if (service.hasAccess()) { | |
var response = service.fetch('https://api.twitter.com/1.1/statuses/update.json', { | |
method: 'post', | |
payload: { status: message } | |
}); | |
} | |
Logger.log(message) | |
Logger.log("投稿しました") | |
blockTime(3000); // とりあえず同時はNGらしいので3秒間待機 | |
} | |
} | |
// 指定した`timeout`ミリ秒経過するまで同期的にブロックする関数 | |
function blockTime(timeout) { | |
var startTime = Date.now(); | |
while (true) { | |
var diffTime = Date.now() - startTime; | |
if (diffTime >= timeout) { | |
return; | |
} | |
} | |
} | |
/** | |
* ツイートを順番に選択する処理 | |
* 処理の中で前回の番号を保持していくことは出来ないので | |
* 投稿された回数をシートに保存しておき、一番投稿された回数が少ない記事を次の記事にする | |
**/ | |
function pickUpTweet() { | |
var titleRow = 1; // 『投稿内容』とか書いている部分の行数 | |
var startRow = 1 + titleRow; // 1行目は『投稿内容』とか書いているので2行目から | |
var startCol = 1; | |
var endRow = sheetData.getLastRow() - titleRow; // 最後の行まで(2行目から始まっているので-1している) | |
var endCol = 2; // 『投稿回数』の列までなので2列目まで | |
// 投稿を一括で取得する | |
var cells = sheetData.getRange(startRow, startCol, endRow, endCol).getValues(); | |
// ちなみにcellsの中身は | |
// [ [ '投稿内容', '投稿回数'] , [ '投稿内容', '投稿回数'] , [ '投稿内容', '投稿回数'] ,....,] | |
// という形式になっている | |
// Logger.log(cells); | |
var postData = cells[0]; // postData = [ '投稿内容', '投稿回数'] なので postData[0] => 投稿内容, postData[1] => 投稿回数 | |
var row = 1 // 行番号(選ばれたらその行の投稿された回数を+1するために持っておく) | |
for (var i = 0, il = cells.length; i < il; i++ ) { | |
// 投稿回数が少なかったら更新(回数が同じであればそのまま) | |
if (cells[i][1] < postData[1]) { | |
postData = cells[i] | |
row = 1 + i // 行は1から始まるので+1して保存しておく | |
} | |
} | |
var postMessage = postData[0]; | |
// 投稿する内容の投稿回数の部分のセルだけ取得して、+1して更新する | |
var updateCell = sheetData.getRange(row + titleRow, 2, 1, 1); | |
updateCell.setValue(postData[1]+1); | |
return postMessage; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment