您的位置:首页 > 其它

在.NET的Windows桌面应用中使用Amazon的Web Services

2008-04-24 11:38 706 查看
摘要Amazon免费的Web Services可以让你在自己编写的应用程序中查询并显示Amazon站点上的数据,接下来我们就进入雅玛逊,用.NET去体会Web Services目录1. Amazon Web Services简介2. 使用.NET体验Amazon Web Services3. 小结 1.Amazon Web Services简介几年前Amazon就发布了能够查询和显示自己产品信息的Web Services,这个Web Services兼容几乎所有的能够借助HTTP并消费HTML或基于SOAP的XML的语言。 在使用Amazon Web Services之前,需要到Amazon下载开发包,这个开发包包含开发人员需要的文档资料以及代码样例(Amazon.com/gp/browse.html/ref=sc_fe_c_3/103-9196653-9063038?no=3435361&me=A36L942TSJ2AJA&node=3434641">http://www.Amazon.com/gp/browse.html/ref=sc_fe_c_3/103-9196653-9063038?no=3435361&me=A36L942TSJ2AJA&node=3434641)之后需要得到Amazon 开发者的证件(Amazon.com/exec/panama/associates/join/developer/kit.html">https://associates.Amazon.com/exec/panama/associates/join/developer/application.html ) 2. 使用.NET体验Amazon Web Services有两种方法可以查询Amazon Web Service:使用HTTP 请求或者借助SOAP,下面就用强大的.NET来完成这次雅玛逊之旅。首先,我们需要建立一个简单的应用程序,它必须要有一个文本框作为查询使用,用户在输入了关键字后程序便调用Amazon的服务按照输入的关键字查询,然后将找到的相关产品标题输出到列表框中,最后当用户点击了列表中的相应标题时显示明细到另一个多行文本框中。完成以上的步骤,我们需要发送两种请求:KeywordRequest和AsinRequest。ASIN是“Amazon.com标准产品序号”的简称,它唯一的标示了每一件Amazon的产品。请求又分为两种类型:轻量级和重量级,本应用中,KeywordRequest为轻量级请求,而AsinRequest是重量级的请求。这是由请求返回的数据量决定的。① 创建.NET Windows 应用,并在窗口中加入下列控件txtSearch—单行文本框,允许用户输入关键字进行商品店的查询 lstResults—列表框,显示根据关键字得到的标题txtDetails—多行文本框,显示标题对应的商品明细 ② 引入Amazon Web Service在.NET IDE的“Project”主菜单中选择“Add Web Reference…”菜单项,并在弹出对话框的地址栏中输入“http://soap.Amazon.com/schemas2/AmazonWebServices.wsdl”后回车。① 调用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.Textkr.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) Thenkr.page = "2"pi = srch.KeywordSearchRequest(kr)allDetails = pi.DetailsEnd If ② 显示查询结果[VB.NET]Me.Cursor = Cursors.WaitCursorDim i As Int16For i = 0 To allDetails.Length - 1lstResults.Items.Add("产品名称:" & allDetails(i).ProductName & " || 产品序号:" & allDetails(i).Asin)NextMe.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.DetailstxtDetails.Text = "产品名称:" & allDetails(0).ProductName & System.Environment.NewLinetxtDetails.Text = txtDetails.Text & "产品序号:" & allDetails(0).Asin & System.Environment.NewLineDim strAuthors() As String = allDetails(0).AuthorsIf strAuthors.Length > 0 ThenDim j As Int16For j = 0 To strAuthors.Length - 1txtDetails.Text = txtDetails.Text & "作者:" & strAuthors(j) & System.Environment.NewLineNextEnd IftxtDetails.Text = txtDetails.Text & "分类:" & allDetails(0).Catalog & System.Environment.NewLinetxtDetails.Text = txtDetails.Text & "出版商:" & allDetails(0). Publisher & System.Environment.NewLinetxtDetails.Text = txtDetails.Text & "数量:" & allDetails(0).CollectibleCount & System.Environment.NewLinetxtDetails.Text = txtDetails.Text & "价格:" & allDetails(0).CollectiblePrice & System.Environment.NewLinetxtDetails.Text = txtDetails.Text & "小图片URL:" & allDetails(0).ImageUrlSmall & System.Environment.NewLinetxtDetails.Text = txtDetails.Text & "中图片URL:" & allDetails(0).ImageUrlMedium & System.Environment.NewLinetxtDetails.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图片的功能了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: