XML-RPC

Peter Haworth pete at lcsql.com
Sun Nov 15 12:48:29 EST 2015


Thanks Bramanathaswami.  This looks like the server side of things and I'm
looking for examples of using the revXMLRPC@ calls from a Livecode desktop
app.  I'm communication with a third party server and have all the docs for
the methods it accepts and their parameters.

Pete
lcSQL Software <http://www.lcsql.com>
Home of lcStackBrowser <http://www.lcsql.com/lcstackbrowser.html> and
SQLiteAdmin <http://www.lcsql.com/sqliteadmin.html>

On Sat, Nov 14, 2015 at 10:57 PM, Brahmanathaswami <brahma at hindu.org> wrote:

> FYI: RevIgniter has an XML-RPC library... (hmmm, or maybe it was Andre's
> library)
>
> Anyway... we use that to have a page on our web site "talk" to Word Press
> (get posts)
>
> perhaps this helps... you would need to see that library... I will send it
> to you off line...
>
> We don't (or do we?) have a web space yet for sharing stuff like this with
> the community?)
>
> Of course, XML-RPC is "how" and not "what"
>
> ...obviously...
>
> if the server expects a screwdriver,
> you can't send him a hammer.
>
> So what you see below is WordPress specific.
> Things like "wp.getPosts" are pre-defined -- and can be found in the Word
> Press docs
>
> I wrote the "baby talk" parsers.. Andre wrote the wp Functions
>
>
>
> <?rev
> put gBASEPATH into gBASEPATH
>
> if gBASEPATH is "gBASEPATH" then
>     put "No direct script access allowed."
>     exit to top
> end if
>
> # LOGGING
> rigLogMessage "debug", "Wordpress XML-RPC Library Loaded"
>
> # DECLARE LOCAL VARIABLES
>
> # PROTOTYPE OF THE FOLLOWING HANDLER NAME: rigRunInitialLibrarynameConfig
> command rigRunInitialwpConfig
>     --Run initial configuration procedures. Don't remove this handler,
> even if it does nothing.'
>     rigLoadLibrary "arraytools"
>     rigLoadLibrary "xmlrpc"
> end rigRunInitialwpConfig
>
> --> Wordpress Suite
>
> function wpGetUsersBlogs pUser, pPassword
>     return callXMLRPC("wp.getUsersBlogs", pUser, pPassword)
> end wpGetUsersBlogs
>
> function wpGetPosts pBlogID, pUser, pPassword, pFilterA
>     return callXMLRPC("wp.getPosts", pBlogID, pUser, pPassword)
> end wpGetPosts
>
> # First parse for a galleria post; get 1st pix and 1st caption from the
> var data
> # then pick the <p> content at the end if there is any.
>
>
> function parseForImage pContent
>         If pContent contains "var data" then # it is a galleria slideshow
>           put     line ( lineOffset ("image:",pContent) ) of pContent into
> tImagePath
>           set the itemdel to "/"
>           delete item 1 of tImagePath
>           replace "'," with "" in tImagePath
>           put "/" before tImagePath
>           return  tImagePath
>           else
>                replace "=" with cr in pContent
>                replace "alt" with cr in pContent
>                replace "<br" with (cr &"<br") in pContent
>                replace "<br /" with "" in pContent
>                replace ">" with cr in pContent
>                replace quote with "" in pContent
>                repeat for each line x in pContent
>                   if x contains ".jpg"  then
>                      put x into tImagePath
>                     exit repeat
>                   end if
>               end repeat
>           return  tImagePath
>         end if
> end parseForImage
>
> function parseForCaption pContent
>         If pContent contains "var data" then # dig for the first
> description. It could be empty that's OK.
>           # get the line number of the first image closing JSON:
>           put  lineOffset ("},",pContent) into tEndOfFirstImage
>           # test for "description" in two possible lines
>           if (line tEndOfFirstImage of pContent contains "description:")
> or (line (tEndOfFirstImage-1) of pContent contains "description:")  then
>           put     line ( lineOffset ("description:",pContent) ) of
> pContent into tCaption
>           set the itemdel to "'"
>           delete item 1 of tCaption
>           replace "'," with "" in tCaption
>           if char -1 of tCaption ="'" then delete char -1 of tCaption
>           replace "\" with "" in tCaption      # undo escaped JSON chars
>           return  tCaption
>           end if
>         end if
>         # we don't parse any other type of post for a caption for an
> image... it's too complicated and variable.
> end parseForCaption
>
> function parseForStory pContent
>  if  ( (pContent contains "var data") OR (pContent contains "iframe" ) )
> then
>      # We have a slideshow or a web app in an iFrame. We can't show these
> on the home page
>     # dig for any <p> section, otherwise skip it completely
>         if pContent contains "<p>" then
>             put     (offset ("<p>",pContent) + 3) into tStartText
>             put     (offset ("</p>",pContent)-1) into tEndText
>             put char tStartText to tEndText of pContent into tStory
>             put word 1 to 60 of tStory into tStory
>             put "..." after tStory
>             return  tStory
>         end if
>           else
>           # assume this is a iPhone Apps WP post and it is plain HTML with
> breaks and tags
>              replace "=" with cr in pContent
>                replace "alt" with cr in pContent
>                replace "<br" with (cr &"<br") in pContent
>                replace "<br /" with "" in pContent
>                replace ">" with cr in pContent
>                   replace quote with "" in pContent
>                repeat for each line x in pContent
>                     if (x contains ".jpg") then next repeat
>                     if (x contains "/") then next repeat
>                     if (x contains "class") then next repeat
>                     if (x contains "<") then next repeat
>                   put x & cr after tText
>                end repeat
>                repeat for each line y in tText
>                   if len(y) > 3 then put y & " " after tStory
>                end repeat
>                    return tStory
>          end if
> end parseForStory
>
> function wpGetLastPosts pBlogID, pUser, pPassword
>     put wpGetPosts(sWordpressBlogID,
> sWordpressUsername,sWordpressPassword) into tA
>     put the keys of
> tA["methodResponse"]["params"]["param"]["value"]["array"]["data"] into tList
>     replace "value[" with empty in tList
>     replace "]" with empty in tList
>     sort tList numeric ascending
>     put 1 into k
>     repeat for each line x in tList
>         put "value["&x&"]" into tPost
>         put
> tA["methodResponse"]["params"]["param"]["value"]["array"]["data"][tPost]["struct"]["member[3]"]["value"]["dateTime.iso8601"]
> into tTemp
>
>           -- AG: Comparing the date with the actual date, do not show
> anything from the future
>           -- BR: 2015/1/28 updated to include the time.
>
>         # extract the time
>         set the itemdel to "T"
>         put item 2 of tTemp into tISOTime
>
>         put char 1 to 4 of tTemp into tYear
>         put char 5 to 6 of tTemp into tMonth
>         put char 7 to 8 of tTemp into tDate
>
>         # push to a LiveCode format
>         put (tYear , tMonth , tDate,0,0,0,0) into tPostDate
>         put tPostDate into tPostDateInSeconds
>         convert tPostDate to long internet date # save for a readable time
> stamp later
>
>         # get a Livecode time string and swap in the time from Post time
>         convert tPostDateInSeconds to internet date
>         put tISOTime into word 5 of tPostDateInSeconds
>
>
>         convert tPostDateInSeconds to seconds
>         put the date && the time into tCurrentDateInSeconds
>         convert tCurrentDateInSeconds to seconds
>
>         if (tPostDateInSeconds > tCurrentDateInSeconds) then
>             next repeat
>         end if
>
>         -- post is not from the future, continue processing
>         put word 1 to 4 of tPostDate into tRetValA[k]["date"]
>         put (tYear & "-" & tMonth & "-" & tDate) into
> tRetValA[k]["timestamp"]
>
>         put
> tA["methodResponse"]["params"]["param"]["value"]["array"]["data"][tPost]["struct"]["member[16]"]["value"]["string"]
> into tRetValA[k]["link"]
>         put
> tA["methodResponse"]["params"]["param"]["value"]["array"]["data"][tPost]["struct"]["member[2]"]["value"]["string"]
> into tRetValA[k]["title"]
>         put
> tA["methodResponse"]["params"]["param"]["value"]["array"]["data"][tPost]["struct"]["member[13]"]["value"]["string"]
> into pContent
>         --put parseContent(pContent) into tRetValA[k]["content"]
>         put parseForImage(pContent) into tRetValA[k]["image"]
>         put parseForCaption(pContent) into tRetValA[k]["caption"]
>         put parseForStory(pContent) into tRetValA[k]["story"]
>         --put "<br /><br />" & tTemp after tRetValA[k]["story"]
>         add 1 to k
>     end repeat
>     --logArrayData tRetValA
>     return tRetValA
> end wpGetLastPosts
>
>
>
>
> --
> Swasti Astu, Be Well!
> Brahmanathaswami
>
> Kauai's Hindu Monastery
> www.HimalayanAcademy.com
>
>
>
> Peter Haworth wrote:
>
>> Starting on a project to have an LC client talk to a server using XML-RPC.
>> I see various functions in the dictionary but are there any
>> lessons/examples out there?
>>
>> Pete
>> lcSQL Software<http://www.lcsql.com>
>> Home of lcStackBrowser<http://www.lcsql.com/lcstackbrowser.html>  and
>> SQLiteAdmin<http://www.lcsql.com/sqliteadmin.html>
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
>>
>
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>



More information about the use-livecode mailing list