Cвой random API по аналогии с Чак Норрис API

Началось все случайно и внезапно. На просторах интернета мной был обнаружен API, который выдает рандомные цитаты про Чака Норриса: http://api.icndb.com/jokes/random

ICNDB — The Internet Chuck Norris Database

Немного поигравшись с ним, сделал код, который можно встраивать в собственный html:

function getChuck() {
  const chuckUrl = 'http://api.icndb.com/jokes/random'
  const request = UrlFetchApp.fetch(chuckUrl).getContentText()
  const jsonRequest = JSON.parse(request);
  
 return jsonRequest.value.joke 
}

function finalChuck(){
  const initialChuck = getChuck()
  const translatedChuck = LanguageApp.translate(initialChuck, 'en', 'ru')
  const chuckArr = [initialChuck, translatedChuck]

  return chuckArr;
}

Ничего нового и сложного. Функция getChuck() получает случайную объект с цитатой, парсит ее и возвращает непосредственно шутку jsonRequest.value.joke

Функция finalChuck() переводит шутку с английского на русский и возвращает массив из оригинальной и переведенной шуток.

В общем, побаловался и на какое-то время забыл.

Свой API с рандомными цитатами

Чем я хуже? — Подумал я и решил сделать аналогичный API на гугл таблицах

Первое, что понадобилось — цитаты. На просторах рунета их тьма, вот тестовый список:

цитаты из интернета
Цитаты

Это будет серверной частью.

Теперь нужно получить случайную цитату и вернуть ее как объект:

const ss = SpreadsheetApp.getActiveSpreadsheet()
const wsDb = ss.getSheetByName('DataBase')

function getRandomQuote() {
  const min = 1
  const max = wsDb.getLastRow() - 1;
  const rnd = Math.floor(Math.random() * (max - min + 1)) + min

  const quoteArr = wsDb.getDataRange().getValues()
  const headerArr = quoteArr[0]
  const rndArr = quoteArr[rnd]
  
  const quoteObj = {}
  headerArr.forEach((h,i) => {
    quoteObj[h] = rndArr[i]
  })

  return quoteObj
}

const wsDb = ss.getSheetByName('DataBase') — получил лист с цитатами.

const max = wsDb.getLastRow() - 1; — последняя запись

const rnd = Math.floor(Math.random() * (max - min + 1)) + min — случайное число для получения случайной записи

const headerArr = quoteArr[0] — шапка, которая будет использоваться как ключи объекта

const rndArr = quoteArr[rnd] — случайный массив из общего массива

Наполняю объект:

  const quoteObj = {}
  headerArr.forEach((h,i) => {
    quoteObj[h] = rndArr[i]
  })

doGet() — для запуска Web App

Ранее я уже рассматривал как возвращать JSON, так что просто код ниже:

function doGet() {
  const response = getRandomQuote()

  const contService = ContentService.createTextOutput((JSON.stringify(response)))
  contService.setMimeType(ContentService.MimeType.JSON)

  return contService
}

Ну и осталось развернуть непосредственно Web App:

Новое развертывание web app

Вот и всё. Мой аналогичный API, выдающий рандомную цитату готов. Ссылка здесь.

Добавить комментарий