Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 70 additions & 24 deletions MSTranslateVendor/MSTranslateVendor.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ @interface MSTranslateVendor()
NSMutableData *_responseData;
NSMutableURLRequest *_request;
NSString *_elementString;
NSMutableString * elementContents;
NSMutableArray *_attributeCollection;
NSMutableArray *_translatedArray;
NSMutableDictionary *_sentencesDict;
Expand Down Expand Up @@ -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:@"<TranslateArrayRequest>\n\
<AppId />\n\
%@\n\
<Options>\n\
<Category xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />\n\
<ContentType xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\">text/plain</ContentType>\n\
<ReservedFlags xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />\n\
<State xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />\n\
<Uri xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />\n\
<User xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />\n\
</Options>\n\
<Texts> %@ </Texts>\n\
<To>%@</To>\n\
</TranslateArrayRequest>", from?[NSString stringWithFormat:@"<From>%@</From>",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"];

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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