Импорт акций Yahoo Finance с помощью VBA перестал работать.

Вопрос или проблема

Я использую 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), необходимых для аутентификации запросов.

Решение проблемы:

  1. Изменение способа получения данных:
    Yahoo Finance изменил свой API, и теперь необходимо использовать другие подходы. Мы можем использовать API других сервисов, таких как Alpha Vantage, IEX Cloud или Yahoo Finance API (недавно доступный).

  2. Использование альтернативных библиотек:
    Рассмотрите возможность использования библиотек для взаимодействия с API, которые смогут обрабатывать аутентификацию и запросы намного проще. Например, вы можете использовать JSONConverter для работы с JSON-ответами.

  3. Обновленная версия кода:
    Вот пример кода, который делает 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
  4. Обработчик JSON:
    Убедитесь, что у вас установлен парсер JSON для Excel VBA, такой как VBA-JSON, который поможет вам конвертировать JSON-ответ в удобный для работы диапазон или переменные.

Резюме:
К сожалению, ваши текущие методы работы с Yahoo Finance не работают из-за изменений на их стороне. Рекомендуется использовать альтернативные API для получения данных о ценах акций. Эти альтернативы не только обеспечивают решение текущей проблемы, но также могут предложить более обширные и надежные данные.

Если у вас возникнут дополнительные вопросы или потребуется помощь с реализацией, пожалуйста, дайте знать.

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

Капча загружается...