wpxmlrpc 0.9.0

wpxmlrpc 0.9.0

TestsTested
LangLanguage Obj-CObjective C
License NOASSERTION
ReleasedLast Release Oct 2020

Maintained by Olivier Halligon, Jorge Bernal, Giovanni Lodi, Aaron Douglas, Jorge Leandro Perez, Matt Bumgardner, Eric Johnson, Eric Johnson, Sérgio Estêvão, Diego Rey Mendez, Ceyhun Ozugur, Jayson Basañes, James Frost, Elisa Budelli, Tanner Stokes, Eduardo Toledo, Stephenie Harris, Cesar Tardaguila, Thuy Copeland, Lorenzo Mattei, Daniele Bogo, Jeremy Massel, Pinar Olguc, Yael Rubinstein, Rachel McRoberts, Jaclyn Chen, Leandro Alonso, Paolo Musolino, Automattic Mobile, Gerardo Pacheco, Brandon Titus, Chip Snyder, Giorgio Ruscigno, Emily Laguna, Stefanos Togoulidis, Paul Von Schrottky, Enej Bajgoric, Antonis Lilis, Ernesto Carrion, Evgeny Shurakov, Wendy Chen, Momo Ozawa, Allen Snook, David Christiandy, Nikola Milicevic, Tony Tahmouch.



wpxmlrpc 0.9.0

  • By
  • Automattic

WordPress XML-RPC Framework

The WordPress XML-RPC library is a lightweight XML-RPC client for iOS and OS X.

It's based on Eric Czarny's Cocoa XML-RPC Framework, but without all the networking code, and a few additions of our own.

Installation

WordPress XML-RPC uses CocoaPods for easy dependency management.

Just add this to your Podfile and run pod install:

pod 'wpxmlrpc'

Another option, if you don't use CocoaPods, is to copy the WPXMLRPC folder to your project.

Usage

WordPress XML-RPC only provides classes to encode and decode XML-RPC. You are free to use your favorite networking library.

Building a XML-RPC request

NSURL *URL = [NSURL URLWithString:@"http://example.com/xmlrpc"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];
[request setHTTPMethod:@"POST"];

WPXMLRPCEncoder *encoder = [[WPXMLRPCEncoder alloc] initWithMethod:@"demo.addTwoNumbers" andParameters:@[@1, @2]];
[request setHTTPBody:[encoder dataEncodedWithError:nil]];

Building a XML-RPC request using streaming

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *guid = [[NSProcessInfo processInfo] globallyUniqueString];
NSString *streamingCacheFilePath = [directory stringByAppendingPathComponent:guid];

NSURL *URL = [NSURL URLWithString:@"http://example.com/xmlrpc"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];
[request setHTTPMethod:@"POST"];

NSInputStream *fileStream = [NSInputStream inputStreamWithFileAtPath:filePath];
WPXMLRPCEncoder *encoder = [[WPXMLRPCEncoder alloc] initWithMethod:@"test.uploadFile" andParameters:@[fileStream]];	      

[encoder encodeToFile:streamingCacheFilePath error:nil];

NSError *error = nil;
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:&error];
unsigned long contentLength = [[attributes objectForKey:NSFileSize] unsignedIntegerValue];
NSInputStream * inputStream = [NSInputStream inputStreamWithFileAtPath:filePath]; 

[request setHTTPBodyStream:inputStream];
[request setValue:[NSString stringWithFormat:@"%lu", contentLength] forHTTPHeaderField:@"Content-Length"];

Parsing a XML-RPC response

NSData *responseData = …
WPXMLRPCDecoder *decoder = [[WPXMLRPCDecoder alloc] initWithData:responseData];
if ([decoder isFault]) {
	NSLog(@"XML-RPC error %@: %@", [decoder faultCode], [decoder faultString]);
} else {
	NSLog(@"XML-RPC response: %@", [decoder object]);
}

Acknowledgments

The Base64 encoder/decoder found in NSData+Base64 is created by Matt Gallagher.

The original Cocoa XML-RPC Framework was developed by Eric Czarny and now lives at github.com/corristo/xmlrpc