Сетевые потоки
Остается лишь проанализировать переменную 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, в результате чего символ "," интерпретировался неверно. Разумеется, проблема легко решается – достаточно, чтобы функция возвращала значение строкового типа.
