Index: openacs-4/packages/lars-blogger/lars-blogger.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lars-blogger/lars-blogger.info,v diff -u -N -r1.29 -r1.30 --- openacs-4/packages/lars-blogger/lars-blogger.info 14 Dec 2003 13:27:14 -0000 1.29 +++ openacs-4/packages/lars-blogger/lars-blogger.info 14 Dec 2003 16:26:26 -0000 1.30 @@ -39,6 +39,11 @@ + + + + + Index: openacs-4/packages/lars-blogger/sql/postgresql/lars-blogger-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lars-blogger/sql/postgresql/lars-blogger-create.sql,v diff -u -N -r1.12 -r1.13 --- openacs-4/packages/lars-blogger/sql/postgresql/lars-blogger-create.sql 14 Dec 2003 13:02:37 -0000 1.12 +++ openacs-4/packages/lars-blogger/sql/postgresql/lars-blogger-create.sql 14 Dec 2003 16:26:26 -0000 1.13 @@ -94,6 +94,18 @@ primary key(package_id, ping_url) ); +-- Cache for the Technorati API calls +create table weblogger_technorati_cache ( + package_id integer + constraint weblogger_ping_urls_package_id_fk + references apm_packages(package_id) + on delete cascade, + name varchar(500), + url varchar(500), + creation_date timestamptz + default now() +); + \i lars-blogger-pb.sql \i rss-register.sql Index: openacs-4/packages/lars-blogger/sql/postgresql/lars-blogger-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lars-blogger/sql/postgresql/lars-blogger-drop.sql,v diff -u -N -r1.7 -r1.8 --- openacs-4/packages/lars-blogger/sql/postgresql/lars-blogger-drop.sql 14 Dec 2003 13:02:37 -0000 1.7 +++ openacs-4/packages/lars-blogger/sql/postgresql/lars-blogger-drop.sql 14 Dec 2003 16:26:26 -0000 1.8 @@ -35,6 +35,7 @@ drop function weblogger_channel__delete (integer); +drop table weblogger_technorati_cache; drop table weblogger_ping_urls; drop table weblogger_channels; Index: openacs-4/packages/lars-blogger/sql/postgresql/upgrade/upgrade-1.0a3-1.0a4.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lars-blogger/sql/postgresql/upgrade/Attic/upgrade-1.0a3-1.0a4.sql,v diff -u -N -r1.5 -r1.6 --- openacs-4/packages/lars-blogger/sql/postgresql/upgrade/upgrade-1.0a3-1.0a4.sql 14 Dec 2003 13:02:38 -0000 1.5 +++ openacs-4/packages/lars-blogger/sql/postgresql/upgrade/upgrade-1.0a3-1.0a4.sql 14 Dec 2003 16:26:26 -0000 1.6 @@ -191,3 +191,16 @@ return v_entry_id; end; ' language 'plpgsql'; + +-- Cache for the Technorati API calls +create table weblogger_technorati_cache ( + package_id integer + constraint weblogger_ping_urls_package_id_fk + references apm_packages(package_id) + on delete cascade, + name varchar(500), + url varchar(500), + creation_date timestamptz + default now() +); + Index: openacs-4/packages/lars-blogger/tcl/technorati-init.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lars-blogger/tcl/technorati-init.tcl,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/lars-blogger/tcl/technorati-init.tcl 14 Dec 2003 16:26:26 -0000 1.1 @@ -0,0 +1,4 @@ +# Schedule a job that fetches Technorati for all weblogs +ad_schedule_proc \ + -thread t \ + 1200 lars_blogger::technorati::scheduled_job \ No newline at end of file Index: openacs-4/packages/lars-blogger/tcl/technorati-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lars-blogger/tcl/technorati-procs.tcl,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/lars-blogger/tcl/technorati-procs.tcl 14 Dec 2003 16:26:26 -0000 1.1 @@ -0,0 +1,180 @@ + +ad_library { + Procs for interfacing the Technorati API. + + @author Guan Yang (guan@unicast.org) + @creation-date 2003-12-14 +} + +namespace eval lars_blogger {} +namespace eval lars_blogger::technorati {} + +ad_proc -private lars_blogger::technorati::scheduled_job { } { + Calls lars_blogger::technorati::populate_cache for all + lars-blogger instances. + + @author Guan Yang (guan@unicast.org) + + @return Empty string +} { + set instances [db_list blogger_instances ""] + + foreach instance $instances { + lars_blogger::technorati::populate_cache -package_id $instance + } + + return "" +} + +ad_proc -private lars_blogger::technorati::populate_cache { + -package_id +} { + Attempts to fill the Technorati cache if Technorati API support + is enabled for the package. + + @author Guan Yang (guan@unicast.org) + + @return Nothing, even if there's an error. +} { + if { ![info exists package_id] } { + set package_id [ad_conn package_id] + } + + set enabled_p [parameter::get \ + -parameter TechnoratiApiEnabledP \ + -default 0 \ + -boolean \ + -package_id $package_id] + + if { !$enabled_p } { + ns_log Debug "lars_blogger::technorati::populate_cache: Technorati API not enabled (parameter=$enabled_p)" + return "" + } + + catch { + set items [lars_blogger::technorati::parse_xml \ + -package_id $package_id] + + ns_log Debug "lars_blogger::technorati::populate_cache: [llength $items] items fetched" + + db_transaction { + db_dml flush_cache "" + + foreach item_array $items { + array set item $item_array + set name $item(name) + set url $item(url) + db_dml cache_insert "" + } + } + } errmsg + + ns_log Debug "lars_blogger::technorati::populate_cache: error = $errmsg" + + return "" +} + +ad_proc -private lars_blogger::technorati::parse_xml { + -package_id +} { + Use tDOM to parse the XML file for this package and return + an array structure. + + @author Guan Yang (guan@unicast.org) + + @return Special array data structure with the information + from the Technorati XML file, error on failure +} { + package require tdom + + if { ![info exists package_id] } { + set package_id [ad_conn package_id] + } + + if { [catch { + set xml [lars_blogger::technorati::fetch_xml -package_id $package_id] + } errmsg] } { + error "fetch_xml error: $errmsg" + } + + if { [catch { + set doc [dom parse $xml] + + set root [$doc documentElement] + set root_name [$root nodeName] + if { ![string equal $root_name "tapi"] } { + error "Root element is not tapi" + } + + set item_nodes [$root selectNodes "document/item"] + + set items [list] + + # Let's go through each item node and parse it + set i 0 + foreach item_node $item_nodes { + set weblog_node [$item_node selectNodes "weblog"] + if { [llength $weblog_node] != 1 } { + error "Item $i lacks a weblog child" + } + + set name_node [$weblog_node selectNodes "name"] + set item(name) [$name_node text] + + set url_node [$weblog_node selectNodes "url"] + set item(url) [$url_node text] + + lappend items [array get item] + + incr i + } + } errmsg] } { + error "dom parse error: $errmsg" + } else { + return $items + } +} + +ad_proc -private lars_blogger::technorati::fetch_xml { + -package_id +} { + Fetches the raw XML sources from the Technorati API. + + @author Guan Yang (guan@unicast.org) + + @return The XML source. Throws an error on failure. +} { + if { ![info exists package_id] } { + set package_id [ad_conn package_id] + } + + #http://api.technorati.com/cosmos?key=d61454cf50000971a9da5d8bed3cfff2&url=http://unicast.org/&type=weblog&version=0.9 + + set key [parameter::get \ + -package_id $package_id \ + -default "" \ + -parameter TechnoratiApiKey] + set url [parameter::get \ + -package_id $package_id \ + -default "" \ + -parameter TechnoratiApiUrl] + set type "weblog" + set version "0.9" + + if { [string equal $key ""] } { + error "No Technorati API key available" + } + + if { [string equal $url ""] } { + set url "[ad_url][lars_blog_public_package_url]" + } + + set api_url "http://api.technorati.com/cosmos?[export_vars -url [list key url type version]]" + + array set f [ad_httpget -url $api_url -timeout 60] + if { [string equal $f(status) "200"] } { + return $f(page) + } else { + error "ad_httpget error" + } +} \ No newline at end of file Index: openacs-4/packages/lars-blogger/tcl/technorati-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lars-blogger/tcl/technorati-procs.xql,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/lars-blogger/tcl/technorati-procs.xql 14 Dec 2003 16:26:26 -0000 1.1 @@ -0,0 +1,32 @@ + + + + + + delete from weblogger_technorati_cache + where package_id = :package_id + + + + + + insert into weblogger_technorati_cache ( + package_id, + name, + url + ) values ( + :package_id, + :name, + :url + ) + + + + + + select package_id + from apm_packages + where package_key = 'lars-blogger' + + + Index: openacs-4/packages/lars-blogger/www/index.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lars-blogger/www/index.adp,v diff -u -N -r1.25 -r1.26 --- openacs-4/packages/lars-blogger/www/index.adp 14 Dec 2003 13:27:15 -0000 1.25 +++ openacs-4/packages/lars-blogger/www/index.adp 14 Dec 2003 16:25:02 -0000 1.26 @@ -90,6 +90,13 @@ + +
+

Technorati Blogs

+ +
+
+