Преобразование Amazon ProductAdvertisingAPI из v4 в v5 с помощью R - PullRequest
0 голосов
/ 30 апреля 2020

Я обновляю свое приложение с Amazon ProductAdvertising API 4 до 5, используя R. Документация Amazon содержит замечательные примеры на нескольких языках, кроме R. Я ищу помощь в преобразовании кода R из версии 4 в 5. Amazon предлагает блокнот если вы хотите увидеть примеры кода в Java, PHP или cURL. Я пробовал много разных решений, но ошибки от R настолько общие c, что я не знаю, где go дальше. Внизу есть то, что я пробовал.

Продукт API веб-сервисов Amazon 5 в Java и PHP

Вот рабочий код в R для версия 4 вызывает старую версию 2

Также ссылается API продуктов Amazon с R

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)
}

То, что я пробовал, дает относительно общую c ошибку. Я не очень понимаю, как работает POST / GET body и другие методы. Я не знаю, как перевести Java, PHP или cURL в R, поэтому я немного застрял.: * 10101 *

serviceName <- "ProductAdvertisingAPI"
region <-"us-east-1"
host <- "webservices.amazon.com"
uriPath <- paste("/paapi5/",Operation,sep = '')

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\nwebservices.amazon.com/paapi5/getitems\n',
            'AWSAccessKeyId=', curlEscape(AWSAccessKeyId),
            '&AssociateTag=', AssociateTag,
            '&Keywords=', curlEscape(Keywords),
            '&Operation=', curlEscape(Operation),
            '&Responses=', curlEscape(Responses),
            '&Service=', Service,
            sep = '')

## signature test
Signature = curlEscape(base64(hmac( enc2utf8(AWSsecretkey), 
                                    enc2utf8(str), algo = 'sha256', 
                                    serialize = FALSE, raw = TRUE)))  

 AmazonURL <- paste('webservices.amazon.com/paapi5/getitems\n',
                   'AWSAccessKeyId=', AWSAccessKeyId,
                   '&AssociateTag=', AssociateTag,
                   '&Keywords=', Keywords,
                   '&Operation=', Operation,
                   '&Responses=', Responses,
                   '&Service=', Service,
                   '&Signature=', Signature,
                   sep = '')

print(AmazonURL)
AmazonResult <- getURL(AmazonURL)
...