Дополнение. №1
В теме "
Запланированное и не очень отключение серверов Betfair" говорилось о боте, который "поможет" узнать какие технические работы ведутся на бирже, и когда это кончится...
Пример сегодняшних работ для английской аудитории:
031.png 8.18K
23 Количество загрузок
______________
Немного теории как это все получить:
Чтобы увидеть ведутся ли технические работы на сервере - достаточно пройти по адресу:
service.betfair.info/index.html
Открыв исходники html страницы, мы увидим следующее:
032.png 4.4K
21 Количество загрузок
В файле
englishfrom1.js содержится строка даты и времени, когда планируется отключение (25/01/2012, 6:00AM), соответственно
englishto1.js - время и дата окончания работ,
englishproduct1.js - вид работ...
В имени файла, например
englishfrom1.js -
english означает страну, для которой отображать время (для России -
russianfrom1.js), а цифра 1 - означает строку работ. Как видно строк с работами 3, значит и фалов должно быть три...
______________
Теперь давайте получим это все программно...
1. На форме разместим элемент ListView:
034.png 9.4K
12 Количество загрузок
и в коде формы у нас должно быть следующее:
Imports System.IO
Public Class Form1
Private Sub Form1_Invalidated(ByVal sender As Object, ByVal e As System.Windows.Forms.InvalidateEventArgs) Handles Me.Invalidated
Dim objItem As ListViewItem
Try
Dim i As Integer = 1
Do
objItem = ListView1.Items.Add(GetErr("englishfrom", i))
objItem.SubItems.Add(GetErr("englishto", i))
objItem.SubItems.Add(GetErr("englishproduct", i))
i = i + 1
Loop
Catch ex As Exception
'MsgBox("Err")
End Try
End Sub
Function GetContents(ByRef strSource As String) As String
Dim strStart, strEnd As Integer, strLen As Integer
strStart = InStr(strSource, "(") + 2
strEnd = InStr(strSource, ")") - 1
strLen = strEnd - strStart
Return Mid(strSource, strStart, strLen)
End Function
Function GetErr(ByVal str As String, ByVal i As Integer) As String
Dim web_client As New Net.WebClient()
Dim response As Stream
response = web_client.OpenRead("http://service.betfair.info/files/frames/" & str & i & ".js")
Dim stream_reader As New IO.StreamReader(response)
Return GetContents(stream_reader.ReadToEnd()) : stream_reader.Close()
End Function
End Class
Теперь разберем по функциям:
1.
Private Sub Form1_Invalidated.... - начинает работу при запуске программы.В ней через цикл Do... Loop заполняются строки элемента ListView. Если технических работ на сервере нет - мы получим пустой список.
2.
GetContents - функция возвращает строку между скобками и удаляет все лишнее. Если, например есть строка
блаблабла(инфа)бла... то функция возвратит -
инфа
3.
GetErr - функция через
web_client.OpenRead получает содержимое тех самых файлов, описаных выше (
englishfrom1.js) и возвращает через
GetContents чистую нужную строку с информацией...
В итоге мы видим следующую картину:
033.png 11K
11 Количество загрузок
Для России в
Private Sub Form1_Invalidated заменить
objItem = ListView1.Items.Add(GetErr("englishfrom", i))
objItem.SubItems.Add(GetErr("englishto", i))
objItem.SubItems.Add(GetErr("englishproduct", i))
на
objItem = ListView1.Items.Add(GetErr("russianfrom", i))
objItem.SubItems.Add(GetErr("russianto", i))
objItem.SubItems.Add(GetErr("russianproduct", i))
Мне очень помогает... Написал этот код сразу же, после того как попал после незапланированных тех. работ...
Хотя если ставка уже принята, и внезапно пошли сбои в работе сервера, будет уже поздно... но проверить лишний раз никогда не мешает.