XML-RPC

José Antonio Rocha joseantoniorocha at gmail.com
Mon Nov 16 17:05:36 EST 2015


2015-11-15 15:48 GMT-02:00 Peter Haworth <pete at lcsql.com>:

> This looks like the server side of things and I'm
> looking for examples of using the revXMLRPC@ calls from a Livecode desktop
> app.
>

​Here is my getPost WordPress function:

---------------------------
-- GET POST
---------------------------
/*
-- Fields to return (optionals):
string post_id, string post_title, datetime post_date, datetime
post_date_gmt,
datetime post_modified, datetime post_modified_gmt, string post_status,
string post_type, string post_format, string post_name, string post_author,
string post_password, string post_excerpt, string post_content, string
post_parent
string post_mime_type, string link, string guid, int menu_order, string
comment_status,
string ping_status, boolean sticky, struct post_thumbnail [lack support,
yet],
array terms (string term_id, string name, string slug, string term_group,
string term_taxonomy_id, string taxonomy, string description,
string parent, int count ), array custom_fields (id, key, value),
array enclosure (url, length, type)
*/
function wp.getPost pPostID pFieldsA
   global gDebug
   global gServer, gPort, gXmlrpcPath, gProto, gBlogID
   local tID, res, lPostContentA,tMembersNum, tMemberPath, tName
   local tCustomPath, tCustomNum, tCustomStructPath, tTemp, tCustomName,
tCustomValue
   local tTermsPath, tTermsNum, tTermMembersPath, tTermMembersNum, tTermName
   local tTermStructChildPath, tTermValue, tEnclosurePath, tEnclosureName
   local tEnclosureChildPath, tEnclosureValue, tValuePath, tValue

   put revXMLRPC_CreateRequest(gServer, gPort, gXmlrpcPath, gProto) into tID
   revXMLRPC_SetMethod tID, "wp.getPost"
   revXMLRPC_AddParam tID, "int", gBlogID -- this don't select the blog but
is neccessary
   XMLRPC_AddUser tID
   -- Set the post to retrieve
   revXMLRPC_AddParam tID, "int", pPostID
   -- Set optional fields to retrieve
   revXMLRPC_AddParam tID, "array", pFieldsA
   XMLRPC_SetAuthorization tID
   -- Retrieve
   put revXMLRPC_Execute(tID) into res
   //put revXMLText(res) into gDebug ----------------debugging
   revDeleteXMLTree tID
   Err res
   -- Build an array with posts data
   -- This path refers to structure of returned XML
   put revXMLnumberOfChildren(res,
"/methodResponse/params/param/value/struct/","member", 1) into tMembersNum
   repeat with x = 1 to tMembersNum
      put format("/methodResponse/params/param/value/struct/member[%s]/",
x) into tMemberPath
      put revXMLNodeContents(res, (tMemberPath & "name")) into tName
      if tName is "custom_fields" then
         put
format("/methodResponse/params/param/value/struct/member[%s]/value/array/data/",x)
into tCustomPath
         put revxmlnumberofchildren(res, tCustomPath,"value", 1) into
tCustomNum
         repeat with y = 1 to tCustomNum
            put
format("/methodResponse/params/param/value/struct/member[%s]/value/array/data/value[%s]/struct/",
x,y) into tCustomStructPath
            -- Get the fields: "id", "key", "value"
            repeat with z = 1 to 3
               put
format("/methodResponse/params/param/value/struct/member[%s]/value/array/data/value[%s]/struct/member[%s]/",
x,y,z) into tTemp
               put revXMLNodeContents(res, (tTemp & "name")) into
tCustomName
               put revXMLNodeContents(res, (tTemp & "value/string")) into
tCustomValue
               put textDecode(tCustomValue,"UTF-8") into
lPostContentA[tName][y][tCustomName]
            end repeat
         end repeat
         next repeat
      end if
      if tName is "terms" then
         put
format("/methodResponse/params/param/value/struct/member[%s]/value/array/data/",x)
into tTermsPath
         put revxmlnumberofchildren(res, tTermsPath,"value", 1) into
tTermsNum
         repeat with y = 1 to tTermsNum
            put
format("/methodResponse/params/param/value/struct/member[%s]/value/array/data/value[%s]/struct/",
x,y) into tTermMembersPath
            put revxmlnumberofchildren(res, tTermMembersPath,"value", 1)
into tTermMembersNum
            repeat with z = 1 to tTermMembersNum
               put
format("/methodResponse/params/param/value/struct/member[%s]/value/array/data/value[%s]/struct/member[%s]/",
x,y,z) into tTemp
               put revXMLNodeContents(res, (tTemp & "name")) into tTermName
               put revXMLFirstChild(res,(tTemp & "value")) into
tTermStructChildPath
               put revXMLNodeContents(res, tTermStructChildPath) into
tTermValue
               put textDecode(tTermValue,"UTF-8") into
lPostContentA[tName][y][tTermName]
            end repeat
         end repeat
         next repeat
      end if
      -- WP return just one enclosure. It apears in custom fields, too.
      if tName is "enclosure" then
         put
format("/methodResponse/params/param/value/struct/member[%s]/value/struct/",
x) into tEnclosurePath
         -- Get the fields: "url", "length", "type"
         repeat with y = 1 to 3
            put
format("/methodResponse/params/param/value/struct/member[%s]/value/struct/member[%s]/",
x,y) into tTemp
            put revXMLNodeContents(res, (tTemp & "name")) into
tEnclosureName
            if tEnclosureName is not empty and not(tEnclosureName begins
with "xmlerr,") then
               put revXMLFirstChild(res,(tTemp & "value")) into
tEnclosureChildPath
               put revXMLNodeContents(res, tEnclosureChildPath) into
tEnclosureValue
               put textDecode(tEnclosureValue,"UTF-8") into
lPostContentA[tName][tEnclosureName]
            end if
         end repeat
         next repeat
      end if
      -- (TODO: post_thumbnail support)
      -- If is any other field type:
      ---- revXMLFirstChild get any type (string, boolean, array, int, i4,
dateTime.iso8601, struct)
      put revXMLFirstChild(res,(tMemberPath & "value")) into tValuePath
      put revXMLNodeContents(res, tValuePath) into tValue
      put textDecode(tValue,"UTF-8") into lPostContentA[tName]
   end repeat
   return lPostContentA
end wp.getPost
​



-- 
[image: Meira]
------------------------------
nome: "José Antonio Meira da Rocha
<https://plus.google.com/+JoséAntonioMeiradaRocha/>"
email: joseantoniorocha at gmail.com
veículo: [ http://meiradarocha.jor.br ]
fones: [ 55-8448-3866  55-3744-2994 ] 🐊
------------------------------



More information about the use-livecode mailing list