API поиска Binance возвращает 403 при использовании скриптов Google

Я использую Binance API для получения цен на USDT. API работает на почтальоне, но не работает на скрипте Google.

function fetchCryptoPricesFromApi() {
  const data = {
    "page": 1,
    "rows": 10,
    "payTypes": [],
    "asset": "USDT",
    "tradeType": "SELL",
    "fiat": "LKR",
    "publisherType": null,
    "transAmount": "2600"
  }

  const payload = JSON.stringify(data)

  const options = {
    "method" : "POST",
    "contentType" : "application/json",
    "payload" : payload
  }

  let response;
  
  try {
    response = UrlFetchApp.fetch('https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search', options);
  } catch (error) {
    console.info('Oops Error, ', error);
    return
  }

  const prices = JSON.parse(response)['data'];
  console.info(prices)
}

Я получаю следующую ошибку при выполнении этого,

Oops Error,  { [Exception: Request failed for https://p2p.binance.com returned code 403. Truncated server response: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV = "Content-Type" ... (use muteHttpExceptions option to examine full response)] name: 'Exception' }

Я тоже пытался подождать какое-то время.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из вашего сообщения об ошибке я подтвердил код состояния 403. Ссылка В этом случае считается, что прямой доступ к сайту со стороны Google невозможен. Я думаю, что причина вашей проблемы связана с этим.

В этом случае в качестве обходного пути я хотел бы предложить доступ к URL-адресу без непосредственного запуска сценария с помощью редактора сценариев. Когда я тестировал этот обходной путь, я подтвердил, что значение может быть возвращено.

В этом временном решении используется следующий поток.

  1. Поместите пользовательскую функцию =fetchCryptoPricesFromApi() в ячейку.
  2. Получите значения из API.
  3. Получить значения из ячейки.
  4. Разберите значение как данные JSON.

Пример сценария этого обходного пути выглядит следующим образом.

Пример сценария:

В этом обходном пути я использую Google Spreadsheet. Поэтому, пожалуйста, создайте новую таблицу Google и откройте редактор сценариев таблицы Google. И скопируйте и вставьте следующий скрипт. И запустите функцию main() в редакторе скриптов.

function fetchCryptoPricesFromApi() {
  const data = {
    "page": 1,
    "rows": 10,
    "payTypes": [],
    "asset": "USDT",
    "tradeType": "SELL",
    "fiat": "LKR",
    "publisherType": null,
    "transAmount": "2600"
  }
  const payload = JSON.stringify(data)
  const options = {
    "method": "POST",
    "contentType": "application/json",
    "payload": payload
  }
  const response = UrlFetchApp.fetch('https://p2p.binance.com/bapi/c2c/v2/friendly/c2c/adv/search', options);
  return response.getContentText();
}

// Please run this function.
function main() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getRange("A1");
  range.setFormula("=fetchCryptoPricesFromApi()");
  SpreadsheetApp.flush();
  const value = range.getValue();
  range.clearContent();
  const prices = JSON.parse(value)['data'];
  console.info(prices)
}

@В ВИДЕ. SAMARASINGHE Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена. И тебе спасибо.

Tanaike 12.05.2022 08:17

Другие вопросы по теме