참고 도서 XML in a Nutshell, 2nd Edition |
[그림1] 아마존 웹 서비스 개발자 도구 다운로드
C:\>wsdl /language:vb /o:Amazon.vb AmazonWebServices.wsdl위의 과정은 Visual Basic .NET의 프록시 클래스를 생성한다. 이 프록시 클래스를 여러분의 프로젝트에서 사용하기 위해 그림 2에서와 같이 Amazon.vb 클래스를 프로젝트에 추가시킨다.
[그림 2] 웹 서비스 프록시 클래스 추가
[그림 3] 윈도우 폼에 컨트롤 추가
[그림 4] Customize Toolbox
Dim ws As New AmazonSearchService()만약 프록시 서버를 통해서 인터넷에 연결한다면 WebProxy 객체를 생성한다. 이 과정을 따르지 않는다면 웹 서비스에 연결하지 못하고 connection closed error를 보게 될 것이다.
Dim myProxy As New System.Net.WebProxy(" yourproxy..company.com", 8080) ws.Proxy = myProxy이제 키워드 검색을 위해 KeywordRequest 클래스를 만들어 보자. 클래스에 대한 다양한 속성(properties)도 필요하다. 다만 이러한 속성 값에는 아직 기본 값이 존재하지 않기 때문에 값을 정해 주지 않으면 "404"에러를 보게 될 것이다.
Dim keywordReq As New KeywordRequest() keywordReq.keyword = txtKeyword.Text keywordReq.type = "heavy" " type of result expected, lite or heavy keywordReq.devtag = "XXXXX" " the token assigned to you keywordReq.version = "1.0" " current version number keywordReq.mode = "books" " product category, e.g. books, dvd, etc keywordReq.tag = "webservices-20" " your amazon.com associates ID keywordReq.page = 1 " page requesting; for long results모든 속성 값을 입력한 후 웹 서비스를 호출하면 전역 변수인 ProductInfo 객체를 얻을 수 있다.
Try productsInfo = ws.KeywordSearchRequest( keywordReq) Catch err As Exception MsgBox("Error accessing Amazon.com"s Web service. Please try again") Return End TryProductInfo 객체를 통해 리스트 박스 컨트롤에 결과를 표시한다.
lstTitles.Items.Clear() Dim i As Integer For i = 0 To productsInfo.Details.Length - 1 lstTitles.Items.Add(productsInfo.Details(i). ProductName.ToString) Next리스트 박스 안에 있는 도서제목을 선택하면 책이 가지고 있는 정보를 표시해야 한다.
" Displays the title information lblTitle.Text = productsInfo.Details (lstTitles.SelectedIndex).ProductName lblListPrice.Text = productsInfo.Details (lstTitles.SelectedIndex).ListPrice lblAmazonPrice.Text = productsInfo.Details (lstTitles.SelectedIndex).OurPrice만약 책의 저자가 한 사람 이상일 경우 Authors 객체의 내용을 반복해서 정보를 얻어내야 한다.
" Display all the author(s) of a book Dim i As Integer lblAuthors.Text = "" For i = 0 To productsInfo.Details(lstTitles. SelectedIndex).Authors.Length - 1 lblAuthors.Text += productsInfo. Details(lstTitles.SelectedIndex). Authors(i).ToString If i <> productsInfo. Details(lstTitles.SelectedIndex). Authors.Length - 1 Then " not the last author lblAuthors.Text += ", " End If Next대부분의 책들은 도서 서평과 고객 평가를 가지고 있다. "*"을 사용해서 고객 평가를 표현해 보자.
" Displays the average customer ratings using asterisks If Not productsInfo.Details(lstTitles. SelectedIndex).Reviews Is Nothing Then lblRating.Text = "" For i = 1 To productsInfo.Details(lstTitles. SelectedIndex).Reviews. AvgCustomerRating lblRating.Text += "*" Next End If마지막으로 Web Browser OCX 컨트롤을 사용하여 책 표지를 나타내보자. 라디오 버튼은 사진의 크기를 조절한다.
" Display image according to size preference If optSmall.Checked Then AxWebBrowser1.Navigate(productsInfo. Details(lstTitles.SelectedIndex). ImageUrlSmall) ElseIf optMedium.Checked Then AxWebBrowser1.Navigate(productsInfo. Details(lstTitles.SelectedIndex). ImageUrlMedium) Else AxWebBrowser1.Navigate(productsInfo. Details(lstTitles.SelectedIndex). ImageUrlLarge) End If이제 [그림 5]와 같이 애플리케이션을 실행해보자.
[그림 5] 책표지 사진
keywordReq.page = 1 " page requesting; for long results기본적으로 아마존은 하나의 요청마다 최대 10 개의 제품에 대한 결과를 보여준다. 검색 기준에 일치하는 다음 제품들을 보여 주기 위해서 Page 속성 값을 변경 할 수 있다. Page 속성 값이 2이면 11번째부터 20번째 제품까지 보여주고 3이면 21번째부터 30번째 제품을 보여주게 된다.
keywordReq.mode = "books"혹은 Kitchen 카테고리로 찾고 싶다면
keywordReq.mode = "kitchen"또한 ASIN(Amazon Standard Item Number: 아마존 제품의 유일한 식별 번호), ISBN, UPC로 검색하고 싶을 수도 있다. 책의 경우 ASIN은 ISBN (International Standard Book Number)과 비슷하다. CD와 테이프의 경우 UPC (Universal Product Code)을 사용한다. 좀더 강력한 검색을 위해서 다음과 같은 클래스를 이용해 보자.
Dim authorReq As New AuthorRequest()
Dim UPCReq As New UpcRequest()
Dim ASINReq As New AsinRequest()
Dim actorReq As New ActorRequest()
Dim artistReq As New ArtistRequest()
Dim directorReq As New DirectorRequest()
Dim manuReq As New ManufacturerRequest()
Dim listReq As New ListmaniaRequest()
Dim simReq As New SimilarityRequest()
Dim browseReq As New BrowseNodeRequest()
Books, Top Selling 1000 Books, Bargain 45 Books, Technical 173507각 카테고리 옆에 있는 숫자는 Browse ID 이다. Browse ID로 제품을 나열하기 위해 BrowseNodeRequest 클래스를 사용한다.
Dim browseReq As New BrowseNodeRequest() browseReq.browse_node = "602320" " Magazines, Business browseReq.type = "heavy" browseReq.devtag = "XXXXX" browseReq.version = "1.0" browseReq.mode = "magazines" browseReq.tag = "webservices-20" browseReq.page = 1 productsInfo = ws.BrowseNodeSearchRequest(browseReq)예를 들어 위의 코드는 "Magazines, Business" 카테고리(Browse ID : 602320)로 제품을 나열한 것이다.
"Dim myProxy As New System.Net.WebProxy("staffproxy.np.edu.sg", 8080) "ws.Proxy = myProxy그런 다음
"--- "Dim keywordReq As New BrowseNodeRequest() "keywordReq.browse_node = "602320"이 부분을 주석처리 해준 후, 아래 내용의 주석을 해제합니다.
Dim keywordReq As New KeywordRequest() keywordReq.keyword = txtKeyword.Text다음 keywordReq.devtag = "자기가 받은 토큰"으로 설정합니다. 따라서
keywordReq.mode = "magazines" 이 부분을 keywordReq.mode = "books" 으로 바꾸어 줍니다.마지막으로 다음과 같은 부분의 주석을 해제하시고
productsInfo = ws.KeywordSearchRequest(keywordReq)다음을 주석처리 합니다.
"productsInfo = ws.BrowseNodeSearchRequest(keywordReq)그런 다음 실행하시면 네트워크 기사의 내용과 같은 화면을 보실 수 있습니다.
최신 콘텐츠