#google-apps-script #google-sheets #telegram #google-docs #google-docs-api
#google-приложения-скрипт #google-sheets #telegram #google-docs #google-docs-api
Вопрос:
Я пытаюсь отправить диаграмму изображений из Google Sheets в Telegram. Я сохраняю диаграмму изображений на Google Диск, а затем отправляю ее в чат Telegram (помогая этому моему боту Telegram).
Если я отправлю ссылку с Google Диска в Telegram таким образом: сначала попробуйте:
file_id_0 = "https://drive.google.com/file/d/1kvitP05ofdyT4YtHgNBdjP-sxIFQlpo7/view?usp=drivesdk";
Это результат первой попытки: первая попытка — плохо: я хочу видеть только изображение в чате Telegram — без ссылок.
На этом сайте я нашел решение этой проблемы (извините, я потерял ссылку): используйте документы Google с file_id с Google Диска. Идентификатор файла при соединении между «/ d / file_id / view». Чтобы подтвердить это решение, я взял идентификатор какого-то другого файла на Google Диске и объединил его:
file_id_2 = "1bSSzt5S9SgafeAK7D6dfRiFGECxhSuXo";
sendImage(chatId, "https://docs.google.com/uc?id=" file_id_2);
Результат второй попытки: Вторая попытка — это идеально — то, что мне нужно!
Теперь я пытаюсь извлечь file_id из файла Google Drive file.getId()
и объединить этот идентификатор со ссылкой на документы Google.
Результат третьей попытки: третья попытка — неудачная. Если я возьму ссылку в debug programm и открою ее в браузере — это откроется правильно (как и во второй попытке). На мой взгляд, ссылка на вторую и третью ссылку без различий. По крайней мере, они корректно открываются в браузере.
Как я должен вставить эту ссылку в свою функцию, чтобы не было проблем?
P.S: Прошу прощения за мой английский. Я готов дать любые объяснения и надеюсь, что фотографии помогли понять мою проблему.
Полный код:
function downloadChart2() {
let chatId = "-xxx";
var sheet = SpreadsheetApp.getActiveSheet();
// Get chart and save it into your Drive
var chart = sheet.getCharts()[0];
var file = DriveApp.createFile(chart.getBlob());
// Set url in one cell and resize the column
sheet.getRange(23, 1).setValue(file.getUrl())
sheet.autoResizeColumn(1);
file.setName("1234");
// first try - successful, but bad view on Telegram
var file_id_0 = file.getUrl();
sendText(chatId, file_id_0);
// second try - successful, but i grab this id on adress panel in my brouser
var file_id_1 = "1cAdAMWFdzZFRgXiM9kbxkzrwVAGpoOIy";
sendImage(chatId, "https://docs.google.com/uc?id=" file_id_1);
// third try - unsuccessful
var file_id_2 = file.getId();
var file_id_3 = "https://docs.google.com/uc?id=" file_id_2; // this link correctly
sendImage(chatId, file_id_3); // but this don't work
}
}
function sendImage(chatId, text, keyBoard) {
let data = {
method: 'post',
payload: {
method: 'sendMessage',
chat_id: String(chatId),
text: text,
parse_mode: 'HTML',
reply_markup: JSON.stringify(keyBoard)
}
}
var caption = "Second";
UrlFetchApp.fetch("https://api.telegram.org/bot" token "/sendPhoto?caption=" encodeURIComponent(caption) "amp;photo=" encodeURIComponent(text) "amp;chat_id="
chatId "amp;parse_mode=HTML");
}
Ответ №1:
Когда я увидел ваш скрипт, я подумал, что созданный файл изображения может не быть общедоступным. Я подумал, что это может быть причиной вашей проблемы. Итак, как насчет следующей модификации?
От:
var file = DriveApp.createFile(chart.getBlob());
Для:
var file = DriveApp.createFile(chart.getBlob());
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);