Google Apps Script에서 (대략) 1시간마다 트윗하는 Bot 만들기
14499 단어 트위터GoogleAppsScriptbot
스크립트를 조금 메모 쓰기 정도로 써 둡니다.
전체 스크립트는 Gist/gasTwitterBot.gs에 둡니다.
Bot 요구 사항
최종 결과
분위기는 이런 느낌입니다.
Tweet 후보를 시트에 기재해 두고, 코드를 실행하는 것으로 나머지는 자고 있는 것만으로 움직입니다.
실제로 트윗이 게시된 시간대입니다.
좋은 느낌에 장미한 시간에 투고하고 있으므로, Bot 같음이 저감되고 있는지.
시작
9:13
첫 번째
10:01
두 번째
10:33
세 번째
12:09
네 번째
13:07
다섯 번째
13:50
여섯 번째
14:52
일곱 번째
15:33
8번째
16:32
9번째
18:07
10번째
18:51
11번째
19:46
사용법(참고)
1 또는 2, 좋아하는 분을 기호로.
트리거 화면에서
createEveryHoursScheduler()
실행 init()
를 실행하여 원하는 시간에 createEveryHoursScheduler()
시작 예약 function init() {
const time = "好きな時間";
ScriptApp.newTrigger("createEveryHoursScheduler").timeBased().at(time).create();
}
실현 방법
1. Tweet 게시
GAS에서 Tweet하는 계의 기사는 여러가지 있으므로, 그것을 참고로 해 주시면!
참고: Qiita | Google Apps Script (GAS)에서 Twitter에 게시하는 기능만 구현해 보세요.
참고: Gist | TwitterWebService.gs
var twitter = TwitterWebService.getInstance(
'xxxxx', // 作成したアプリケーションのConsumer Key
'xxxxx' // 作成したアプリケーションのConsumer Secret
);
// Twitterの認証
function authorize() {
twitter.authorize();
}
// Tweetをする投稿
function postTweet(tweet) {
const service = twitter.getService();
const response = service.fetch('https://api.twitter.com/1.1/statuses/update.json', {
method: 'post',
payload: { status: tweet }
});
}
// 実際に実行する関数
function execute() {
const tweet = "HOGE"; // TODO: とりあえず固定
postTweet(tweet);
}
2. Tweet 하는 내용은 스프레드시트에서 랜덤하게 취득한다
"Tweet"시트의 A 열에 각 Twitter가 늘어서 있다고 가정합니다.
그리고 "1. Tweet 게시"의
execute()
를 조금 변경합니다.function selectRandomTweet() {
// Tweetシートを取得する
const sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tweet");
// 1 ~ 最終行までの行をランダムに選択する
const lastRow = sheetData.getLastRow();
const selectedRow = Math.floor(Math.random() * lastRow) + 1;
// 選んだ行の内容を取得する
const selectedTweet = sheetData.getRange(selectedRow, 1).getValue();
return selectedTweet;
}
function execute() {
const tweet = selectedTweet(); // tweetをランダムにする
postTweet(tweet);
}
3. 투고는 1시간에 1도의 페이스
트리거을 설정하여 시간에 한 번
execute()
을 실행합니다.참고: Google App Script | Trigger
참고: Google App Script | everyHours(n)
function createEveryHoursScheduler() {
ScriptApp.newTrigger("execute").timeBased().everyHours(1).create();
}
4. bot같지 않게 좋은 느낌에 장미한 시간에 투고한다
schedulePost()
시간당 한 번 실행 schedulePost()
가 실행되기까지 1 시간 동안 무작위 시간 가져 오기 execute()
실행 참고: Google App Script | at(Date)
주의: 사실
at(Date)
은 ±15분의 오차가 발생합니다(cf. at(Date))
function createEveryHoursScheduler() {
// schedulePost() を1時間に1度実行するように変更
ScriptApp.newTrigger("schedulePost").timeBased().everyHours(1).create();
}
function schedulePost() {
const scheduledTime = getScheduledTime();
// スケジュールした時刻に execute() を実行する
ScriptApp.newTrigger('execute').timeBased().at(scheduledTime).create();
}
function getScheduledTime() {
var setTime = new Date();
const minutes = setTime.getMinutes();
const randomMinute = Math.floor(Math.random() * 59);
// 現在時刻 + 0~59分 の時刻を設定する
setTime.setMinutes(minutes + randomMinute);
return setTime;
}
5. 투고는 9시부터 21시 사이까지
24시간 계속 투고하고 있으면 인간답지 않습니다.
그래서 9:00~21:00 사이에서만 투고하지 않도록 제한합니다.
function schedulePost() {
const scheduledTime = getScheduledTime();
// スケジューリングした時間をバリデーションにかける
if (!validateHourRange(scheduledTime.getHours())) return;
ScriptApp.newTrigger('execute').timeBased().at(scheduledTime).create();
}
function validateHourRange(hour) {
if (hour >= 9 || hour <= 21) return true; // 投稿したい時間を指定する
return false;
}
감상
Google Apps Script, 엄청 다기능으로 편리하다고 생각했습니다.
Reference
이 문제에 관하여(Google Apps Script에서 (대략) 1시간마다 트윗하는 Bot 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/blue0513/items/1cf278ccdfbb03a197c3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)