Amazon webservice

  • Amazon webservice

    Hallo Leute,

    ich habe den code aus dem Buch vom A. Hillegass. Und bekomme als Fehlermeldung das mir einer der Parameter fehlt(AWSAccessKeyId, SubscriptionId.). Ich hab mir aber eine AWS ID zugelegt. Ich benutzte nicht die aus dem Buch. Und trotzdem bekomm ich ein fehler und weiß einfach nicht wo ich suchen soll.

    hier ist der code:


    Quellcode

    1. #import "AppController.h"
    2. #define AWS_ID @"XXXXXXXXXXXXXXXXXXX"
    3. @implementation AppController
    4. - (IBAction)fetchBooks:(id)sender
    5. {
    6. // Show the user that something is going on
    7. [progress startAnimation:nil];
    8. // Put together the request
    9. // See http://www.amazon.com/gp/aws/landing.html
    10. // Get the string and percent-escape for insertion into URL
    11. NSString *input = [searchField stringValue];
    12. NSString *searchString = [input stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
    13. NSLog(@"searchString = %@", searchString);
    14. // Create the URL (Long string broken into several lines is OK)
    15. NSString *urlString = [NSString stringWithFormat:
    16. @"http://ecs.amazonaws.com/onca/xml?"
    17. @"Keywords=%@&"
    18. @"AWSAccessKeyID=%@&"
    19. @"Service=AWSECommerceService&"
    20. @"Operation=ItemSearch&"
    21. @"SearchIndex=Books&"
    22. @"Version=2008-30-10",
    23. searchString, AWS_ID];
    24. NSURL *url = [NSURL URLWithString:urlString];
    25. NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];
    26. // Fetch the XML response
    27. NSData *urlData;
    28. NSURLResponse *response;
    29. NSError *error;
    30. urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
    31. if (!urlData) {
    32. NSAlert *alert = [NSAlert alertWithError:error];
    33. [alert runModal];
    34. return;
    35. }
    36. // Parse the XML response
    37. [doc release];
    38. doc = [[NSXMLDocument alloc] initWithData:urlData options:0 error:&error];
    39. NSLog(@"doc = %@", doc);
    40. if (!doc) {
    41. NSAlert *alert = [NSAlert alertWithError:error];
    42. [alert runModal];
    43. return;
    44. }
    45. [itemNodes release];
    46. itemNodes = [[doc nodesForXPath:@"ItemSearchResponse/Items/Item" error:&error] retain];
    47. if (!itemNodes) {
    48. NSAlert *alert = [NSAlert alertWithError:error];
    49. [alert runModal];
    50. return;
    51. }
    52. // Update the interface
    53. [tableView reloadData];
    54. [progress stopAnimation:nil];
    55. }
    56. /*-(int)numberOfRowsInTableView:(NSTableView*)tv
    57. {
    58. return 0;
    59. } */
    60. - (NSString *)stringForPath:(NSString *)xp ofNode:(NSXMLNode *)n
    61. {
    62. NSError *error;
    63. NSArray *nodes = [n nodesForXPath:xp error:&error];
    64. if (!nodes) {
    65. NSAlert *alert = [NSAlert alertWithError:error];
    66. [alert runModal];
    67. return nil;
    68. }
    69. if ([nodes count] == 0) {
    70. return nil;
    71. } else {
    72. return [[nodes objectAtIndex:0] stringValue];
    73. }
    74. }
    75. #pragma mark TableView data source methods
    76. - (int)numberOfRowsInTableView:(NSTableView *)tv
    77. {
    78. return [itemNodes count];
    79. }
    80. - (id)tableView:(NSTableView *)tv
    81. objectValueForTableColumn:(NSTableColumn *)tableColumn
    82. row:(int)row
    83. {
    84. NSXMLNode *node = [itemNodes objectAtIndex:row];
    85. NSString *xPath = [tableColumn identifier];
    86. return [self stringForPath:xPath ofNode:node];
    87. }
    88. @end
    Alles anzeigen


    Und hier die meldung aus dem Debugger:


    Quellcode

    1. 2008-10-30 20:31:20.402 Amazon[460:10b] searchString = hillegass
    2. 2008-10-30 20:31:22.862 Amazon[460:10b] doc = <?xml version="1.0" encoding="UTF-8"?><ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2008-10-06">
    3. <OperationRequest>
    4. <HTTPHeaders><Header Name="UserAgent" Value="Amazon/1.0 CFNetwork/339.5 Darwin/9.5.0 (i386) (MacBook4,1)"></Header></HTTPHeaders>
    5. <RequestId>1G40KJJ83W2KC7CRYDAE</RequestId>
    6. <Arguments>
    7. <Argument Name="SearchIndex" Value="Books"></Argument>
    8. <Argument Name="Service" Value="AWSECommerceService"></Argument>
    9. <Argument Name="Keywords" Value="hillegass"></Argument>
    10. <Argument Name="Operation" Value="ItemSearch"></Argument>
    11. <Argument Name="AWSAccessKeyID" Value="XXXXXXXXXXXXXXXXX"></Argument>
    12. <Argument Name="Version" Value="2008-30-10"></Argument></Arguments>
    13. <Errors><Error><Code>AWS.MinimumParameterRequirement</Code>
    14. <Message>Your request should have atleast 1 of the following parameters: AWSAccessKeyId, SubscriptionId.
    15. </Message></Error></Errors></OperationRequest></ItemSearchResponse>
    Alles anzeigen


    Ich hoffe ihr könnt einem anfänger helfen :)

    Gruß
    Nikkita
  • In die gleiche Falle bin ich auch getappt, das Problem ist: AWSAccessKeyID. Das ist ein kleiner Tippfehler, denn es die zu übergebene URL-Variable muss AWSAccessKeyId heißen.
    In der Fehlermeldung sieht man auch, dass Amazon den Wert AWSAccessKeyID nicht angenommen hat, sondern AWSAccessKeyId erwartet.

    Hillegas hat für sein Buch eine Errata-Seite eingerichtet: techstra.bignerdranch.com/, hier nachzuschlagen wenn es nicht mehr weitergehen will, hat mir schon ein paar mal geholfen.