Friday, March 11, 2011 at 9:24 AM.

system.verbs.apps.adjix.create

on create (url, partnerEmail=nil, partnerID=nil, customDomain=nil) {
	<<Changes
		<<3/11/11; 8:53:27 AM by DW
			<<Checking and cleanup on customDomain. OK if user specifies it as "r2.ly" or "http://r2.ly/" or many different variants. 
		<<12/21/09; 5:36:25 PM by DW
			<<If Adjix returns an error message, return the original url unshortened. This happens when we pass in the empty string.
		<<8/25/09; 8:17:33 AM by DW
			<<Create a short URL given either an email address or partner ID. If customDomain is non-nil, we'll return a shortened URL using that domain instead of adjix.com.
				<<Docs are here: http://web.adjix.com/AdjixAPI.html
	local (adrdata = adjix.init (), now = clock.now (), apiurl = "http://api.adjix.com/shrinkLink?url=");
	apiurl = apiurl + string.urlencode (url);
	if partnerEmail != nil {
		apiurl = apiurl + "&partnerEmail=" + string.urlencode (partnerEmail)}
	else {
		if partnerID != nil {
			apiurl = apiurl + "&partnerID=" + string.urlencode (partnerID)}};
	if customDomain != nil {
		apiurl = apiurl + "&tokenOnly=y";
		bundle { //clean up customDomain, 3/11/11 by DW
			on getdomainname (s) {
				local (ul);
				try {
					ul = string.urlsplit (s);
					s = ul [2]}
				else {
					try {
						ul = string.urlsplit (s + "/");
						s = ul [2]}};
				return (s)};
			customDomain = "http://" + getdomainname (customDomain) + "/"}};
	try {
		local (s = tcp.httpreadurl (apiurl));
		bundle { //12/21/09 by DW, ugly error checking
			if s beginswith "Invalid Adjix request." {
				return (url)}};
		bundle { //stats
			adrdata^.stats.ctCreates++;
			adrdata^.stats.whenLastCreate = now;
			local (adrday = mainresponder.calendar.getdayaddress (@adrdata^.stats.calendar, now));
			if defined (adrday^.ctCreates) {
				adrday^.ctCreates++}
			else {
				adrday^.ctCreates = 1}};
		if customDomain != nil {
			return (customDomain + s)}
		else {
			return (s)};
		return (s)}
	else {
		adrdata^.stats.ctCreateErrors++;
		adrdata^.stats.whenLastCreateError = now;
		adrdata^.stats.lastCreateError = tryerror;
		scripterror (tryerror)}};
bundle { //test code
	local (url = "http://www.guardian.co.uk/lifeandstyle/2011/mar/06/ask-hadley-john-galliano-antisemitism");
	local (pid = config.radio2.prefs.shortener.partnerid);
	create (url, partnerid:pid);
	
	
	partnerid = config.adjix.prefs.partnerid;
	partneremail = config.adjix.prefs.email;
	partneremail = config.twitterPusher.users.jayrosen_nyu.prefs.adjix.email;
	url = "http://www.scripting.com/stories/2009/08/25/howToGetLessigToBlog.html";
	url = "http://www.scripting.com/stories/2009/08/25/urgentlyNeedAnIntelBuildOf.html";
	url = "http://discuss.flickrfan.org/2009/08/30/0958745.html";
	url = "";
	clipboard.putvalue (create (url, partneremail, customDomain:"http://j.oy.ly/"))}



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.