Готовые скрипты для AppScript

Добавляем данные в удаленный промпт с помощью скрипта. Например, один из скриптов забирает задачи из Google календаря или производит парсинг информации с сайта или соцсети или из RSS новостей и т.д. Так же с помощью нашего бота помощника можно сформировать скрипт для других целей. 

Если у вас не получается самостоятельно с помощью бота создать нужный скрипт, напишите в группу https://t.me/+KQ6mUbTAtFQ4YWEy и мы поможем. 

function updateCalendarEvents() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();

// Найдите начало и конец блока контента
var startElement = body.findText('##WEB_CONTENT_START##');
var endElement = body.findText('##WEB_CONTENT_END##');

if (!startElement || !endElement) {
Logger.log('Не найдены маркеры начала или конца блока контента');
return;
}

var startIndex = body.getChildIndex(startElement.getElement().getParent());
var endIndex = body.getChildIndex(endElement.getElement().getParent());

// Удалите существующий контент между маркерами
for (var i = endIndex - 1; i ﹥ startIndex; i--) {
body.removeChild(body.getChild(i));
}

// Получите события календаря на следующие 60 дней
var calendar = CalendarApp.getDefaultCalendar();
var now = new Date();
var endDate = new Date(now.getTime() + (60 * 24 * 60 * 60 * 1000)); // 60 дней вперед
var events = calendar.getEvents(now, endDate);

// Вставьте события в документ
for (var i = 0; i ﹤ events.length; i++) {
var event = events[i];
var title = event.getTitle();
var startTime = event.getStartTime();
var endTime = event.getEndTime();
var description = event.getDescription() || 'Нет описания';

var eventString = Utilities.formatDate(startTime, Session.getScriptTimeZone(), 'dd.MM.yyyy HH:mm') + ' - ' +
Utilities.formatDate(endTime, Session.getScriptTimeZone(), 'HH:mm') + '\n' +
title + '\n' +
description + '\n\n';

body.insertParagraph(startIndex + i + 1, eventString);
}
}

function createDailyTrigger() {
// Удаляем все существующие триггеры
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i ﹤ triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}

// Создаем новый ежедневный триггер на 6:00 утра
ScriptApp.newTrigger('updateCalendarEvents')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
}
function updateGoogleSheetData() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();

// Найдите начало и конец блока контента
var startElement = body.findText('##TABLE_START##');
var endElement = body.findText('##TABLE_END##');

if (!startElement || !endElement) {
Logger.log('Не найдены маркеры начала или конца блока контента');
return;
}

var startIndex = body.getChildIndex(startElement.getElement().getParent());
var endIndex = body.getChildIndex(endElement.getElement().getParent());

// Удалите существующий контент между маркерами
for (var i = endIndex - 1; i > startIndex; i--) {
body.removeChild(body.getChild(i));
}

// Получите данные из Google Таблицы
var sheetId = '1-XXXXXXXXXXXXXXXXXXXXXXXXX'; // Замените на ID вашей таблицы
var range = 'Лист1!A1:B300'; // Замените на нужный диапазон
var sheet = SpreadsheetApp.openById(sheetId).getSheetByName('Лист1');
var data = sheet.getRange(range).getValues();

// Вставьте данные в документ
var insertIndex = startIndex + 1; // Увеличиваем индекс на 1, чтобы начать вставку после ##TABLE_START##

for (var i = 0; i < data.length; i++) {
var row = data[i].filter(cell => cell).join(' | ').trim();
if (row) {
body.insertParagraph(insertIndex++, row);
}
}
}

function createDailyTrigger() {
// Удаляем все существующие триггеры
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}

// Создаем новый ежедневный триггер на 6:00 утра
ScriptApp.newTrigger('updateGoogleSheetData')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
}
function sendTelegramMessage(chatId, message) {
if (!message) {
Logger.log("Ошибка: текст сообщения пустой");
return;
}
if (!chatId) {
Logger.log("Ошибка: chatId не задан");
return;
}

var token = "7615497024:XXXXXXXXXXXXXXXXXXXXXXX"; // Вставь сюда токен своего Telegram-бота
var url = "https://api.telegram.org/bot" + token + "/sendMessage";
var payload = {
method: "POST",
contentType: "application/json",
payload: JSON.stringify({
chat_id: chatId,
text: message,
}),
muteHttpExceptions: true
};

try {
var response = UrlFetchApp.fetch(url, payload);
Logger.log("Ответ от Telegram: " + response.getContentText());
} catch (e) {
Logger.log("Ошибка при отправке сообщения в Telegram: " + e.toString());
}
}

function doPost(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Проекты");
var data = JSON.parse(e.postData.contents);

if (!data.message || !data.message.chat || !data.message.chat.id || !data.message.text) {
Logger.log("Ошибка: данные сообщения не полные");
return;
}

var chatId = data.message.chat.id;
var messageText = data.message.text;

var range = sheet.getDataRange();
var values = range.getValues();
for (var i = 1; i < values.length; i++) {
if (values[i][10] == chatId) { // Колонка K — chatId
sheet.getRange(i + 1, 9).setValue(messageText); // Колонка I — Отчета
sendTelegramMessage(chatId, "Ваш отчет успешно получен!");
break;
}
}
}

function sendMessageToProTalk(chatId, messageId, message) {
var apiKey = "11622_IXEpowAR8ZvHkjYs6WOgvsq6TBV4KCKy"; // Вставьте ваш API ключ
var url = "https://api.pro-talk.ru/api/v1.0/send_message";

var payload = {
"chat_id": chatId,
"message_id": messageId,
"message": message
};

var options = {
method: "POST",
contentType: "application/json",
headers: {
"Authorization": "Bearer " + apiKey
},
payload: JSON.stringify(payload)
};

try {
var response = UrlFetchApp.fetch(url, options);
Logger.log("Ответ от ProTalk: " + response.getContentText());
} catch (e) {
Logger.log("Ошибка при отправке сообщения в ProTalk: " + e.toString());
}
}

function sendMessagesFromSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Проекты");
var data = sheet.getDataRange().getValues();

for (var i = 1; i < data.length; i++) {
var chatId = data[i][10]; // Колонка K — chat_id
var messageId = "m" + (i + 1); // Создаем уникальный message_id
var message = "Напоминание: осталось менее часа до дедлайна вашей задачи!";

if (chatId) {
sendMessageToProTalk(chatId, messageId, message);
} else {
Logger.log("Пропущена строка " + (i + 1) + ": chatId пустой");
}
}
}
function updateWebsiteContent() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();

// Найдите начало и конец блока контента
var startElement = body.findText('##WEBSITE_CONTENT_START##');
var endElement = body.findText('##WEBSITE_CONTENT_END##');

if (!startElement || !endElement) {
Logger.log('Не найдены маркеры начала или конца блока контента');
return;
}

var startIndex = body.getChildIndex(startElement.getElement().getParent());
var endIndex = body.getChildIndex(endElement.getElement().getParent());

// Удалите существующий контент между маркерами
for (var i = endIndex - 1; i > startIndex; i--) {
body.removeChild(body.getChild(i));
}

// Получите HTML-контент с вашего сайта
var url = 'https://wl.atiks.org/ru'; // Замените на ваш URL
var response;
try {
response = UrlFetchApp.fetch(url);
if (response.getResponseCode() !== 200) {
Logger.log('Ошибка получения контента: ' + response.getResponseCode());
return;
}
var html = response.getContentText();
if (!html) {
Logger.log('Получен пустой контент');
return;
}
} catch(e) {
Logger.log('Ошибка при запросе: ' + e.toString());
return;
}

var text = extractTextFromHtml(html);

// Проверка на пустой текст после обработки
if (!text.trim()) {
Logger.log('После обработки HTML получен пустой текст');
return;
}

// Вставьте очищенный текст в документ
body.insertParagraph(startIndex + 1, text);
Logger.log('Контент успешно обновлен');
}

function extractTextFromHtml(html) {
// Удаляем все HTML-теги
var text = html
// Удаляем style и script теги с содержимым
.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
// Заменяем основные HTML-элементы на переносы строк
.replace(/<div>/ig, '\n')
.replace(/<\/div>/ig, '\n')
.replace(/<\/li>/ig, '\n')
.replace(/<li>/ig, ' * ')
.replace(/<\/ul>/ig, '\n')
.replace(/<\/p>/ig, '\n')
.replace(/<br\s*[\/]?>/gi, '\n')
// Удаляем все оставшиеся HTML-теги
.replace(/<[^>]+>/ig, '');

// Декодируем HTML-сущности
text = text
.replace(/ /g, ' ')
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/'/g, "'");

// Удаляем лишние пробелы и пустые строки
text = text
.replace(/\n\s*\n/g, '\n') // Удаляем множественные пустые строки
.replace(/^\s+|\s+$/g, '') // Удаляем пробелы в начале и конце
.replace(/[ \t]+/g, ' '); // Заменяем множественные пробелы одним

return text;
}

function createDailyTrigger() {
// Удаляем все существующие триггеры
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}

// Создаем новый ежедневный триггер на 6:00 утра
ScriptApp.newTrigger('updateWebsiteContent')
.timeBased()
.everyDays(1)
.atHour(6)
.create();

Logger.log('Ежедневный триггер успешно создан на 6:00');
}

// Дополнительная функция для тестирования
function testUpdate() {
updateWebsiteContent();
}
function updateAirtableData() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();

// Найдите начало и конец блока контента
var startElement = body.findText('##AIRTABLE_START##');
var endElement = body.findText('##AIRTABLE_END##');

if (!startElement || !endElement) {
Logger.log('Не найдены маркеры начала или конца блока контента');
return;
}

var startIndex = body.getChildIndex(startElement.getElement().getParent());
var endIndex = body.getChildIndex(endElement.getElement().getParent());

// Удалите существующий контент между маркерами
for (var i = endIndex - 1; i > startIndex; i--) {
body.removeChild(body.getChild(i));
}

// Получите данные из Airtable с фильтром
var apiKey = 'patXXXXXXX.XXXXXXXXXXX';
var baseId = 'appXXXXXXXXX';
var tableName = 'Functions';

var url = `https://api.airtable.com/v0/${baseId}/${encodeURIComponent(tableName)}?fields[]=${encodeURIComponent('Название')}&fields[]=${encodeURIComponent('Описание')}&filterByFormula=${encodeURIComponent('AND({Public}=2)')}`;

var options = {
method: 'get',
headers: {
'Authorization': `Bearer ${apiKey}`
}
};

var response = UrlFetchApp.fetch(url, options);
//Logger.log(response);
var data = JSON.parse(response.getContentText());

// Вставьте данные в документ
data.records.forEach(function(record) {
var title = record.fields['Название'] || 'Нет названия';
var description = record.fields['Описание'] || 'Нет описания';
//var recordString = `Название: ${title}\nОписание: ${description}\n\n`;
var recordString = `${title}\r${description.substring(0, 200)}...\r---\r`;
body.insertParagraph(startIndex + 1, recordString);
});
}

function createDailyTrigger() {
// Удаляем все существующие триггеры
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}

// Создаем новый ежедневный триггер на 6:00 утра
ScriptApp.newTrigger('updateAirtableData')
.timeBased()
.everyDays(1)
.atHour(6)
.create();
}

© ProTalk 2023 ИП Горелов Максим Николаевич ИНН 500104951533 ОГРН 309500106900065 

Новая, 8, 9 Реутов, Московская область 143964 Россия