Вопрос или проблема
Я использую VBA для получения цен акций в Excel. Вчера (24 сентября 2024 года) это перестало работать.
Метод требовал CRUM, который, похоже, больше не существует. Кто-нибудь знает, в чем может быть решение? Код приведен ниже. Буду очень признателен!!
Макс
Sub getCookieCrumb(crumb As String, cookie As String, validCookieCrumb As Boolean)
Dim i As Integer
Dim str As String
Dim crumbStartPos As Long
Dim crumbEndPos As Long
Dim objRequest
validCookieCrumb = False
'просим о корректном crumb 5 раз
For i = 0 To 5 'просим о корректном crumb 5 раз
Set objRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
With objRequest
.Open "GET", "https://finance.yahoo.com/quote/AAPL/history?period1=1503558000&period2=1535094000&interval=1wk&filter=history&frequency=1wk", False
.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
.send
.WaitForResponse (10)
crumbStartPos = InStrRev(.ResponseText, """crumb"":""") + 9
crumbEndPos = crumbStartPos + 11
crumb = Mid(.ResponseText, crumbStartPos, crumbEndPos - crumbStartPos)
End With
If Len(crumb) = 11 Then 'корректный crumb длиной 11 символов
validCookieCrumb = True
Exit For
End If
Next i
End Sub
Ответ или решение
К сожалению, с 24 сентября 2024 года метод извлечения цен акций из Yahoo Finance с использованием VBA больше не работает. Это связано с изменениями на стороне Yahoo, которые повлияли на формирование и получение кук и крамов (crumbs), необходимых для аутентификации запросов.
Решение проблемы:
-
Изменение способа получения данных:
Yahoo Finance изменил свой API, и теперь необходимо использовать другие подходы. Мы можем использовать API других сервисов, таких как Alpha Vantage, IEX Cloud или Yahoo Finance API (недавно доступный). -
Использование альтернативных библиотек:
Рассмотрите возможность использования библиотек для взаимодействия с API, которые смогут обрабатывать аутентификацию и запросы намного проще. Например, вы можете использоватьJSONConverter
для работы с JSON-ответами. -
Обновленная версия кода:
Вот пример кода, который делает HTTP-запрос к API Alpha Vantage (данные нужно будет зарегистрировать и получить свой ключ API):Sub GetStockPrice() Dim http As Object Dim url As String Dim jsonResponse As String Dim stockPrice As Double Dim apiKey As String apiKey = "Ваш_API_Ключ" ' Замените на ваш собственный ключ API url = "https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=AAPL&interval=1min&apikey=" & apiKey Set http = CreateObject("MSXML2.XMLHTTP") http.Open "GET", url, False http.send jsonResponse = http.responseText ' Здесь нужно будет обработать jsonResponse, чтобы извлечь цену акции ' Используйте JSONConverter для парсинга JSON ' Пример кода для парсинга можно найти в документации JSONConverter MsgBox "Цена акции Apple: " & stockPrice End Sub
-
Обработчик JSON:
Убедитесь, что у вас установлен парсер JSON для Excel VBA, такой какVBA-JSON
, который поможет вам конвертировать JSON-ответ в удобный для работы диапазон или переменные.
Резюме:
К сожалению, ваши текущие методы работы с Yahoo Finance не работают из-за изменений на их стороне. Рекомендуется использовать альтернативные API для получения данных о ценах акций. Эти альтернативы не только обеспечивают решение текущей проблемы, но также могут предложить более обширные и надежные данные.
Если у вас возникнут дополнительные вопросы или потребуется помощь с реализацией, пожалуйста, дайте знать.