Monday, November 08, 2010 at 12:01 AM.
system.verbs.apps.tumblr.authenticate
on authenticate (email=nil, password=nil, adruserdata=nil) {
<<Changes
<<6/10/09; 4:51:02 PM by DW
<<Got it working.
<<5/14/09; 12:42:34 PM by DW
<<Created.
local (adrdata = tumblr.init (), urllist = string.urlsplit ("http://www.tumblr.com/api/authenticate"));
if adruserdata != nil {
new (tabletype, adruserdata)};
bundle { //set defaults
if email == nil {
email = adrdata^.prefs.email};
if password == nil {
password = adrdata^.prefs.password}};
local (params = "");
bundle { //set up params
on push (name, value) {
params = params + "&" + name + "=" + string.urlencode (value)};
push ("email", email);
push ("password", password);
params = string.delete (params, 1, 1)}; //pop the first &
response = tcp.httpClient ("POST", server:urllist [2], path:urllist [3], data:params, datatype:"application/x-www-form-urlencoded", ctFollowRedirects:3, flMessages:false, debug:false);
local (xmltext = string.httpResultSplit (response), xstruct);
local (code = tcp.httpGetStatusCode (response));
if code != 200 {
scripterror ("Can't access Tumblr because the email address and password are not correct.")};
xml.compile (xmltext, @xstruct);
<<scratchpad.tumblrstruct = xstruct
bundle { //extract info
if adruserdata != nil {
local (adrtumblr = xml.getaddress (@xstruct, "tumblr"));
local (adruser = xml.getaddress (adrtumblr, "user"));
adruserdata^.flCanUploadAiff = boolean (xml.getattributevalue (adruser, "can-upload-aiff"));
adruserdata^.flCanUploadAudio = boolean (xml.getattributevalue (adruser, "can-upload-audio"));
adruserdata^.flCanUploadVideo = boolean (xml.getattributevalue (adruser, "can-upload-video"));
adruserdata^.defaultPostFormat = xml.getattributevalue (adruser, "default-post-format");
adruserdata^.vimeoLoginUrl = xml.getattributevalue (adruser, "vimeo-login-url");
local (adrtumblelog = xml.getaddress (adrtumblr, "tumblelog"));
adruserdata^.avatarUrl = xml.getattributevalue (adrtumblelog, "avatar-url");
adruserdata^.isPrimary = xml.getattributevalue (adrtumblelog, "is-primary");
adruserdata^.name = xml.getattributevalue (adrtumblelog, "name");
adruserdata^.title = xml.getattributevalue (adrtumblelog, "title");
adruserdata^.type = xml.getattributevalue (adrtumblelog, "type");
adruserdata^.url = xml.getattributevalue (adrtumblelog, "url")}}}
<<bundle //test code
<<authenticate (adruserdata:@scratchpad.userdata)
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.