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