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

原创 2003年08月13日 11:35:00

摘要

Amazon免费的Web Services可以让你在自己编写的应用程序中查询并显示Amazon站点上的数据,接下来我们就进入雅玛逊,用.NET去体会Web Services

 

目录

1. Amazon Web Services简介

2. 使用.NET体验Amazon Web Services

3. 小结

 

1. Amazon Web Services简介

几年前Amazon就发布了能够查询和显示自己产品信息的Web Services,这个Web services兼容几乎所有的能够借助HTTP并消费HTML或基于SOAPXML的语言。

在使用Amazon Web Services之前,需要到Amazon下载开发包,这个开发包包含开发人员需要的文档资料以及代码样例(http://www.amazon.com/gp/browse.html/ref=sc_fe_c_3/103-9196653-9063038?no=3435361&me=A36L942TSJ2AJA&node=3434641

之后需要得到Amazon 开发者的证件(https://associates.amazon.com/exec/panama/associates/join/developer/application.html

2. 使用.NET体验Amazon Web Services

有两种方法可以查询Amazon Web Service:使用HTTP 请求或者借助SOAP,下面就用强大的.NET来完成这次雅玛逊之旅。

首先,我们需要建立一个简单的应用程序,它必须要有一个文本框作为查询使用,用户在输入了关键字后程序便调用Amazon的服务按照输入的关键字查询,然后将找到的相关产品标题输出到列表框中,最后当用户点击了列表中的相应标题时显示明细到另一个多行文本框中。

完成以上的步骤,我们需要发送两种请求:KeywordRequestAsinRequestASIN是“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对象。每次的请求也会返回一个ProductInfoXML文档节点, 所以也必须创建一个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

 

      显示明细

使用ListBoxSelectedIndexChanged事件检索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类型,这种类型可以直接赋值给PictureBoxImage属性。那么在现有的窗体上面加入PictureBox控件,然后编写如下代码放到ListBoxSelectedIndexChanged事件的最后,就能够实现显示URL图片的功能了。

[VB.NET]

pbImage.Image = ImageFromAmazon(allDetails(0).ImageUrlMedium)

 

3. 小结

这个例子看上去非常简单,但是通过这个例子可以帮助学习.NETWeb Service

node-webkit:开发桌面+WEB混合型应用的神器

原文地址:node-webkit:开发桌面+WEB混合型应用的神器原作者:大漠穷秋转载以备份~如有侵权,请联系马仔君进行删除bla…bla… 顾名思义,node-webkit就是nodejs+w...
  • xuexiiphone
  • xuexiiphone
  • 2016年05月18日 11:05
  • 8336

用HTML开发Windows桌面应用程序1

如果要说明这个题目上的问题,就先要说一下,软件开发的种种方式,从最初的命令行软件开发方式,到可视化的窗口软件,开发方式的进步使得开发难度降低,用户体验也越来越完善,不过今天要谈的是windows下的桌...
  • xiaoaiai
  • xiaoaiai
  • 2015年05月27日 10:16
  • 8700

【吐槽系列】如何用最贱蛋的方式将web程序变为桌面应用

前言实在是想吐个槽,最近公司有个活,想要将我们写的web网站套在一个浏览器壳子里面,愣装桌面应用(zhuang b)。然后健哥给我推荐了cef,顺道作者又手贱的去看了cefSharp和Xilium.C...
  • xuexiiphone
  • xuexiiphone
  • 2016年05月18日 10:24
  • 2992

Amazon桌面云(Workspaces)服务介绍

对于许多企业来说,员工新加入公司之后给员工提供一个PC似乎是一个标准的流程。当然随着技术的发展,一开始提供的台式机目前已经慢慢的变成了笔记本。公司的IT部门一般都会在这些PC上预先把员工的工作环境配置...
  • u012365585
  • u012365585
  • 2013年11月14日 08:10
  • 6196

Web应用程序与桌面应用程序的区别

webdelphi服务器网络internetaccess 如果都是用.net做的话,桌面程序需要开发服务器端和客户端两块程序,电脑都要安装.net framework,b/s形式的话,只用做服务...
  • zkn_CS_DN_2013
  • zkn_CS_DN_2013
  • 2014年01月06日 17:41
  • 3217

用HTML开发Windows桌面应用程序2

接上次。       1.MFC,DHMTL开发 给大家演示一下,用MFC搞一个HTML应用程序。 关于如何用MFC搞DHTML,可以参见上一篇文章   贴代码 1.添加这个消息映射  ...
  • xiaoaiai
  • xiaoaiai
  • 2015年05月27日 11:32
  • 4246

有关java桌面应用如何在别的电脑上运行

本人找了很久,终于在某位大神的点播下,明白如何让自己写的java程序,在别的电脑上运行,真正和他人一起分享你成功的喜悦。           首先我们都知道java程序是运行在java虚拟机上的,所...
  • guanguoxiang
  • guanguoxiang
  • 2015年03月15日 21:48
  • 3337

坐井观天谈Windows桌面应用程序开发中的MVC架构(一)之个人开发之路

刚刚毕业的时候从第二份工作开始就进入了Windows桌面程序开发中,从此一如侯门深似海,多次徘徊在进入服务器端开发的门口,却始终没能迈进去。刚开是写基于MFC的UI写到崩溃,经常是一个很简单的界面效果...
  • whuavon
  • whuavon
  • 2015年09月12日 14:17
  • 1915

一个javaWeb程序员做一个桌面小应用的总结

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • yunduanyou
  • yunduanyou
  • 2017年07月26日 10:29
  • 287

使用 .NET 平台,如何玩转 Universal Windows 应用?

2015年7月30日本文作者是 Managed Languages 团队项目经理 Lucian Wischik。不久前,Visual Studio 2015上新增 Windows 10 应用的开发工具...
  • wangpeng198688
  • wangpeng198688
  • 2015年12月30日 10:47
  • 1708
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在.NET的Windows桌面应用中使用Amazon的Web Services
举报原因:
原因补充:

(最多只允许输入30个字)