Разрешение столбца ссылок в Google Sheets через Apps Script
Многие задачи скачивания живут в таблице: маркетинг со столбцом ссылок, исследователь со списком постов. Apps Script может вызывать API напрямую. Это руководство — скрипт, темп, удерживающий вас под лимитом, и причина, почему это действие меню, а не пользовательская функция.
Обновлено
Держите ключ вне таблицы
Храните его в Script Properties (Project Settings → Script Properties → saveapi_key). Ключ в ячейке уезжает с каждой копией и экспортом таблицы.
Fetch
UrlFetchApp с заголовком Authorization и muteHttpExceptions — ответ с ошибкой парсится, а не бросается; в JSON есть error.code, именно его вы хотите записать в таблицу.
JavaScript// Apps Script — Extensions → Apps Script
function resolve(link) {
const key = PropertiesService.getScriptProperties().getProperty("saveapi_key");
const res = UrlFetchApp.fetch(
"https://api.saveapi.org/v1/download?url=" + encodeURIComponent(link),
{ headers: { Authorization: "Bearer " + key }, muteHttpExceptions: true },
);
return JSON.parse(res.getContentText());
}Разрешите столбец
Прочитайте диапазон один раз, пройдите циклом, запишите две ячейки на строку: URL медиа и OK либо пусто и код ошибки. Пауза удерживает длинный столбец под поминутным лимитом ключа — 10 на бесплатном тарифе, 60 на Pro.
JavaScript// A ustunidagi havolalar → B ustuniga media URL, C ga natija kodi
function resolveColumn() {
const sheet = SpreadsheetApp.getActiveSheet();
const rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, 3).getValues();
rows.forEach((row, i) => {
if (!row[0] || row[1]) return; // bo'sh yoki allaqachon yechilgan
const data = resolve(row[0]);
const out = data.success
? [data.medias[0].url, "OK"]
: ["", data.error.code];
sheet.getRange(i + 2, 2, 1, 2).setValues([out]);
Utilities.sleep(6000); // bepul tarif: 10 so'rov/daqiqa
});
}Почему действие меню, а не пользовательская функция
Пользовательская =SAVEAPI(A2) пересчитывается вместе с таблицей, и каждый пересчёт — оплачиваемый запрос. Запускайте разрешение как действие (пункт меню или кнопка), пропускайте строки с результатом — и таблица тратит кредиты один раз на ссылку.
Сколько стоит
1.5 кредита за успешное разрешение, 0.1 за закрытую или удалённую ссылку, ничего за таймаут. Столбец из 500 ссылок — около 750 кредитов, в пределах бесплатной 1 000.
Вопросы перед началом
- Можно пользовательскую функцию вроде =SAVEAPI(A2)?
- Можно, но каждый пересчёт запускает её заново, и каждый запуск — оплачиваемый запрос. Схема с действием меню из этого руководства тратит кредиты один раз на ссылку.
- Скрипт остановится на длинном столбце?
- Apps Script прерывает выполнение через несколько минут. Пропускайте строки с результатом и запускайте снова — цикл продолжит с места остановки.
- Таблица может и скачать файл?
- UrlFetchApp может забрать URL медиа и сохранить в Drive через DriveApp.createFile в пределах лимитов размера Apps Script. Для больших видео храните URL и скачивайте в другом месте.
Платформы, использованные здесь
Другие руководства
Запустите это руководство со своим ключом
Ключ за минуту. 1 000 бесплатных кредитов, без карты и без срока.