ÎÄÕÂÁбí
 
ÄúÕýÔڲ鿴 "xml-rpc" ·ÖÀàϵÄÎÄÕÂ

2006-11-27 15:12


Õ⼸ÌìÒ»Ö±ÔÚÑо¿XMLRPC¡£×î³õµÄÔ­ÒòÊÇÒòΪdel.icio.usÖ§³ÖÿÈյġ°ÊéÇ©×Ô¶¯·¢²¼µ½Blog¡±¹¦ÄÜ£¬¶øÎÒµÄ533ÉÏÃæÓÐ×Ô¼ºÐ´PHP Blog³ÌÐò£¬ÓÚÊǾÍ×Ô¼ºÁªÏëµ½ÊÇ·ñ¿ÉÒÔÈÃdel.icio.us×Ô¶¯·¢²¼µ½ÄǸöÉÏÃæÈ¥¡£Ò»·½Ãæ¿ÉÒÔ±£´æ×Ô¼ºµÄÊéÇ©£¬ÁíÍ⻹¿ÉÒÔµ±Ã»ÓÐʱ¼äдBlogµÄʱºò£¬¿ÉÒÔ͵ÀÁһϡ£ÕâÑùÒ»¾ÙÁ½µÃµÄʱÆÚ£¬ÎÒÊÇ×îÔ¸Òâ×öµÄ¡£

del.icio.usÖ÷ÒªÀûÓÃmetaWeblog APIÕâ¸öXMLRPC¹æ·¶À´ÊµÏÖBlog×Ô¶¯·¢²¼µÄ£¬ËùÒÔÖ»ÓÐÄãµÄBlog³ÌÐòÖ§³ÖÕâ¸ö½Ó¿Ú£¬Êµ¼ÊÉÏÖ»ÒªÖ§³ÖmetaWeblog.newPostÕâ¸öº¯Êý¾Í¿ÉÒÔÁË¡£

XMLRPC£­PHPÊÇÒ»¸öPHP¿â£¬ËüµÄÌØµãÊǹ¦ÄÜÇ¿´ó£¬¶øÇÒ²»ÐèÒªPHPµÄÔ­ÉúXMLRPCÖ§³Ö£¬Ö»ÐèÒªPHPµÄXML¿â¡£XMLRPC-PHP¶ÔÓÚXMLRPCµÄ¸÷ÖÖÊý¾ÝÀàÐͽøÐÐÁË·â×°£¬²¢ÇÒ×Ô¶¯ÌṩÈçListMethod¡¢GetMethodSig¡¢GetMethodHelpµÈº¯Êý¡£

¼òµ¥µÄÒ»¸öPHPº¯Êý,¼ÆËãÁ½¸öÊýµÄ×ܺͣº

//addFuncµÄSingature£¨Ç©Ãû£©£¬±íÃ÷Æä·µ»ØÀàÐÍÊÇint(µÚÒ»¸ö²ÎÊý£©£¬ºÍ²ÎÊýÀàÐÍ£¨ºóÃæµÄ²ÎÊý£©£»

$addFunc_sig=array(array($xmlrpcInt,$xmlrpcInt,$xmlrpcInt));

//addFuncµÄDoc£¨ËµÃ÷£©

$addFunc_doc='Calucate the sum of Tow Integer,return Integer";

function AddFunc($m){

$a=$m->getParam(0);//×¢ÒâÕâÀï$aÊÇsignatueÀïÃæµÄµÚ¶þ¸ö²ÎÊý

$b=$m->getParam(1);//ÕâÀïµÄ$bÊǵÚÈý¸ö²ÎÊý

$a=$a->scalarValue(); //È¡µÃËûÃǵľßÌåÊýÖµ¡£

$b=$b->scalarValue();

//ÏÂÃæÕâЩ·µ»ØÒ»¸öxmlrpcresp¶ÔÏ󣬶ÔÏóµÄÄÚÈݰüÀ¨Ò»¸öintÀàÐ͵Äval£¨±äÁ¿£©

return new xmlrpcresp(new xmrpcval($a+$b,"int"));

}

//ÏÂÃæÊä³ö£º

$a=array(

"example.addTow"=>array(

"function" => "addFunc",

"signature" => $addFunc_sig,

"docstring" => $addFunc_doc

)

);

//Éú³Éxmlrpc_server±äÁ¿£¬µÚÒ»¸ö²ÎÊýÊÇ·½·¨µÄÊý×é¡£false´ú±íÁ¢¿Ì½øÐзþÎñ¡£

$s=new xmlrpc_server($a,false);

$s->setDebug(3); //3Ϊµ÷ÊԵȼ¶¡£3¿ÉÒԱȽÏÏêϸµÄÊä³ö´íÎóÐÅÏ¢¡£Èç¹ûûÓдíÎóÁË£¬¿ÉÒÔÓÃÈ·Ê¡µÄ1¾Í¿ÉÒÔÁË£¬¾ÍÊÇûÓÐDebugÐÅÏ¢¡£

$s->service(); //¿ªÊ¼·þÎñ¡£

´ÓÉÏÃæÀ´¿´£¬ÓÃXMLRPC£­PHP¿â½¨Á¢XMLRPC³ÌÐòÊǷdz£µÄ¿ìËÙ·½±ã¡£

ÏÂÃæ¼¸¸öÊÇXMLRPCÀïÃæ¼¸¸öÆäËûÊý¾ÝÀàÐ͵ķµ»ØºÍµ÷ÓÃÆäÊýÖµ£º

1¡¢Êý×é±äÁ¿µÄ²éѯºÍ·µ»Ø£¨Õª×ÔXMLRPC£­PHP×Ô´øµÄÀý×Ódemo/server.php)

$bitflipper_sig=array(array($xmlrpcArray, $xmlrpcArray));

$bitflipper_doc='Accepts an array of booleans, and returns them inverted';

function bitflipper($m) {

global $xmlrpcArray;

$v=$m->getParam(0);

$sz=$v->arraysize();

$rv=new xmlrpcval(array(), $xmlrpcArray); //±ØÐëÓÃxmlrpc·½Ê½À´½¨Á¢Êý×é

for($j=0; $j<$sz; $j++) {

$b=$v->arraymem($j); //»ñÈ¡Êý×éÀïÃæµÄSalar

if ($b->scalarval()) { //²é¿´Êý×éÔªËØµÄÖµ

$rv->addScalar(false, "boolean"); //Ïò·µ»ØÊý×éÀïÃæÌí¼ÓSalar

} else {

$rv->addScalar(true, "boolean");

}

}

return new xmlrpcresp($rv); //·µ»ØÊý×é¡£

}

2¡¢Struct±äÁ¿µÄ²éѯºÍ·µ»Ø

µÚÒ»¸ö±äÁ¿µÄ·ÃÎÊÀý×Ó£º

$v1_easyStruct_sig=array(array($xmlrpcInt, $xmlrpcStruct));

$v1_easyStruct_doc='This handler takes a single parameter, a struct, containing at least three elements named moe, larry and curly, all <i4>s. Your handler must add the three numbers and return the result.';

function v1_easyStruct($m) {

$sno=$m->getParam(0);

$moe=$sno->structmem("moe"); //´æÈ¡StructÀïÃæµÄÊýÖµ

$larry=$sno->structmem("larry");

$curly=$sno->structmem("curly");

$num=$moe->scalarval() + $larry->scalarval() + $curly->scalarval();

return new xmlrpcresp(new xmlrpcval($num, "int")); }

µÚ¶þ¸ö·µ»ØStructµÄÀý×Ó£º

$v1_simpleStructReturn_sig=array(array($xmlrpcStruct, $xmlrpcInt)); $v1_simpleStructReturn_doc='This handler takes one parameter, and returns a struct containing three elements, times10, times100 and times1000, the result of multiplying the number by 10, 100 and 1000.';

function v1_simpleStructReturn($m) {

$sno=$m->getParam(0);

$v=$sno->scalarval();

return new xmlrpcresp(new xmlrpcval(array(

"times10" => new xmlrpcval($v*10, "int"),

"times100" => new xmlrpcval($v*100, "int"),

"times1000" => new xmlrpcval($v*1000, "int")),

"struct" )); //·µ»ØÒ»¸öStruct.

}

¿´ÁËÕâЩ£¬Èç¹û¶ÔÓÚXMLRPCЭÒé±È½ÏÊìϤ£¬·¢ÏÖXMLRPC-PHP¶ÔÓÚXMLRPCµÄÖ§³ÖÊǷdz£µÄÍêÉÆµÄ£¡

×îºóÒ»µã£¬Í¬ÆäËûµÄÔ¶³Ìµ÷Óõĵ÷ÊÔÒ»Ñù£¬XMLRPCµÄPHP³ÌÐòµÄµ÷ÊԱȽϵÄÂé·³¡£ÐÒ¿÷xmlrpc-phpµÄÖ÷Ò³ÉÏÃæÌṩÁËÒ»¸öµ÷ÊÔXMLRPCµÄºÃµØ·½£¬Äã¿ÉÒÔ´ÓÕâÀï·ÃÎÊ¡£

×îÖ÷Òª°Ñ"show debug info"ÏÔʾµ÷µ½¡°More¡±£¬ÕâÑù¿ÉÒԷdz£ÈÝÒ×µÄÕÒµ½³ö´íÔ­Òò¡£

ÁíÍâÒ»µã£¬Èç¹ûÏë²âÊÔÒ»¸ö¶«Î÷£¬×îºÃ´Ó×î¼òµ¥µÄ¶«Î÷¿ªÊ¼£¬ÆäʵÎÞÂÛÊÇHelloWorld»¹ÊÇaddTwo¶¼ÊÇÒ»¸ö·Ç³£ºÃµÄÆðµã£¬Èç¹ûËûÃdzɹ¦ÁË£¬±íʾÄãµÄ³ÌÐòµÄ»ù´¡ÉèÖÃÊÇûÓÐÎÊÌâ¡£Èç¹ûºÍÎÒÒ»Ñù£¬ÂíÉϾÍдһ¸ö±È½Ï¸´ÔӵijÌÐòÀ´²âÊÔÒ»¸öÐÂÊÂÎÈç¹û²âÊÔ²»³É¹¦£¬µ½µ×ÊDzâÊÔ³ÌÐò±¾ÉíµÄ´íÎó»¹ÊÇ»ù´¡ÉèÖõĴíÎ󣬾ÍÏñһͷÂÒÂéÒ»Ñù£¬·Ö²»Çå³þÍ·Ð÷£¬ÕÒ²»µ½·½ÏòÁË¡£µ±È»Ò»¸ö±È½ÏºÃµÄµ÷ÊÔϵͳ£¬¿ÉÒԷdz£Çå³þÏÔʾÔËÐйý³Ì£¬¾ÍÌ«ºÃÁË¡£

Ã÷ÌìÔÙдÈçºÎÈÃÎÒµÄPHP Blog³ÌÐòÄܹ»½ÓÊÜDel.icio.usµÄ·¢²¼£¬Ò²Ð´Ò»ÏÂÈçºÎµ÷ÓÃLiveSpaceµÄMetaWeblog½Ó¿Ú¡£

 
2006-11-25 15:07

MetaWeblog APIÖÐÎÄ˵Ã÷

1¡¢Ê²Ã´ÊÇMetaWeblog£¿

MetaWebBlog API£¨MWA£©ÊÇÒ»¸öBlog³ÌÐò½Ó¿Ú±ê×¼£¬ÔÊÐíÍⲿ³ÌÐòÀ´»ñÈ¡»òÕßÉèÖÃBlogµÄÎÄ×ÖºÍÊìϤ¡£Ëû½¨Á¢ÔÚXMLRPC½Ó¿ÚÖ®ÉÏ£¬²¢ÇÒÒѾ­ÓÐÁ˺ܶàµÄʵÏÖ¡£

2¡¢»ù±¾µÄº¯Êý¹æ·¶

ÓÐÈý¸ö»ù±¾µÄº¯Êý¹æ·¶£º

metaWeblog.newPost (blogid, username, password, struct, publish) ·µ»ØÒ»¸ö×Ö·û´®£¬¿ÉÄÜÊÇBlogµÄID¡£



metaWeblog.editPost (postid, username, password, struct, publish) ·µ»ØÒ»¸öBooleanÖµ£¬´ú±íÊÇ·ñÐ޸ijɹ¦¡£



metaWeblog.getPost (postid, username, password) ·µ»ØÒ»¸öStruct¡£

ÆäÖÐblogid¡¢username¡¢password·Ö±ð´ú±íBlogµÄid£¨×¢ÊÍ£ºÈç¹ûÄãÓÐÁ½¸öBlog£¬blogidÖ¸¶¨ÄãÐèÒª±à¼­µÄblog£©¡¢Óû§ÃûºÍÃÜÂë¡£

structµÄº¬Ò⣺

ÔÚnewPostºÍeditPostÖУ¬structÊÇÒ»¸öRSS 2.0¹æ·¶ÖÐ<item>ÀïÃæµÄ¶¨Òå¡£<item>µÄ¶¨ÒåÈçÏ£º

ÔªËØ ˵Ã÷ Àý×Ó
title The title of the item. Venice Film Festival Tries to Quit Sinking
link The URL of the item. http://nytimes.com/2004/12/07FEST.html
description The item synopsis. Some of the most heated chatter at the Venice Film Festival this week was about the way that the arrival of the stars at the Palazzo del Cinema was being staged.
author Email address of the author of the item
category Includes the item in one or more categories
comments URL of a page for comments relating to the item
enclosure Describes a media object that is attached to the item
guid A string that uniquely identifies the item.
pubDate Indicates when the item was published.
source The RSS channel that the item came from.


ÆäÖÐ×îÖ÷ÒªµÄÈý¸öÔªËØÊÇtitle¡¢linkºÍdescription¡£Èç¹ûBlog¹¤¾ß²»Ö§³ÖtitleºÍlink£¬description¾ÍÊÇĿ¼£¨Content£©¡£categoryÊÇÒ»¸öÊý×飬ÊÇÕâ¸öPostËùÊôµÄÀà±ð¡£Èç¹ûÀà±ð²»´æÔÚ£¬·þÎñÆ÷¶Ë½«Ö»´¦Àí´æÔÚµÄÀà±ð¡£

3¡¢metaWeblog.newMediaObject



metaWeblog.newMediaObject (blogid, username, password, struct) ·µ»ØÒ»¸öÊý×é

ÆäÖÐblogid¡¢username¡¢password·Ö±ð´ú±íBlogµÄid£¨×¢ÊÍ£ºÈç¹ûÄãÓÐÁ½¸öBlog£¬blogidÖ¸¶¨ÄãÐèÒª±à¼­µÄblog£©¡¢Óû§ÃûºÍÃÜÂë¡£struct±ØÐë°üº¬name, type ºÍbitsÈý¸öÔªËØ£¬µ±È»Ò²¿ÉÒÔ°üº¬ÆäËûÔªËØ¡£

name´ú±íÊý¾ÝµÄÃû³Æ£¬typeÊÇÊý¾ÝµÄMIMEÀàÐÍ£¬Æ©Èçaudio/mpeg ¡¢image/jpegºÍvideo/quicktime¡£bitsÊÇÊý¾ÝµÄbase64±àÂëÐÎʽµÄÊý¾ÝÁ÷¡£

Èç¹ûµ÷ÓÃʧ°Ü£¬ËüÏÔʾ´íÎóÐÅÏ¢¡£Èç¹ûµ÷Óóɹ¦£¬·µ»ØÖµÊÇÒ»¸öStruct£¬ÀïÃæÖÁÉÙ°üº¬Ò»¸öUrlÔªËØ£¬´ú±íÊý¾ÝµÄHTTP»òÕßFTP Url¡£

4¡¢metaWeblog.getCategories

metaWeblog.getCategories (blogid, username, password) ·µ»ØÒ»¸östruct¡£

·µ»ØÖµ°üº¬ËùÓеÄBlogµÄÀà±ð£¬Ã¿Ò»¸öÁбð°üº¬description, htmlUrl and rssUrl¡£

5¡¢metaWeblog.getRecentPosts



metaWeblog.getRecentPosts (blogid, username, password, numberOfPosts) ·µ»ØÒ»¸ö½á¹¹£¨struct£©µÄÊý×飨array£©¡£

ÿһ¸öStruct°üº¬getPost·µ»ØÖµÒ»ÑùµÄ½á¹¹¡£

numberOfPostsÊÇ·µ»ØµÄÊýÁ¿¡£

6¡¢µ÷ÓÃÑéÖ¤ºÍ´íÎóÏÔʾ

ͬBlogger API²»Í¬µÄÊÇ£¬metaWeblogûÓÐAPPKEYÕâ¸ö¸ÅÄÄã¿ÉÒÔ×Ô¼ºÉèÖá£

ͬʱ½¨ÒéʹÓñê×¼µÄXMLRPC FaultÀ´ÏÔʾ´íÎó¡£





 
2006-11-24 10:23
xmlrpc



xmlrpcÊÇÒ»¸ö»ùÓÚInternetµÄÔ¶³Ì¹ý³Ìµ÷ÓÃЭÒé¡£

ËüÖ÷Ҫͨ¹ýÏûÏ¢£¨Message£©µ÷Óù¤×÷£¬»ùÓÚHTTP-POST,MessageµÄBody²¿·ÖÊÇXML¸ñʽ£¬Í¬Ñùµ±½á¹û·µ»ØµÄʱºòÒ²ÊÇXML¸ñʽ¡£¹ý³ÌµÄ²ÎÊý¿ÉÒÔÊÇ»ù±¾±äÁ¿£¨Scalar£©£¬»¹¿ÉÒÔÊÇÒ»¸ö½á¹¹(struct)»òÕßÊÇÒ»¸öÊý×é(array)¡£



Ò»¸öµ÷ÓÃʵÀý£º

POST /RPC2 HTTP/1.0

User-Agent: Frontier/5.1.2 (WinNT)

Host: betty.userland.com

Content-Type: text/xml

Content-length: 181



<?xml version="1.0"?>

<methodCall>

<methodName>examples.getStateName</methodName>

<params>

<param>

<value><i4>41</i4></value>

</param>

</params>

</methodCall>



µ÷ÓÃÍ·²¿ËµÃ÷

User-AgentºÍHostÊDZØÐëµÄ¡£

Content-TypeÊÇtext/xml.

Content-Length±ØÐëÌṩ£¬¶øÇÒ±ØÐëÊÇÕýÈ·µÄ£¡



Body²¿·Ö˵Ã÷£º

Ê×ÏÈ¿ÉÒÔ¿´µ½ÊÇÒ»¸öXML¸ñʽµÄÎı¾¡£Ö÷Ì岿·ÖÊÇÒ»¸ömethodCallÔªËØ£¬°üº¬×Å·½·¨Ãû³Æ£¨MethodName£©¼°Æäµ÷ÓòÎÊý£¨params£©¡£

<param>µÄ<value>²¿·Ö£¬XMLPRCÖ§³ÖµÄÀàÐÍÓÐÏÂÁм¸ÖÖ£º

1¡¢±äÁ¿£¨Scalar£©<value>ÀàÐÍ£º

<value>ÀïÃæ¿ÉÒÔ°üº¬µÄÀàÐÍÓУ»

ÀàÐÍ ËµÃ÷ ʵÀý

<i4>»òÕß<int> ÕûÊý £­12

<boolean> 0£¨false),1(true)

<string> ×Ö·û´® hello world

<double> ¸¡µãÊý -12.123

<dateTime.iso8601> ʱ¼ä 19980717T14:08:55

<base64> base64±àÂë eW91IGNhbid0IHJlYWQgdGhpcyE=

ȱʡÀàÐÍÊÇstring.

2¡¢<struct>s

<struct>ÀàÐͰüº¬Èô¸É¸ö<member>£¬Ã¿Ò»¸ö<member>°üº¬<name>ºÍ<value>.

ʵÀý£º

<struct>

<member>

<name>lowerBound</name>

<value><i4>18</i4></value>

</member>

<member>

<name>upperBound</name>

<value><i4>139</i4></value>

</member>

</struct>

3¡¢<array>s

<array>°üº¬Èô¸É¸ö<data>£¬Ã¿Ò»¸ö<data>¿ÉÒÔ°üº¬Èô¸É¸ö<value>¡£

ʵÀý£º

<array>

<data>

<value><i4>12</i4></value>

<value><string>Egypt</string></value>

<value><boolean>0</boolean></value>

<value><i4>-31</i4></value>

</data>

</array>



XMLRPCµÄ»ù±¾ÀàÐ;ÍÊÇÉÏÃæÕâЩ¡£



Ò»¸öÏìÓ¦µÄÀý×Ó£º

HTTP/1.1 200 OK

Connection: close

Content-Length: 158

Content-Type: text/xml

Date: Fri, 17 Jul 1998 19:55:08 GMT

Server: UserLand Frontier/5.1.2-WinNT



<?xml version="1.0"?>

<methodResponse>

<params>

<param>

<value><string>South Dakota</string></value>

</param>

</params>

</methodResponse>



Àý×Ó˵Ã÷£º

1¡¢Èç¹ûµ÷Óóɹ¦£º

·µ»Ø±ØÐëÊÇ200 OK£»

Content-TypeÊÇtext/xml.

Content-LengthÒ²ÊDZØÐëµÄ£¬¶øÇÒ±ØÐëÊÇÕýÈ·µÄ£¡

Ö÷Ì岿·ÖÊÇÒ»¸ömethodResponseÔªËØ£¬°üº¬×Å·µ»Ø²ÎÊý£¨params£©¼°ÆäÀàÐÍ¡£

2¡¢Èç¹ûµ÷Óò»³É¹¦

Ö÷Ì岿·ÖÊÇÒ»¸ömethodResponseÔªËØ,°üº¬×ÅÒ»¸ö<fault>¼°ÆäÔ­Òò<value>£¬Ô­ÒòÊÇÒ»¸ö<struct>£¬ÀïÃæ°üº¬´íÎóºÅ(faultCode)ºÍ´íÎóÔ­Òò(faultString)¡£

Æ©È磺

HTTP/1.1 200 OK

Connection: close

Content-Length: 426

Content-Type: text/xml

Date: Fri, 17 Jul 1998 19:55:02 GMT

Server: UserLand Frontier/5.1.2-WinNT



<?xml version="1.0"?>

<methodResponse>

<fault>

<value>

<struct>

<member>

<name>faultCode</name>

<value><int>4</int></value>

</member>

<member>

<name>faultString</name>

<value><string>Too many parameters.</string></value>

</member>

</struct>

</value>

</fault>

</methodResponse>

3¡¢paramsºÍfault²»ÄÜͬʱ´æÔÚ¡£







 
 
   
 
 
ÎÄÕ´浵
 
     
 
×îÐÂÎÄÕÂÆÀÂÛ
  

дµÄÒ»¶ÑÀ¬»ø£¬»¹Ã°³ä¸ßÊÖ£¬
 

ÄãºÃ£¬ÇëÎÊÄãÖªµÀ °Ù¶È¿Õ¼ä²©¿ÍµÄMetaWeblog APIÂð£¿
 
 
 
   
°ïÖúÖÐÐÄ | ¿Õ¼ä¿Í·þ | Í¶ËßÖÐÐÄ | ¿Õ¼äЭÒé
©2012 Baidu