Текущее значение курса доллара
- Войдите на сайт для отправки комментариев
Чт, 25/12/2014 - 15:39
Друзья!
Я начинающий (3 дня всего) ардуиновод, по этой причине не пинайте и не смейтесь. )
Есть потребность выводить на семисегментный восьмизначный дисплей (MAX7219) текущий (мгновенный) курс доллара.
В MS Access это делаю так:
Public Function kurs() Dim URL As String URL = "http://www.finanz.ru/valuti/diagramma-realnom-vremeni/USD-RUB" Dim oHttp As Object On Error Resume Next Set oHttp = CreateObject("MSXML2.XMLHTTP") If Err.Number <> 0 Then Set oHttp = CreateObject("MSXML.XMLHTTPRequest") End If On Error GoTo 0 If oHttp Is Nothing Then MsgBox "Не удалось инициализировать объект MSXML!" Exit Function End If oHttp.Open "GET", URL, False oHttp.Send sss = oHttp.ResponseText Set oHttp = Nothing sss1 = Mid(sss, InStr(1, sss, "USD/RUB - в реальном времени"), 500) s1 = "lsformat=" & Chr(34) & "| |,|4|0|" & Chr(34) & ">" sss2 = Mid(sss1, InStr(1, sss1, s1) + Len(s1)) kurs = Mid(sss2, 1, InStr(1, sss2, "</div>") - 1) Debug.Print kurs End Function
Помогите переработать код функции в скетч.
Актуально же для большинства.
В интернет контроллер будет ходить через ESP8266.
"Слона нужно есть по частям" говорил один из преподов в универе...
для начала изобретем логику парсера:
работать будем со строкой String str; - обьявить надо глобально и когда надо очистить сами разберемся.
разбиение строк надо делать по символам "<" - самый простой парсинг - нам не нужно дерево обьектов
тоесть получаем символ char sym = client.read(); и очищаем буфер if(sym == '<'){str="";}else{str=str+sym;}. В итоге в какой то момент в буфере окажется строка:
div field="bid" item="X0000020200839420" source="lightstreamer" table="1" class="price" lsformat="| |,|4|0|">53,4995
Определить ее можно if(str.indexOf("class=\"price\"") != -1){}, потом найти позицию символа ">" этойже функции и вытащить число 53,4995 - String num = str.substring(str.indexOf('>')); потом надо преобразовать его в double функцией strtod(). Возможно придется сначала заменить "," на "."
разбираться с дисплеем надо на следущем этапе, после того как курс 53,4995 регулярно получается программой через вайфай модуль(выводить можно пока в порт), потому что примеров работы с дисплеем навалом, а парсить хтмл сложнее.
Как из хтмлки достать необходимое значение (курса доллара) более менее понятно.
Мне не понятно как вообще html получить.
Мне не понятно как вообще html получить.
http client get string или что-то похожее по смыслу... Т.е., кто-то должен ткнуться по указанному адресу и сказать туда GET - в ответ он получает html, Вы можете это проверить просто телнетом на 80-й порт.
~$ telnet www.finanz.ru 80
Trying 65.52.145.144...
Connected to finando-bundle3-web-neu.cloudapp.net.
Escape character is '^]'.
GET /valuti/diagramma
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
Set-Cookie: ASP.NET_SessionId=e1qppopsncbqieychr3na5ku; path=/; HttpOnly
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 26 Dec 2014 14:35:07 GMT
Content-Length: 13547
X-Cache: MISS from fbsd2.office
Via: 1.1 fbsd2.office (squid/3.2.13)
Connection: close
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><script type="text/javascript">window.NREUM||(NREUM={});NREUM.info = {"beacon":"beacon-2.newrelic.com","errorBeacon":