Monday, November 08, 2010 at 12:01 AM.
system.verbs.apps.posterous.uploadPhoto
on uploadPhoto (f, adrresponse=nil, username="", password="", title="", body="", source="", sourceLink="") {
<<Changes
<<11/20/09; 12:59:06 PM by DW
<<The username and password must be a Twitter username and password. Posterous credentials don't work.
<<http://blog.posterous.com/posterous-api-were-a-direct-replacement-for-t
<<5/11/09; 10:29:36 AM by DW
<<The response table contains a boolean, flerror. If there's an error, we return a code, which is a number, and msg an explanatory string. If there's no error, we return an id, and the url of the picture.
<<5/2/09; 12:02:39 PM by DW
<<Created. Returns true if it worked, false otherwise.
<<http://www.posterous.com/api/twitter
local (adrdata = posterous.init (), apiurl = "http://posterous.com/api/upload");
if adrresponse != nil {
new (tabletype, adrresponse)};
if username == "" {
username = user.twitter.prefs.username};
if password == "" {
password = string (user.twitter.prefs.password)};
if source == "" {
source = "OPML Editor"};
if sourceLink == "" {
sourceLink = "http://editor.opml.org/"};
local (params);
new (tabletype, @params);
params.username = username;
params.password = password;
if title != "" {
params.message = title}
else {
params.message = file.filefrompath (f)};
if source != "" {
params.source = source};
if sourceLink != "" {
params.sourceLink = sourceLink};
local (s = tcp.httpPostMultipart (apiurl, f, "", "", @params, "media"), xstruct);
<<wp.newtextobject (s, @scratchpad.posterousResult)
try {
xml.compile (s, @xstruct);
local (adrrsp = xml.getaddress (@xstruct, "rsp"));
case xml.getattributevalue (adrrsp, "stat") {
"ok" {
if adrresponse != nil {
adrresponse^.id = xml.getvalue (adrrsp, "mediaid");
adrresponse^.url = xml.getvalue (adrrsp, "mediaurl");
adrresponse^.flerror = false};
return (true)};
"fail" {
if adrresponse != nil {
local (adrerr = xml.getaddress (adrrsp, "err"));
adrresponse^.code = number (xml.getattributevalue (adrerr, "code"));
adrresponse^.msg = xml.getattributevalue (adrerr, "msg");
adrresponse^.flerror = true}}}};
return (false)};
bundle { //test code
uploadPhoto ("ohio:light.gif", @scratchpad.response);
edit (@scratchpad.response)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.