2016-07-11 3 views
0

Я смог получить данные о запасе и индексе от Fidelity, установив соединение с соответствующей страницей Fidelity; запись результатов на рабочий лист; и затем найти результаты, которые я хочу на этом листе.Parsing Fidelity Stock Quote page

Я сейчас пытаюсь упростить и избегать использования как IE, так и временной страницы рабочего стола. Приведенный ниже код, с помощью Microsoft XML, v6.0, кажется, чтобы загрузить всю необходимую информацию, но я не могу понять, как обрабатывать вещи после того, чтобы быть в состоянии извлечь Имя, Последняя цена, и Дата/время этой последней цены.

Я посмотрел на Yahoo финансов и Google финансов, но они не имеют все индексы, которые я заинтересован.

ниже код заставляет меня до точки загрузки информации страницы, но только компоненты, которые, как я вижу, возвращаются «Get», это responseText (который я разделил и разместил на листе для проверки) и responseBody, который, кажется, представляет собой массив кодов символов содержимого responseText.

Возможно, я даже не должен использовать инструмент MS XML, но мне кажется, что это должно быть возможно.

Спасибо за любые указатели.


Sub FIDOQuoteTester() 

'Set Reference to Microsoft XML V6.0 

Const sURLPart1 As String = "http://quotes.fidelity.com/webxpress/get_quote?QUOTE_TYPE=D&SID_VALUE_ID=" 
Const sURLPart3 As String = "&submit=Quote" 
Dim sURL As String 
Dim sSymbols As String '+ separated list 
Dim REQ As MSXML2.ServerXMLHTTP60 'using Server type as the other raises security problems 

Dim V As Variant, R As Range 

Dim S As String 

sSymbols = ".DJI+.SPX" 
sURL = sURLPart1 & sSymbols & sURLPart3 

Set REQ = New ServerXMLHTTP60 
REQ.Open "Get", sURL, False 
REQ.send 

S = REQ.responseText 

Stop 

'putting string on worksheet for examination 
'Need to split the string as it is too long for a cell. 
V = Split(S, vbLf) 
Set R = Range("a1").Resize(UBound(V) + 1, 1) 
With R 
    .EntireColumn.Clear 
    .Value = WorksheetFunction.Transpose(V) 
End With 


End Sub 

+0

Вы можете загрузить reposneText (в данном случае HTML) в HTML-объекта (mshtml.tlb), а затем попытаться разборе элементы тд/тр. – cyboashu

+0

@cyboashu Мне не удалось выяснить, как получить этот текст в объект документа HTML, в VBA. –

+0

Посмотрите, помогает ли код (в ответах). – cyboashu

ответ

1

Установите Refernce в библиотеку объектов Microsoft HTML.

Тогда:

'/ Adding response text to MSHTML 

Dim oHTML  As New HTMLDocument 
Dim e   '/ This is your element 

oHTML.body.innerHTML = "" 

oHTML.body.innerHTML = S '/ Set your responseText(HTML) here 

'/ Loop through all the elements 
For Each e In oHTML.all 
    Debug.Print e.ID & "-->" & e.innerText 
Next 
+1

Спасибо! Это и есть. Наверное, я не понимал, что .innerHTML был прочитан/записан, а не доступен только для чтения. –

Смежные вопросы