XML-RPC
Brahmanathaswami
brahma at hindu.org
Sun Nov 15 01:57:26 EST 2015
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
More information about the use-livecode
mailing list