Monday, November 08, 2010 at 12:01 AM.

system.verbs.apps.tinyUrl.create

on create (longUrl, flUrlEncode=false) {
	<<Changes
		<<3/7/08; 3:01:18 PM by DW
			<<Major rewrite, using little-known feature of the TinyUrl API.
			<<Got the scoop from Dan MacTough -- you can call tinyurl.com using POST, and it doesn't have a problem with URL-encoding in that case.
				<<http://blogs.opml.org/yabfog/2008/02/06#tinyurlApiBug
			<<The second parameter, flUrlEncode, is still there to maintain backward compatibility, but it is ignored in all cases.
		<<1/28/08; 10:28:55 AM by DW
			<<Make the url-encoding optional, it doesn't (appear to) work with tinyurl.com.
		<<1/8/08; 7:22:10 PM by DW
			<<URL-encode the long url, this makes it work for addresses with a parameter list.
		<<10/26/07; 5:11:26 PM by DW
			<<Remove whitespace.
		<<10/26/07; 12:58:20 PM by DW
			<<Allow configuration in user.tinyUrl table.
		<<6/27/07; 11:08:57 AM by DW
			<<Created. A wonderfully simple API.
				<<http://www.scripting.com/stories/2007/06/27/tinyurlHasAnApi.html
	bundle { //init
		if not defined (user.tinyUrl) {
			new (tabletype, @user.tinyUrl)};
		if not defined (user.tinyUrl.server) {
			user.tinyUrl.server = "tinyurl.com"};
		if defined (user.tinyUrl.path) { //3/7/08 by DW
			if user.tinyUrl.path == "/create?url=" {
				<<it's the old path, the one that works with GET method, 
				delete (@user.tinyUrl.path)}};
		if not defined (user.tinyUrl.path) {
			user.tinyUrl.path = "/api-create.php"}};
	<<if flUrlEncode
		<<longUrl = string.urlencode (longUrl)
	local (s);
	bundle { //make the HTTP request, put result into "s"
		s = tcp.httpclient ("POST", server:user.tinyUrl.server, path:user.tinyUrl.path, datatype:"application/x-www-form-urlencoded", data:"url="+longUrl, flMessages:false)};
	return (string.trimwhitespace (string.httpResultSplit (s)))};
bundle { //test code
	local (url = "http://www.scripting.com/stories/2007/06/27/tinyurlHasAnApi.html");
	url = "http://blogs.opml.org/yabfog/2008/02/06#tinyurlApiBug";
	url = "http://www.scripting.com/2008/02.html#theSimplestPodcastApiEver";
	url = "http://www.scripting.com/2008/02.html#debatingHealthCareIn2008";
	url = "http://blogs.zdnet.com/BTL/?p=3115";
	webbrowser.openurl (create (url))}



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.