diff --git a/MSTranslateVendor/MSTranslateVendor.m b/MSTranslateVendor/MSTranslateVendor.m index b939865..eca517d 100644 --- a/MSTranslateVendor/MSTranslateVendor.m +++ b/MSTranslateVendor/MSTranslateVendor.m @@ -18,6 +18,7 @@ @interface MSTranslateVendor() NSMutableData *_responseData; NSMutableURLRequest *_request; NSString *_elementString; + NSMutableString * elementContents; NSMutableArray *_attributeCollection; NSMutableArray *_translatedArray; NSMutableDictionary *_sentencesDict; @@ -149,37 +150,63 @@ - (void)requestTranslateArray:(NSArray *)translateArray _request = [[NSMutableURLRequest alloc] init]; NSString *_appId = [NSString stringWithFormat:@"Bearer %@", (!_accessToken)?[MSTranslateAccessTokenRequester sharedRequester].accessToken:_accessToken]; - - NSMutableString *schemaCollection = [@"" mutableCopy]; + + NSXMLElement *root = [[NSXMLElement alloc] initWithName:@"TranslateArrayRequest"]; + [root addChild: [NSXMLElement elementWithName: @"AppId"]]; + + if(0 != from.length) + { + NSXMLElement * fromElement = [NSXMLElement elementWithName: @"From" stringValue: from]; + [root addChild: fromElement]; + } // End of from length + + NSXMLElement * optionsNode = [NSXMLElement elementWithName: @"Options"]; + + NSXMLElement * categoryNode = [NSXMLElement elementWithName: @"Category"]; + [categoryNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]]; + [optionsNode addChild: categoryNode]; + + NSXMLElement * contentTypeNode = [NSXMLElement elementWithName: @"ContentType" stringValue: @"text/plain"]; + [contentTypeNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]]; + [optionsNode addChild: contentTypeNode]; + + NSXMLElement * reservedFlagsNode = [NSXMLElement elementWithName: @"ReservedFlags"]; + [reservedFlagsNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]]; + [optionsNode addChild: reservedFlagsNode]; + + NSXMLElement * stateNode = [NSXMLElement elementWithName: @"State"]; + [stateNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]]; + [optionsNode addChild: stateNode]; + + NSXMLElement * uriNode = [NSXMLElement elementWithName: @"Uri"]; + [uriNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]]; + [optionsNode addChild: uriNode]; + + NSXMLElement * userNode = [NSXMLElement elementWithName: @"User"]; + [userNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2"]]; + [optionsNode addChild: userNode]; + + [root addChild: optionsNode]; + + NSXMLElement * textsNode = [NSXMLElement elementWithName: @"Texts"]; for (NSString *text in translateArray) { - [schemaCollection appendFormat:@"%@\n", generateSchema(text)]; - } + NSXMLElement * stringNode = [NSXMLElement elementWithName: @"string" stringValue: text]; + [stringNode addAttribute: [NSXMLNode attributeWithName: @"xmlns" stringValue: @"http://schemas.microsoft.com/2003/10/Serialization/Arrays"]]; + [textsNode addChild: stringNode]; + } // End of for loop - NSString *xmlString = [NSString stringWithFormat:@"\n\ - \n\ - %@\n\ - \n\ - \n\ - text/plain\n\ - \n\ - \n\ - \n\ - \n\ - \n\ - %@ \n\ - %@\n\ - ", from?[NSString stringWithFormat:@"%@",from]:@"", schemaCollection, to]; - - NSError *error = NULL; - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\s{2,}" options:0 error:&error]; - NSString *result = [regex stringByReplacingMatchesInString:xmlString options:0 range:NSMakeRange(0, [xmlString length]) withTemplate:@" "]; + [root addChild: textsNode]; + [root addChild: [NSXMLElement elementWithName: @"To" stringValue: to]]; + + NSXMLDocument *xmlRequest = [NSXMLDocument documentWithRootElement: root]; + NSData * xmlData = [xmlRequest XMLDataWithOptions: NSXMLNodePrettyPrint]; NSURL *requestURL = [NSURL URLWithString:@"http://api.microsofttranslator.com/v2/Http.svc/TranslateArray"]; [_request setURL:[requestURL standardizedURL]]; [_request setHTTPMethod:@"POST"]; - [_request setHTTPBody:[result dataUsingEncoding:NSUTF8StringEncoding]]; + [_request setHTTPBody: xmlData]; [_request setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"]; [_request setValue:_appId forHTTPHeaderField:@"Authorization"]; @@ -384,6 +411,14 @@ - (void)parserDidEndDocument:(NSXMLParser *)parser - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { _elementString = [elementName copy]; + + if(parser.tag == REQUEST_TRANSLATE_ARRAY_TAG) + { + if([elementName isEqualToString:@"TranslatedText"]) + { + elementContents = [NSMutableString string]; + } + } } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string @@ -420,7 +455,7 @@ - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if([_elementString isEqualToString:@"TranslatedText"]) { - [_translatedArray addObject:string]; + [elementContents appendString: string]; } } else if(parser.tag == REQUEST_DETECT_TEXT_TAG) @@ -461,4 +496,15 @@ - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string } } +- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName +{ + if(parser.tag == REQUEST_TRANSLATE_ARRAY_TAG) + { + if([elementName isEqualToString:@"TranslatedText"]) + { + [_translatedArray addObject: [elementContents copy]]; + } + } // End of translated +} + @end \ No newline at end of file