masakih

BooksExporter

  • R/O
  • HTTP
  • SSH
  • HTTPS

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

iSightを使ってBooklog,MediaMarkerインポート用CSVファイルを生成するアプリ


ファイル情報

Rev. deec2c46d1e4b89d37ea473242737695cab87712
サイズ 3,442 バイト
日時 2012-03-25 16:55:28
作者 masakih
ログメッセージ

[Mod] PPCサポートをやめた

内容

//
//  AmaonLookup.m
//  BarcodeScanner
//
//  Created by Hori,Masaki on 11/02/27.
//  Copyright 2011 masakih. All rights reserved.
//

#import "BEAmazonLookup.h"
#import "BEBookInformation.h"

#import "BEAmazonRequestGenerator.h"

NSXMLElement *firstElementForName(NSXMLElement *parent, NSString *name)
{
	NSArray *children = [parent elementsForName:name];
	if(!children || [children count] == 0) return nil;
	return [children objectAtIndex:0];
}

NSString* deodeURIComponent(NSString* s) {
	return [((NSString*)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault,
																				(CFStringRef)s,
																				NULL,
																				kCFStringEncodingUTF8)) autorelease];
}

@implementation BEAmazonLookup
static BEAmazonLookup *sharedInstance = nil;

+ (BEAmazonLookup *)sharedInstance
{
	if (sharedInstance == nil) {
		sharedInstance = [[super allocWithZone:NULL] init];
	}
    return sharedInstance;
}

+ (id)allocWithZone:(NSZone *)zone
{
    return [[self sharedInstance] retain];
}

- (id)copyWithZone:(NSZone *)zone
{
    return self;
}

- (id)retain
{
    return self;
}

- (NSUInteger)retainCount
{
    return NSUIntegerMax;  //denotes an object that cannot be released
}

- (void)release
{
    //do nothing
}

- (id)autorelease
{
    return self;
}


- (void)parseError:(NSXMLElement *)items
{
	id request = firstElementForName(items, @"Request");
	id errors = firstElementForName(request, @"Errors");
	id error = firstElementForName(errors, @"Error");
	if(error) {
		NSLog(@"%@", error);
		NSBeep();
	}
}

- (void)lookupBook:(BEBookInformation *)book
{
	BEAmazonRequestGenerator *generator = [BEAmazonRequestGenerator generatorWithBook:book];	
	NSURLRequest *req = [generator request];
	NSURLResponse *response = nil;
	NSError *error = nil;
	NSData *data = [NSURLConnection sendSynchronousRequest:req
										 returningResponse:&response
													 error:&error];
	if(!data) {
		NSString *errorString = @"";
		if(error) {
			errorString = [error localizedDescription];
		}
		NSLog(@"##### ERROR ####\nResponse -> %@\n%@", response, errorString);
		return;
	}
		
	NSXMLDocument *xml = [[[NSXMLDocument alloc] initWithData:data
													  options:0
														error:&error] autorelease];
//	NSData *xmlData = [xml XMLDataWithOptions:NSXMLNodePrettyPrint];
//	NSString *xmlString = [[[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding] autorelease];	
//	NSLog(@"result -> \n%@", xmlString);
	
	NSXMLElement *root = [xml rootElement];
	
	id items = firstElementForName(root, @"Items");
	id item = firstElementForName(items, @"Item");
	if(!item) {
		[self parseError:items];
		return;
	}
	
	id asin = firstElementForName(item, @"ASIN");
	book.asin = [asin objectValue];
	
	id itemAttrs = firstElementForName(item, @"ItemAttributes");
	id title = firstElementForName(itemAttrs, @"Title");
	book.title = [title objectValue];
	id amazonISBN = firstElementForName(itemAttrs, @"ISBN");
	book.amazonISBN = [amazonISBN objectValue];
	id author = firstElementForName(itemAttrs, @"Author");
	book.author = [author objectValue];
	id manufacturer = firstElementForName(itemAttrs, @"Manufacturer");
	book.manufacturer = [manufacturer objectValue];
	id publicationDate = firstElementForName(itemAttrs, @"PublicationDate");
	book.publicationDate = [publicationDate objectValue];
}

- (void)lookupBooks:(NSArray *)books
{
	for(id book in books) {
		[self lookupBook:book];
	}
}

@end