Проблема CORS, API Yahoo Finance

  • Автор темы Zhanna Leontyeva
  • 78
  • Обновлено
  • 16, May 2024
  • #1
Привет, ребята,

Я собираюсь протестировать API Yahoo Finance дома! (Да, я делаю это дома!)

Я скопировал этот скрипт из RapidAPI и добавил прокси-сервер cors-anywhere-. Однако это не работает.

Эксперт Yahoo сказал, цитирую: «Я предлагаю вам обернуть это в свою конечную точку и вызвать конечную точку позже». Какова конечная точка?

Бесконечно благодарен!

 <script>

const data = null;

const xhr = new XMLHttpRequest();

xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {

if (this.readyState === this.DONE) {

console.log(this.responseText);

}

});

let url = "[URL='https://lumtu.com/yti/V9449VVNodHRwczovL3JhcGlkYXBpLnAucmFwaWRhcGkuY29tL3N0b2NrL3YyL2dldC1jaGFydD9pbnRlcnZhbD01bSZzeW1ib2w9R0JQRVVSJnJhbmdlPTFtbyZyZWdpb2pdW']https://rapidapi.p.rapidapi.com/stock/v2/get-chart?interval=5m&symbol=GBPEUR&range=1mo&region=US[/URL]";

const proxy = encodeURI("[URL='https://lumtu.com/yti/bvNNvbS9odHRwczovL2NvcnMtYW55d2hlcmUuaGVyb2t1YXBwLmwBX']https://cors-anywhere.herokuapp.com/[/URL]");

xhr.open(

"GET",proxy+url,true

);

xhr.setRequestHeader(

"x-rapidapi-key",

"3bd27a6483mshfb828731a7d4629p1e345fjsn59f338bdbd1f"

);

xhr.setRequestHeader(

"x-rapidapi-host",

"apidojo-yahoo-finance-v1.p.rapidapi.com"

);

xhr.send(data);

</script>

Код (JavaScript):

Zhanna Leontyeva


Рег
19 Oct, 2012

Тем
1

Постов
2

Баллов
12
  • 01, Jun 2024
  • #2
YahooFinane от RapidAPI, справа: доступ к API через JS должен быть возможен следующим образом: JS (выбрать):
 const data = null;

const xhr = new XMLHttpRequest();

xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {

if (this.readyState === this.DONE) {

console.log(this.responseText);

}

});

xhr.open("GET", "[URL='https://lumtu.com/yti/VQPPQVVNodHRwczovL2FwaWRvam8teWFob28tZmluYW5jZS12MS5wLnJhcGlkYXBpLmNvbS9hdXRvLWNvbXBsZXRlP3E9dGVzbGEmcmVnaW9uWan']https://apidojo-yahoo-finance-v1.p.rapidapi.com/auto-complete?q=tesla&region=US[/URL]");

xhr.setRequestHeader("x-rapidapi-key", "1234");

xhr.setRequestHeader("x-rapidapi-host", "apidojo-yahoo-finance-v1.p.rapidapi.com");

xhr.send(data);
Код (JavaScript): jQuery:
 const settings = { "async": true, "crossDomain": true, "url": "[URL='https://lumtu.com/yti/VQPPQVVNodHRwczovL2FwaWRvam8teWFob28tZmluYW5jZS12MS5wLnJhcGlkYXBpLmNvbS9hdXRvLWNvbXBsZXRlP3E9dGVzbGEmcmVnaW9uWan']https://apidojo-yahoo-finance-v1.p.rapidapi.com/auto-complete?q=tesla&region=US[/URL]", "method": "GET", "headers": { "x-rapidapi-key": "1234", "x-rapidapi-host": "apidojo-yahoo-finance-v1.p.rapidapi.com" } }; $.ajax(settings).done(function (response) { console.log(response); });
Код (JavaScript): xhr:
 fetch("[URL='https://lumtu.com/yti/VQPPQVVNodHRwczovL2FwaWRvam8teWFob28tZmluYW5jZS12MS5wLnJhcGlkYXBpLmNvbS9hdXRvLWNvbXBsZXRlP3E9dGVzbGEmcmVnaW9uWan']https://apidojo-yahoo-finance-v1.p.rapidapi.com/auto-complete?q=tesla&region=US[/URL]", { "method": "GET", "headers": { "x-rapidapi-key": "1234", "x-rapidapi-host": "apidojo-yahoo-finance-v1.p.rapidapi.com" } }) .then(response => { console.log(response); }) .catch(err => { console.error(err); });
Код (JavaScript): Зачем вообще суетиться с запросом GET?
 

Irina.LeadsUP


Рег
19 Dec, 2014

Тем
0

Постов
2

Баллов
2
  • 05, Jun 2024
  • #3
Это зависит от того, как вы хотите это реализовать.

Как часто вы будете запрашивать API?

Если это частота 1 запрос/2 минуты, то можно сделать что-то вроде этого:

Отправьте Ajax-запрос на ваш API

Ваш API отправляет HTTP-запрос в Yahoo, получает ответ и отправляет его обратно на исходный запрос Ajax.

Связь между серверами обычно происходит очень быстро.

На самом деле, многие компании Apps и Huge отправляют запросы от сервера к серверу для одного запроса.

Если вы делаете этот запрос несколько раз в минуту, рассмотрите возможность использования Websockets вместо Ajax.

У вас будет cronjob, который будет запрашивать API каждую минуту, и как только будет получен ответ, он отправит его на соединение с сокетом.

Несколько запросов Ajax в минуту могут привести к расходу данных и заряда батареи.
 

alex211


Рег
11 Oct, 2011

Тем
1

Постов
3

Баллов
13
  • 06, Jun 2024
  • #4
Я хочу сосредоточиться на интерфейсе, сейчас я много работаю с vue.js (для одностраничных приложений). Возможно, я смогу запускать запросы AJAX каждые 2 минуты, но я так не думаю!? Давайте рассмотрим практический пример.

Я ввожу booking.com в строке состояния и нажимаю F-12. ЗАТЕМ: XHR: URL-адрес запроса: https://cdn.cookielaw.org/consent/3...b31/3ea94870-d4b1-483a-b1d2-faf1d982bb31.json

Метод запроса: ПОЛУЧИТЬ Код состояния: 200 URL-адрес запроса: https://cdn.cookielaw.org/consent/3...745995-04f8-44ca-a6ff-f90c2d275998/en-us.json

Метод запроса: ПОЛУЧИТЬ Код состояния: 200 URL-адрес запроса: https://cdn.cookielaw.org/scripttemplates/6.5.0/assets/otFlat.json

Метод запроса: ПОЛУЧИТЬ Код состояния: 200 URL-адрес запроса: https://cdn.cookielaw.org/scripttemplates/6.5.0/assets/otPcTab.json

Метод запроса: ПОЛУЧИТЬ Код состояния: 200 URL-адрес запроса: https://www.booking.com/js_tracking...jTrO3EMCnCTcq9Q5_Bsu-3c56RjcIsx-Va-YSfxE_yOqA

Метод запроса: ПОЛУЧИТЬ Код состояния: 200 ОК URL-адрес запроса:https://www.booking.com/gethandpick...al &amp; soz=1 &amp; lang_click=top &amp; cdl=fr &amp; lang_changed=1

Метод запроса: POST Код состояния: 200 ОК URL-адрес запроса: https://collector-pxikkul2rm.perimeterx.net/api/v1/collector

Метод запроса: POST Код состояния: 200 .....
Там написано 20/106 запросов.
 

wildwater


Рег
01 Jan, 2011

Тем
1

Постов
3

Баллов
13
  • 09, Jun 2024
  • #5
Извините, я до сих пор не понимаю, как это должно работать.

Я могу получить данные для своего сервера с сервера, предоставляющего API.

Отлично! Однако, если я работаю с AJAX, я отправляю множество запросов на обновление моих данных во внешнем интерфейсе.

Поэтому я должен получить доступ к своему серверу с помощью JS. Этот сервер должен получить доступ к серверу API и обратно.

Я не могу себе представить, что это обычно реализуется вот так??
 

SoftMoney


Рег
07 Dec, 2011

Тем
1

Постов
3

Баллов
13
  • 10, Jun 2024
  • #6
Я думаю, он имеет в виду, что вам следует создать API в своем собственном домене. API должен вызывать это: пусть URL = "https://rapidapi.p.rapidapi.com/stock/v2/get-chart?interval=5m &amp; symbol=GBPEUR &amp; range=1mo &amp; region=US

"; и верните вам ответ. Таким образом, у вас не возникнет проблем с CORS, если вы сделаете запрос к своему собственному домену.
 

off4vra


Рег
01 Jan, 2011

Тем
0

Постов
3

Баллов
3
  • 10, Jun 2024
  • #7
Я никогда раньше не использовал Yahoo Finance API, но, судя по небольшому поиску в Google, похоже, что у Yahoo даже нет официального Finance API.

И API взяты из стороннего RapidAPI. Во-вторых, даже если бы они это сделали, JS API также может означать, что они ожидают, что вы будете использовать Node из серверной части, как и многие другие компании.

Никто не ожидает, что вы «анонсируете» свои ключи API в FrontEnd Javascript любому разработчику, который захочет их просмотреть. Кроме того, API, которые на самом деле позволяют интеграцию с внешним интерфейсом, обычно являются SDK и в большинстве случаев используют iframe.
 

popsunen


Рег
15 Oct, 2012

Тем
2

Постов
12

Баллов
32
  • 12, Jun 2024
  • #8
Думаю, я примерно понял, конечно, сервер бронирования имеет то же происхождение, и они делают это cronjob на бэкэнде. Но вернемся к API Yahoo Finance.

Конечно, сервер управляет CORS. Я могу получить доступ к данным API, когда сервер Yahoo отправляет обратно что-то. например: Access-Control-Allow-Origin:* Очевидно, они этого не делают.

Но тогда почему они предлагают код JS API? для внешнего интерфейса, когда они все равно не разрешают CORS.
 

cent345


Рег
24 Jan, 2014

Тем
0

Постов
2

Баллов
2
Тем
49554
Комментарии
57426
Опыт
552966

Интересно