1000株について、finance.yahoo.comから過去の株価データをダウンロードしようとしています。 Webサイトでは1ページに60日間のデータしか表示されないため、さまざまな証券のループに合わせて、ダウンロードしている期間をループする必要があります。次のコードを使用して、関連するページにアクセスしました。
Set httpObject = CreateObject("MSXML2.XMLHTTP")
httpObject.Open "GET", url, False
httpObject.send
webObject.body.innerHTML = httpObject.responseText
これは、私がアクセスするデータの99%の魅力のように機能します。しかし、時々、まったく同じURLでInternet Explorerに正しいデータが表示されても、Webサイトから返されるオブジェクトは空であることが判明します。そのURLのみのコードを再実行すると、次回は失敗する場合と失敗しない場合があります。
上記の方法を使用するより安定した/一貫した方法があるかどうか知りたいのですが。以前にInternetExplorer.Applicationメソッドを実装してデータをダウンロードしていましたが、速度が遅く扱いにくいことがわかりました。
レディステートを確認してください。
httpObject.ReadyState = 4
つまり、読み込みが完了しました。次に、ステータスを確認できます
httpObject.Status = 200
つまり、URLをめちゃくちゃにしていないということです。 readystateが4で、statusが200の場合、responseTextを読み取ることができます。
同じ問題があり、.Status = 0
(つまりOK)で空の応答が返されました。私が判明した問題は、ブラウザーにアクセスしたときにhttpがhttpsにリダイレクトされることでした。私のリクエストで変更したときは問題ありませんでした。
一般的な関数の場合は、httpを試して、.Status = 0
と.responseText = ""
を取得した場合は、httpsで繰り返します。