Mercurial > hg > egg-tcls
view feeds.tcl @ 461:721a56cd62e3
fetch_weather: Cleanups.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 18 Dec 2017 14:41:51 +0200 |
parents | 5edaebbbb7f2 |
children | 4b6ae9765903 |
line wrap: on
line source
########################################################################## # # FeedCheck v1.1 by Matti 'ccr' Hamalainen <ccr@tnsp.org> # (C) Copyright 2008-2017 Tecnic Software productions (TNSP) # # Requires fetch_feeds.tcl to be run as a cronjob, for example # 15 * * * * /absolute/path/to/fetch_feeds.tcl # # See also create_feeds_db.tcl OR convert_feeds_db.tcl, as you will # need to either create a SQLite3 database or convert old text flat # file to SQLite3. # # This script is freely distributable under GNU GPL (version 2) license. # ########################################################################## ### The configuration should be in config.feeds in same directory ### as this script. Or change the line below to point where ever ### you wish. See "config.feeds.example" for an example config file. source [file dirname [info script]]/config.feeds ### Required utillib.tcl source [file dirname [info script]]/utillib.tcl ########################################################################## # No need to look below this line ########################################################################## package require sqlite3 set feeds_name "FeedCheck" set feeds_message "$feeds_name v1.1 by ccr/TNSP" putlog "$feeds_message" bind pub - !feeds feeds_pubfetch bind pub - !last feeds_publast # ------------------------------------------------------------------------ proc feeds_smsg {uchan umsg} { global feeds_preferredmsg putserv "$feeds_preferredmsg $uchan :$umsg" } proc feeds_log {umsg} { global feeds_name putlog "$feeds_name: $umsg" } proc feeds_msg {utime ufeed uurl utitle} { global feeds_channels foreach {uchan ufilter} [array get feeds_channels] { foreach umatch [split $ufilter "|"] { if {[string match -nocase $umatch $ufeed]} { feeds_smsg "$uchan" "$ufeed: \002$utitle\002 -- $uurl" } } } } ### Open database, etc if {[catch {sqlite3 feeds_dbh $feeds_dbfile} uerrmsg]} { puts "Could not open SQLite3 database '$feeds_dbfile': $uerrmsg." exit 2 } # ------------------------------------------------------------------------ proc feeds_check_start {} { global feeds_dbfile set oldtime 0 if {![catch {set ufile [open "$feeds_dbfile.time" r 0600]} uerrmsg]} { gets $ufile oldtime close $ufile } else { feeds_log "Could not open timefile: $uerrmsg" set oldtime [clock seconds] } return $oldtime } proc feeds_check_end {} { global feeds_dbfile if {![catch {set ufile [open "$feeds_dbfile.time" w 0600]} uerrmsg]} { puts $ufile [clock seconds] close $ufile } } # ------------------------------------------------------------------------ proc feeds_exec {} { global feeds_dbh feeds_check_period feeds_running feeds_sync_limit # feeds_log "Timed feed check." set oldtime [feeds_check_start] set usql "SELECT feed AS ufeed, title AS utitle, url AS uurl, utime AS utime FROM feeds WHERE utime > $oldtime ORDER BY utime ASC" set nresult [feeds_dbh onecolumn "SELECT COUNT(*) FROM feeds WHERE utime > $oldtime"] if {$nresult > $feeds_sync_limit} { feeds_log "$nresult new entries, probably unsynchronized. Ignoring." } else { feeds_log "$nresult new entries since $oldtime ( [utl_ctime $oldtime] ) .." feeds_dbh eval $usql { feeds_msg $utime $ufeed $uurl $utitle } } if {$nresult > 0} { feeds_check_end } set feeds_running [clock seconds] timer $feeds_check_period feeds_exec } if {[info exists feeds_running]} { set feeds_last [expr [clock seconds] - $feeds_running] } else { set feeds_last -1 } if {$feeds_last < 0 || $feeds_last > [expr $feeds_check_period * 60]} { feeds_log "Starting timed feed check." feeds_exec } # ------------------------------------------------------------------------ proc feeds_pubfetch {unick uhost uhand uchan utext} { global feeds_dbh feeds_sync_limit # feeds_log "Manual check invoked on $uchan." set oldtime [feeds_check_start] set nresult [feeds_dbh onecolumn "SELECT COUNT(*) FROM feeds WHERE utime > $oldtime"] if {$nresult > 0} { feeds_check_end if {$nresult > $feeds_sync_limit} { feeds_smsg $uchan "$nresult uutta, tod. näk. epäsynkissä. Ignoorataan." } else { set usql "SELECT feed AS ufeed, title AS utitle, url AS uurl, utime AS utime FROM feeds WHERE utime > $oldtime ORDER BY utime ASC" feeds_dbh eval $usql { feeds_msg $utime $ufeed $uurl $utitle set found 1 } feeds_smsg $uchan "$nresult uutta." } } else { feeds_smsg $uchan "Ei uusia." } } # ------------------------------------------------------------------------ proc feeds_publast {unick uhost uhand uchan utext} { global feeds_dbh set ufound 0 set usql "SELECT url AS uurl, feed AS ufeed, title AS utitle, utime AS utime FROM feeds WHERE feed LIKE '%[string tolower [utl_escape $utext]]%' ORDER BY utime DESC LIMIT 1" feeds_dbh eval $usql { feeds_smsg $uchan "Uusin '$ufeed' / [utl_ctime $utime]: $utitle -- $uurl" set ufound 1 } if {$ufound == 0} { feeds_smsg $uchan "Ei osumia haulla '$utext'." } }