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
+
+
+
+