Сетевые потоки
Остается лишь проанализировать переменную theData и извлечь из нее данные о продажах. Для этого мы воспользуемся вспомогательной функцией Analyze:
Private Function Analyze(ByVal theData As String)As Integer Dim Location As Integer Location – theData.IndexOf("<b>Amazon.com Sales Rank:</b>") + "<b>Amazon.com Sales Rank:</b>".Length Dim temp As String Do Until theData.Substring(Location.l) = "<" temp = temp StheData.Substring(Location.l) Location += 1 Loop Return CInt(temp) End Function
Примечание
Для анализа строковой переменной также можно воспользоваться классом регулярных выражений из пространства имен System.Text.
Ниже приведен полный код тестового модуля (разумеется, для тестирования вам также понадобится Интернет-соединение):
Option Strict On Imports System.IO Imports System.Net Module Module1 Sub Main() Dim myBook As New AmazonRanker("1893115992") MsgBox("This book's current rank is " & myBook.GetRank) End Sub End Module Public Class AmazonRanker Private m_URL As String Private m_Rank As Integer Public Sub New(ByVal ISBN As String) m_URL = "http://www.amazon.com/exec/obidos/ASIN/" & ISBN End Sub Public Readonly Property GetRank() As Integer Get Return ScrapeAmazon() End Get End Property Private Function ScrapeAmazon() As Integer Try Dim theURL As New URI(m_URL) Dim theRequest As WebRequest theRequest = WebRequest.Create(theURL) Dim theResponse As WebResponse theResponse = theRequest.GetResponse DimaReaderAsNew StreamReader(theResponse.GetResponseStream()) Dim theData As String theData = aReader.ReadToEnd Return Analyze(theData) Catch E As Exception Console.WriteLine(E.StackTrace) Console. ReadLine() End Try End Function Private Function Analyze(ByVal theData As String) As Integer Dim Location As Integer Location = theData.IndexOf("<b>Amazon.com Sales Rank:</b>") + "<b>Amazon.com Sales Rank:</b>".Length Dim temp As String Do Until theData.Substring(Location.l) = "<" temp – temp &theData.Substring(Location,l) Location += 1 Loop Return CInt(temp) End Function End Class
Примечание
Пример этой программы наглядно показывает, какие неуловимые проблемы порой возникают в результате локализации. Когда наш друг запустил эту программу в Европе, она отказалась работать. Оказалось, что на сайте Amazon по вполне понятным причинам используется американский числовой формат, а программа запускалась в европейской версии Windows, в результате чего символ "," интерпретировался неверно. Разумеется, проблема легко решается – достаточно, чтобы функция возвращала значение строкового типа.