Просмотр исходного кода

- add is.gd url shortening script
- make slang.tcl use is.gd shortening for long urls if is.gd script loaded

horgh 16 лет назад
Родитель
Сommit
9716b6b0c3
2 измененных файлов с 45 добавлено и 1 удалено
  1. 26 0
      isgd.tcl
  2. 19 1
      slang.tcl

+ 26 - 0
isgd.tcl

@@ -0,0 +1,26 @@
+#
+# June 26 2010
+# by horgh
+#
+
+package provide isgd 0.1
+
+package require http
+
+namespace eval isgd {
+	variable url http://is.gd/api.php
+}
+
+proc isgd::shorten {url} {
+	set query [http::formatQuery longurl $url]
+	set token [http::geturl ${isgd::url}?${query} -timeout 20000 -method GET]
+	set data [http::data $token]
+	set ncode [http::ncode $token]
+	http::cleanup $token
+
+	if {$ncode != 200} {
+		error "HTTP error ($ncode): $data"
+	}
+
+	return $data
+}

+ 19 - 1
slang.tcl

@@ -8,6 +8,8 @@
 #
 # Must .chanset #channel +ud
 #
+# Uses is.gd to shorten long definition URL if isgd.tcl package present
+#
 
 package require htmlparse
 package require http
@@ -34,6 +36,9 @@ namespace eval ud {
 
 	setudef flag ud
 	bind pub -|- $ud::trigger ud::handler
+
+	# 0 if isgd package is present
+	variable isgd_disabled [catch {package require isgd}]
 }
 
 proc ud::handler {nick uhost hand chan argv} {
@@ -60,7 +65,7 @@ proc ud::handler {nick uhost hand chan argv} {
 	foreach line [ud::split_line $ud::line_length [dict get $result definition]] {
 		if {[incr output] > $ud::max_lines} {
 			if {$ud::show_truncate} {
-				$ud::output_cmd "PRIVMSG $chan :Output truncated. ${ud::url}?[http::formatQuery term $query defid [dict get $result number]]"
+				$ud::output_cmd "PRIVMSG $chan :Output truncated. [ud::def_url $query $result]"
 			}
 			break
 		}
@@ -103,6 +108,19 @@ proc ud::parse {query raw_definition} {
 	return [list number $number definition "$query is $definition"]
 }
 
+proc ud::def_url {query result} {
+	set raw_url ${ud::url}?[http::formatQuery term $query defid [dict get $result number]]
+	if {$ud::isgd_disabled} {
+		return $raw_url
+	} else {
+		if {[catch {isgd::shorten $raw_url} shortened]} {
+			return "$raw_url (is.gd error)"
+		} else {
+			return $shortened
+		}
+	}
+}
+
 # by fedex
 proc ud::split_line {max str} {
 	set last [expr {[string length $str] -1}]