2017-05-20 10 views
0

2017年5月16日yahoo.financeでEod PriceをダウンロードするためのURLを変更してください。新しいURLを使用しようとしましたが、機能しません。Yahoo financeからエラーがダウンロードされました

With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;https://query1.finance.yahoo.com/v7/finance/download/APPL?period1=946854000&period2=1495234800&interval=1d&events=history&crumb=" + mycrumb _ 
     , Destination:=Range("Dati!$A$2")) 
     .Name = "Data Table" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 850 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = True 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(5, 1, 1, 1, 1, 1, 9) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 

誰かが私の問題を解決するのに役立つかもしれませんか?誰かに同じ問題がありますか? どうもありがとう

アンドレア

+0

"...でも動作しません"何がうまくいかないの?サイトにアクセスできない、VBAエラーが発生する、データが読み込まれるがデータが間違っているなど...? – BruceWayne

+0

Alpha Vantageの株価データAPIの使用をお勧めします。それは本当にうまくいく。 私はちょうどそれについてのブログ記事を書いた:http://www.the-data-wrangler.com/acquiring-stock-market-data-from-alpha-vantage/ –

答えて

1

まず、古いヤフーファイナンスiChartのダウンロードは永久になくなっています。フォーラムの投稿の1つで、Yahooの従業員は無料のEODデータが終了したことを確認し、再導入されません。このthreadをチェックし、ニクソンからの返事を探してください。 Yahooは最近Verizonによって買収され、それは新しい方向性でなければならない。

ただし、Yahoo財務ページをチェックすると、CSVダウンロードリンクが動作します。ページにアクセスするときにクッキーにリンクされている認証トークン "クラム"を使用するのは新しいAPIです。

あなたのコードはこの新しいAPIを使用しているため、正しいクッキーとクラムのペアを取得する必要があります。私はこれを行うために(そして以前と同じCSVをダウンロードするための)いくつかの簡単なPython3コードをこの新しいAPIを通してまとめました。ソースコードyahoo_quote_downloadのGitHubをチェックしてください。

+0

あなたはデータをダウンロードする方法を知っていますかvbaから?またはvbaのクラムを取得する?ありがとう –

+0

申し訳ありませんが、VBAコードを自分で採用する必要があります。私はそれが同じ原則に基づいて動作すべきだと思います。 – c0redumb

0

私は5月から同じ問題を抱えてきました。昨日このコードに来た:

Sub YahooHistDataHoriztl() 
'---enter in cell A1 for daily: _https://finance.yahoo.com/quote/AAPL/history?interval=1d 
'---enter in cell A1 for weekly: _https://finance.yahoo.com/quote/AAPL/history?interval=1wk 
'---enter in cell A1 for DOW weekly: _https://finance.yahoo.com/quote/^DJI/history?interval=1wk 

'--- Historical Data will load in columns D through J 
'---This program developed after watching video from 'Automate the Web' 2017-07-03 
'---Use Excel & VBA to automate Internet Explorer -beginner 
'----_https://www.youtube.com/watch?v=GRuzoI_kihI&index=3&list=PL0bsMa4HWk9synJWmuqZmI4Z0a3eurN7V 
Dim objIE As InternetExplorer 'special object variable representing the IE browser 
Dim aEle As HTMLLinkElement 'special object variable for an <a> (link) element 
Dim y As Integer 'integer variable used as a counter for Rows 
Dim z As Integer 'integer variable used as a counter for Columns 
Dim result As String 'string variable that will hold our result link 
Dim Pather As String 
Dim CurrActiveBook As String 
Dim CurrActiveSheet As String 
Dim drV As String 
Dim targetBook As String 

'dimension (declare or set aside memory for) our variables 

Application.DisplayAlerts = False 

    Pather = ThisWorkbook.Path & "\" '---holds current path--- 
    ChDrive Pather      '---sets excel to the current drive--- 
    ChDir Pather      '---sets excel to the current drive--- 
    drV = Left(Pather, 3) 
    CurrActiveBook = ActiveWorkbook.Name 
    CurrActiveSheet = ActiveSheet.Name 
    targetBook = ActiveWorkbook.Name 
    Range("D2:K62").Select 
    Selection.ClearContents   '---clears old data 

    Set objIE = New InternetExplorer  'initiating a new instance of Internet Explorer and asigning it to objIE 
    objIE.Visible = False  'make IE browser visible (False would allow IE to run in the background) 
    objIE.navigate Sheets(CurrActiveSheet).Range("A1").Value  'navigate IE to this web page (a pretty neat search engine really) 
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop  'wait here a few seconds while the browser is busy 
     Application.Wait Now + TimeValue("0:00:05") '---Give an extra 5 seconds to upload 

    Range("D1") = "Date" 
    Range("E1") = "Open" 
    Range("F1") = "High" 
    Range("G1") = "Low" 
    Range("H1") = "Close" 
    Range("I1") = "Adj Close*" 
    Range("J1") = "Avg Vol" 

    Range("D2").Select 
    y = 0 'the first search result will go in row 2 
    z = 0 
    For Each aEle In objIE.document.getElementsByClassName("Py(10px)") 'for each <a> element in the collection of objects with class of 'result__a'... 
     ActiveCell.Offset(y, z).Value = aEle.innerText 
     Debug.Print aEle.innerText 

If z > 5 Then '---Data loads in one column. This converts to a table.------- 
    z = 0 
    y = y + 1 'increment our row counter, so the next result goes below 
    Application.Wait Now + (TimeValue("0:00:01")/2) '--giver data an extra 1/2 second to load up--- 
Else 
    If z = 1 Then 
    If Right(ActiveCell.Offset(y, z), 5) = "Split" Then '---Split reset back to date column--- 
     z = 0 
     y = y + 1 
     Else 
      If Right(ActiveCell.Offset(y, z), 8) = "Dividend" Then '---Dividend reset back to date column--- 
      z = 0 
      y = y + 1 
      Else 
     z = z + 1 
     End If 
     End If 
    Else 
     z = z + 1 
    End If 
    End If 
    DoEvents 
    Next 'repeat times the # of ele's we have in the collection 

objIE.Quit  'close the browser 
Columns("D:J").Select 
Selection.Columns.AutoFit 
    Range("D1").Select 

     Application.DisplayAlerts = True 
    MsgBox "Done" 
    End Sub '---End of program--- 
+1

このコードが解決策であるのか、話しているのかが分かりませんが、同じ問題があります。最初のケースでは答えを更新し、2番目のケースでは別の質問で尋ねます。 – Qwertiy

関連する問題