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.