Amazon Product API with R

前端 未结 5 1706
孤独总比滥情好
孤独总比滥情好 2020-12-05 20:22

I would like to use R to send requests to the Amazon Product API service.

Is there a way to authenticate and query the Amazon Product API with R without getting the

5条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-05 20:46

    Try this

    This should perform a search using the Product Advertising API, which I think you mean.

    You need to supply the AWSAccessKeyId and AWSsecretkey,

    which can be acquired on: http://docs.amazonwebservices.com/AWSECommerceService/2011-08-01/GSG/

    search.amazon <- function(Keywords, SearchIndex = 'All', AWSAccessKeyId, AWSsecretkey, AssociateTag, ResponseGroup = 'Small', Operation = 'ItemSearch'){
         library(digest)
         library(RCurl)
    
     base.html.string <- "http://ecs.amazonaws.com/onca/xml?"
     SearchIndex <- match.arg(SearchIndex, c('All',
                                                 'Apparel',
                                                 'Appliances',
                                                 'ArtsAndCrafts',
                                                 'Automotive',
                                                 'Baby',
                                                 'Beauty',
                                                 'Blended',
                                                 'Books',
                                                 'Classical',
                                                 'DigitalMusic',
                                                 'DVD',
                                                 'Electronics',
                                                 'ForeignBooks',
                                                 'Garden',
                                                 'GourmetFood',
                                                 'Grocery',
                                                 'HealthPersonalCare',
                                                 'Hobbies',
                                                 'HomeGarden',
                                                 'HomeImprovement',
                                                 'Industrial',
                                                 'Jewelry',
                                                 'KindleStore',
                                                 'Kitchen',
                                                 'Lighting',
                                                 'Magazines',
                                                 'Marketplace',
                                                 'Miscellaneous',
                                                 'MobileApps',
                                                 'MP3Downloads',
                                                 'Music',
                                                 'MusicalInstruments',
                                                 'MusicTracks',
                                                 'OfficeProducts',
                                                 'OutdoorLiving',
                                                 'Outlet',
                                                 'PCHardware',
                                                 'PetSupplies',
                                                 'Photo',
                                                 'Shoes',
                                                 'Software',
                                                 'SoftwareVideoGames',
                                                 'SportingGoods',
                                                 'Tools',
                                                 'Toys',
                                                 'UnboxVideo',
                                                 'VHS',
                                                 'Video',
                                                 'VideoGames',
                                                 'Watches',
                                                 'Wireless',
                                                 'WirelessAccessories'))
     Operation <- match.arg(Operation, c('ItemSearch',
                                                 'ItemLookup',
                                                 'BrowseNodeLookup',
                                                 'CartAdd',
                                                 'CartClear',
                                                 'CartCreate',
                                                 'CartGet',
                                                 'CartModify',
                                                 'SimilarityLookup'))
     ResponseGroup <- match.arg(ResponseGroup, c('Accessories',
                                                 'AlternateVersions',
                                                 'BrowseNodeInfo',
                                                 'BrowseNodes',
                                                 'Cart',
                                                 'CartNewReleases',
                                                 'CartTopSellers',
                                                 'CartSimilarities',
                                                 'Collections',
                                                 'EditorialReview',
                                                 'Images',
                                                 'ItemAttributes',
                                                 'ItemIds',
                                                 'Large',
                                                 'Medium',
                                                 'MostGifted',
                                                 'MostWishedFor',
                                                 'NewReleases',
                                                 'OfferFull',
                                                 'OfferListings',
                                                 'Offers',
                                                 'OfferSummary',
                                                 'PromotionSummary',
                                                 'RelatedItems',
                                                 'Request',
                                                 'Reviews',
                                                 'SalesRank',
                                                 'SearchBins',
                                                 'Similarities',
                                                 'Small',
                                                 'TopSellers',
                                                 'Tracks',
                                                 'Variations',
                                                 'VariationImages',
                                                 'VariationMatrix',
                                                 'VariationOffers',
                                                 'VariationSummary'),
                                several.ok = TRUE)
     version.request = '2011-08-01'
     Service = 'AWSECommerceService'
     if(!is.character(AWSsecretkey)){
      message('The AWSsecretkey should be entered as a character vect, ie be qouted')
     }
    
     pb.txt <- Sys.time()
    
     pb.date <- as.POSIXct(pb.txt, tz = Sys.timezone)
    
     Timestamp = strtrim(format(pb.date, tz = "GMT", usetz = TRUE, "%Y-%m-%dT%H:%M:%S.000Z"), 24)
    
     str = paste('GET\necs.amazonaws.com\n/onca/xml\n',
            'AWSAccessKeyId=', curlEscape(AWSAccessKeyId),
                 '&AssociateTag=', AssociateTag,
                 '&Keywords=', curlEscape(Keywords),
                 '&Operation=', curlEscape(Operation),
                 '&ResponseGroup=', curlEscape(ResponseGroup),
                 '&SearchIndex=', curlEscape(SearchIndex),
                 '&Service=AWSECommerceService',
                 '&Timestamp=', gsub('%2E','.',gsub('%2D', '-', curlEscape(Timestamp))),
                 '&Version=', version.request,
                 sep = '')
    
     ## signature test
     Signature = curlEscape(base64(hmac( enc2utf8((AWSsecretkey)), enc2utf8(str1), algo = 'sha256', serialize = FALSE,  raw = TRUE)))
    
     AmazonURL <- paste(base.html.string,
                 'AWSAccessKeyId=', AWSAccessKeyId,
                 '&AssociateTag=', AssociateTag,
                 '&Keywords=', Keywords,
                 '&Operation=',Operation,
                 '&ResponseGroup=',ResponseGroup,
                 '&SearchIndex=', SearchIndex,
                 '&Service=AWSECommerceService',
                 '&Timestamp=', Timestamp,
                 '&Version=', version.request,
                 '&Signature=', Signature
                 sep = '')
     AmazonResult <- getURL(AmazonURL)
     return(AmazonResult)
    }
    

    The URL which we get from running this code wont give a signature address. To get a signature address use the following web address and paste the URL over there and click on Display Signed URL.

    http://associates-amazon.s3.amazonaws.com/signed-requests/helper/index.html

提交回复
热议问题