Mercurial > hg > egg-tcls
annotate feeds.tcl @ 534:7512889f7b72
feeds: Cosmetics.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 07 Jul 2020 14:40:45 +0300 |
parents | eb9921ae5c7a |
children | c6f389bef58e |
rev | line source |
---|---|
70 | 1 ########################################################################## |
0 | 2 # |
425
e5810c52d376
Bump some copyright years and versions.
Matti Hamalainen <ccr@tnsp.org>
parents:
424
diff
changeset
|
3 # FeedCheck v1.1 by Matti 'ccr' Hamalainen <ccr@tnsp.org> |
523 | 4 # (C) Copyright 2008-2020 Tecnic Software productions (TNSP) |
0 | 5 # |
265
908edc54005a
feeds: Move configuration to separate file.
Matti Hamalainen <ccr@tnsp.org>
parents:
226
diff
changeset
|
6 # Requires fetch_feeds.tcl to be run as a cronjob, for example |
908edc54005a
feeds: Move configuration to separate file.
Matti Hamalainen <ccr@tnsp.org>
parents:
226
diff
changeset
|
7 # 15 * * * * /absolute/path/to/fetch_feeds.tcl |
0 | 8 # |
145 | 9 # See also create_feeds_db.tcl OR convert_feeds_db.tcl, as you will |
10 # need to either create a SQLite3 database or convert old text flat | |
11 # file to SQLite3. | |
12 # | |
0 | 13 # This script is freely distributable under GNU GPL (version 2) license. |
14 # | |
70 | 15 ########################################################################## |
0 | 16 |
265
908edc54005a
feeds: Move configuration to separate file.
Matti Hamalainen <ccr@tnsp.org>
parents:
226
diff
changeset
|
17 ### The configuration should be in config.feeds in same directory |
908edc54005a
feeds: Move configuration to separate file.
Matti Hamalainen <ccr@tnsp.org>
parents:
226
diff
changeset
|
18 ### as this script. Or change the line below to point where ever |
908edc54005a
feeds: Move configuration to separate file.
Matti Hamalainen <ccr@tnsp.org>
parents:
226
diff
changeset
|
19 ### you wish. See "config.feeds.example" for an example config file. |
908edc54005a
feeds: Move configuration to separate file.
Matti Hamalainen <ccr@tnsp.org>
parents:
226
diff
changeset
|
20 source [file dirname [info script]]/config.feeds |
0 | 21 |
422
880a07485275
Add utl_ctime() to utillib and use it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
393
diff
changeset
|
22 ### Required utillib.tcl |
880a07485275
Add utl_ctime() to utillib and use it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
393
diff
changeset
|
23 source [file dirname [info script]]/utillib.tcl |
880a07485275
Add utl_ctime() to utillib and use it elsewhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
393
diff
changeset
|
24 |
0 | 25 |
70 | 26 ########################################################################## |
0 | 27 # No need to look below this line |
70 | 28 ########################################################################## |
423
44c9128097cd
feeds: Remember to require sqlite3 package.
Matti Hamalainen <ccr@tnsp.org>
parents:
422
diff
changeset
|
29 package require sqlite3 |
44c9128097cd
feeds: Remember to require sqlite3 package.
Matti Hamalainen <ccr@tnsp.org>
parents:
422
diff
changeset
|
30 |
0 | 31 set feeds_name "FeedCheck" |
425
e5810c52d376
Bump some copyright years and versions.
Matti Hamalainen <ccr@tnsp.org>
parents:
424
diff
changeset
|
32 set feeds_message "$feeds_name v1.1 by ccr/TNSP" |
0 | 33 |
34 putlog "$feeds_message" | |
35 bind pub - !feeds feeds_pubfetch | |
36 bind pub - !last feeds_publast | |
522
4b6ae9765903
feeds: Add !latest command bind alias.
Matti Hamalainen <ccr@tnsp.org>
parents:
435
diff
changeset
|
37 bind pub - !latest feeds_publast |
0 | 38 |
39 | |
70 | 40 # ------------------------------------------------------------------------ |
0 | 41 proc feeds_smsg {uchan umsg} { |
42 global feeds_preferredmsg | |
43 putserv "$feeds_preferredmsg $uchan :$umsg" | |
44 } | |
45 | |
534 | 46 |
0 | 47 proc feeds_log {umsg} { |
526
eb9921ae5c7a
feeds: Add feeds_logmsg setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
523
diff
changeset
|
48 global feeds_logmsg feeds_name |
eb9921ae5c7a
feeds: Add feeds_logmsg setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
523
diff
changeset
|
49 if {$feeds_logmsg != 0} { |
eb9921ae5c7a
feeds: Add feeds_logmsg setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
523
diff
changeset
|
50 putlog "$feeds_name: $umsg" |
eb9921ae5c7a
feeds: Add feeds_logmsg setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
523
diff
changeset
|
51 } |
0 | 52 } |
53 | |
534 | 54 |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
55 proc feeds_msg {utime ufeed uurl utitle} { |
0 | 56 global feeds_channels |
57 foreach {uchan ufilter} [array get feeds_channels] { | |
143 | 58 foreach umatch [split $ufilter "|"] { |
59 if {[string match -nocase $umatch $ufeed]} { | |
226
0ff78e418e77
feeds: Don't add # to channel names automatically.
Matti Hamalainen <ccr@tnsp.org>
parents:
154
diff
changeset
|
60 feeds_smsg "$uchan" "$ufeed: \002$utitle\002 -- $uurl" |
0 | 61 } |
62 } | |
63 } | |
64 } | |
65 | |
66 | |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
67 ### Open database, etc |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
68 if {[catch {sqlite3 feeds_dbh $feeds_dbfile} uerrmsg]} { |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
69 puts "Could not open SQLite3 database '$feeds_dbfile': $uerrmsg." |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
70 exit 2 |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
71 } |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
72 |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
73 |
70 | 74 # ------------------------------------------------------------------------ |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
75 proc feeds_check_start {} { |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
76 global feeds_dbfile |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
77 |
0 | 78 set oldtime 0 |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
79 if {![catch {set ufile [open "$feeds_dbfile.time" r 0600]} uerrmsg]} { |
0 | 80 gets $ufile oldtime |
81 close $ufile | |
82 } else { | |
83 feeds_log "Could not open timefile: $uerrmsg" | |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
84 set oldtime [clock seconds] |
0 | 85 } |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
86 |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
87 return $oldtime |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
88 } |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
89 |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
90 |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
91 proc feeds_check_end {} { |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
92 global feeds_dbfile |
424
825cac46b1cb
Cosmetic / stray trailing whitespace cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
423
diff
changeset
|
93 |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
94 if {![catch {set ufile [open "$feeds_dbfile.time" w 0600]} uerrmsg]} { |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
95 puts $ufile [clock seconds] |
0 | 96 close $ufile |
97 } | |
98 } | |
99 | |
534 | 100 |
70 | 101 # ------------------------------------------------------------------------ |
0 | 102 proc feeds_exec {} { |
351
0f55bbb7fea3
feeds: Improve safety checks and add new configuration setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
323
diff
changeset
|
103 global feeds_dbh feeds_check_period feeds_running feeds_sync_limit |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
104 |
146
7106dd8db4de
Improve entity parsing, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
145
diff
changeset
|
105 # feeds_log "Timed feed check." |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
106 set oldtime [feeds_check_start] |
142 | 107 set usql "SELECT feed AS ufeed, title AS utitle, url AS uurl, utime AS utime FROM feeds WHERE utime > $oldtime ORDER BY utime ASC" |
351
0f55bbb7fea3
feeds: Improve safety checks and add new configuration setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
323
diff
changeset
|
108 set nresult [feeds_dbh onecolumn "SELECT COUNT(*) FROM feeds WHERE utime > $oldtime"] |
424
825cac46b1cb
Cosmetic / stray trailing whitespace cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
423
diff
changeset
|
109 |
361
299cdd79b7ee
feeds: Fix some limit checks.
Matti Hamalainen <ccr@tnsp.org>
parents:
351
diff
changeset
|
110 if {$nresult > $feeds_sync_limit} { |
534 | 111 feeds_log "${nresult} new entries, probably unsynchronized. Ignoring." |
351
0f55bbb7fea3
feeds: Improve safety checks and add new configuration setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
323
diff
changeset
|
112 } else { |
534 | 113 feeds_log "${nresult} new entries since ${oldtime} ( [utl_ctime $oldtime] ) .." |
351
0f55bbb7fea3
feeds: Improve safety checks and add new configuration setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
323
diff
changeset
|
114 feeds_dbh eval $usql { |
0f55bbb7fea3
feeds: Improve safety checks and add new configuration setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
323
diff
changeset
|
115 feeds_msg $utime $ufeed $uurl $utitle |
0f55bbb7fea3
feeds: Improve safety checks and add new configuration setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
323
diff
changeset
|
116 } |
0 | 117 } |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
118 |
351
0f55bbb7fea3
feeds: Improve safety checks and add new configuration setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
323
diff
changeset
|
119 if {$nresult > 0} { |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
120 feeds_check_end |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
121 } |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
122 |
144 | 123 set feeds_running [clock seconds] |
124 timer $feeds_check_period feeds_exec | |
0 | 125 } |
126 | |
146
7106dd8db4de
Improve entity parsing, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
145
diff
changeset
|
127 |
144 | 128 if {[info exists feeds_running]} { |
129 set feeds_last [expr [clock seconds] - $feeds_running] | |
130 } else { | |
131 set feeds_last -1 | |
132 } | |
133 | |
134 if {$feeds_last < 0 || $feeds_last > [expr $feeds_check_period * 60]} { | |
0 | 135 feeds_log "Starting timed feed check." |
154
7a549487fba3
feeds: Cleanups, minor bugfix in feed update checking.
Matti Hamalainen <ccr@tnsp.org>
parents:
146
diff
changeset
|
136 feeds_exec |
0 | 137 } |
138 | |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
139 |
70 | 140 # ------------------------------------------------------------------------ |
0 | 141 proc feeds_pubfetch {unick uhost uhand uchan utext} { |
351
0f55bbb7fea3
feeds: Improve safety checks and add new configuration setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
323
diff
changeset
|
142 global feeds_dbh feeds_sync_limit |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
143 # feeds_log "Manual check invoked on $uchan." |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
144 |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
145 set oldtime [feeds_check_start] |
142 | 146 set nresult [feeds_dbh onecolumn "SELECT COUNT(*) FROM feeds WHERE utime > $oldtime"] |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
147 |
0 | 148 if {$nresult > 0} { |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
149 feeds_check_end |
361
299cdd79b7ee
feeds: Fix some limit checks.
Matti Hamalainen <ccr@tnsp.org>
parents:
351
diff
changeset
|
150 if {$nresult > $feeds_sync_limit} { |
351
0f55bbb7fea3
feeds: Improve safety checks and add new configuration setting.
Matti Hamalainen <ccr@tnsp.org>
parents:
323
diff
changeset
|
151 feeds_smsg $uchan "$nresult uutta, tod. näk. epäsynkissä. Ignoorataan." |
0 | 152 } else { |
142 | 153 set usql "SELECT feed AS ufeed, title AS utitle, url AS uurl, utime AS utime FROM feeds WHERE utime > $oldtime ORDER BY utime ASC" |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
154 feeds_dbh eval $usql { |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
155 feeds_msg $utime $ufeed $uurl $utitle |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
156 set found 1 |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
157 } |
0 | 158 feeds_smsg $uchan "$nresult uutta." |
159 } | |
160 } else { | |
161 feeds_smsg $uchan "Ei uusia." | |
162 } | |
163 } | |
164 | |
165 | |
70 | 166 # ------------------------------------------------------------------------ |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
167 proc feeds_publast {unick uhost uhand uchan utext} { |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
168 global feeds_dbh |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
169 set ufound 0 |
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
170 |
433
2484f438b7d3
feeds: Use utl_escape() instead of our own copy.
Matti Hamalainen <ccr@tnsp.org>
parents:
431
diff
changeset
|
171 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" |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
172 feeds_dbh eval $usql { |
434
366324c417d8
feeds: Oops, use utl_ctime instead of feeds_ctime which does not exist anymore.
Matti Hamalainen <ccr@tnsp.org>
parents:
433
diff
changeset
|
173 feeds_smsg $uchan "Uusin '$ufeed' / [utl_ctime $utime]: $utitle -- $uurl" |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
174 set ufound 1 |
0 | 175 } |
176 | |
141
c99df41a691a
Work on making the feeds script use the SQLite3 backend.
Matti Hamalainen <ccr@tnsp.org>
parents:
114
diff
changeset
|
177 if {$ufound == 0} { |
534 | 178 feeds_smsg $uchan "Ei osumia haulla '${utext}'." |
0 | 179 } |
180 } |