saveapi.org

Разрешение столбца ссылок в 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 бесплатных кредитов, без карты и без срока.

Получить ключ и попробоватьПолный справочник API