① 调用Amazon Web Service
引入Web Service成功后,编写代码将Amazon Web Service的名称空间引入
[C#]
using AmazonWebServices.com.amazon.soap;
[VB.NET]
Imports AmazonWebServices.com.amazon.soap
要实现SOAP查询,首先需要创建一个AmazonSearchService类的实例
[VB.NET]
Dim srch As New AmazonSearchService()
每次关键字查询都会需要创建KeywordRequest 实例;每次ASIN查询就需要创建一个AsinRequest对象。每次的请求也会返回一个ProductInfo的XML文档节点, 所以也必须创建一个ProductInfo实例从响应中检索ProductInfo的数据。
[VB.NET]
Dim kr As New KeywordRequest()
kr.devtag = "你得到的Amazon 开发者的证件"
kr.keyword = txtSearch.Text
kr.mode = "books"
kr.sort = "+titlerank"
kr.tag = "webservices-20"
kr.type = "lite"
kr.page = "1"
Dim pi As ProductInfo = srch.KeywordSearchRequest(kr)
Dim allDetails() As Details = pi.Details
请求发出之前需要将我们之前得到的Amazon 开发者证件的数值付给KeywordRequest 对象的devtag 属性,而结果会按照标题字母的升序排列。每次查询最多会返回10条数据,因此想要得到更多的数据必须进行多次查询。
[VB.NET]
If (pi.TotalResults > 10) Then
kr.page = "2"
pi = srch.KeywordSearchRequest(kr)
allDetails = pi.Details
End If
② 显示查询结果
[VB.NET]
Me.Cursor = Cursors.WaitCursor
Dim i As Int16
For i = 0 To allDetails.Length - 1
lstResults.Items.Add("产品名称:" & allDetails(i).ProductName & " || 产品序号:" & allDetails(i).Asin)
Next
Me.Cursor = Cursors.Default
③ 显示明细
使用ListBox的SelectedIndexChanged事件检索ASIN(产品序号)请求的数据。
[VB.NET]
Dim ar As New AsinRequest()
ar.asin = Microsoft.VisualBasic.Right(CStr(lstResults.Items(lstResults.SelectedIndex)), Len(CStr(lstResults.Items(lstResults.SelectedIndex))) - (InStr(1, CStr(lstResults.Items(lstResults.SelectedIndex)), "|| 产品序号:") + Len("|| 产品序号:")) + 1)
ar.devtag = "你得到的Amazon 开发者的证件"
ar.type = "heavy"
ar.tag = "webservices-20"
Dim srch As New AmazonSearchService()
Dim pi As ProductInfo = srch.AsinSearchRequest(ar)
Dim allDetails() As Details = pi.Details
txtDetails.Text = "产品名称:" & allDetails(0).ProductName & System.Environment.NewLine
txtDetails.Text = txtDetails.Text & "产品序号:" & allDetails(0).Asin & System.Environment.NewLine
Dim strAuthors() As String = allDetails(0).Authors
If strAuthors.Length > 0 Then
Dim j As Int16
For j = 0 To strAuthors.Length - 1
txtDetails.Text = txtDetails.Text & "作者:" & strAuthors(j) & System.Environment.NewLine
Next
End If
txtDetails.Text = txtDetails.Text & "分类:" & allDetails(0).Catalog & System.Environment.NewLine
txtDetails.Text = txtDetails.Text & "出版商:" & allDetails(0). Publisher & System.Environment.NewLine
txtDetails.Text = txtDetails.Text & "数量:" & allDetails(0).CollectibleCount & System.Environment.NewLine
txtDetails.Text = txtDetails.Text & "价格:" & allDetails(0).CollectiblePrice & System.Environment.NewLine
txtDetails.Text = txtDetails.Text & "小图片URL:" & allDetails(0).ImageUrlSmall & System.Environment.NewLine
txtDetails.Text = txtDetails.Text & "中图片URL:" & allDetails(0).ImageUrlMedium & System.Environment.NewLine
txtDetails.Text = txtDetails.Text & "大图片URL:" & allDetails(0).ImageUrlLarge & System.Environment.NewLine
④ 显示URL指向的图片
从上面代码的最后几行可以看到每个产品是含有图片的,我们可以自己编写一个ImageFromAmazon方法用来显示Amazon网站上面的图片信息。
Private Function ImageFromAmazon(ByVal url As String) As Image
Dim wc As New WebClient()
Dim st As System.IO.Stream = wc.OpenRead(url)
Dim img As Image = Image.FromStream(st)
st.Close()
Return img
End Function
ImageFromAmazon方法创建WebClient实例并从指定的URL请求图片数据分配给Stream对象,方法的返回值是Image类型,这种类型可以直接赋值给PictureBox的Image属性。那么在现有的窗体上面加入PictureBox控件,然后编写如下代码放到ListBox的SelectedIndexChanged事件的最后,就能够实现显示URL图片的功能了。
[VB.NET]
pbImage.Image = ImageFromAmazon(allDetails(0).ImageUrlMedium)
3. 小结
这个例子看上去非常简单,但是通过这个例子可以帮助学习.NET和Web Service。