Thread Mail-Benachrichtigung oder RSS ... (22 answers)
Opened by lux at 2008-04-10 10:33

Hagen
 2008-04-22 14:54
#108713 #108713
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
use strict;
use warnings;
use Carp qw(croak carp);
use CGI ();
use CGI::Carp qw(fatalsToBrowser warningsToBrowser set_message);

use PBoard::Config;
use PBoard;
use PBoard::DB;
use PBoard::Storage;

use XML::RSS;
# http://search.cpan.org/dist/XML-RSS/lib/XML/RSS.pm

#############################################
### Parameter ###

# board=<id>, thread=<id>                   nur diesem dem Board/Thread <id>;
# action=lastMessagesDays;last=7            nur innerhalb der letzten 7 Tage
# action=lastMessagesNumbers;last=7         nur die letzten 7 Einträge
# user_id=<id>                              nur Threads von/mit Nutzer <id>
# filter=no_reply                           nur neue Threads anzeigen/keine Antworten

#############################################
### Debug ###

my $debug = 0;

#############################################
### Variablen   ###

        my $max_days    = 10;                          # Maximalwert für das Alter der Beiträge
        my $max_entries = 20;                          # Maximalwert für die Anzahl der Beiträge
        my $last_entries_default_days = 3;             # Default-Wert für das Alter der Beiträge
        my $last_entries_default_entries = 20;         # Default-Wert für die Anzahl der Beiträge
        my $action_default = 'lastMessagesNumbers';    # Default-Wert für die Action
        
        my $rss_board_titel     = $PBoard::Config::PageName;
        my $rss_board_link      = 'http://board.perl-community.de';
        my $rss_language        = 'de-de';
        my $rss_description     = 'Perl-Community.de - Deutschlands größte Community zum Thema Perl';
        my $rss_copyright       = 'Perl-Community.de';
        my $rss_docs            = 'http://blogs.law.harvard.edu/tech/rss';
        my $rss_managingEditor  = 'strat@perl-community.de';
        my $rss_webMaster       = 'strat@perl-community.de';
        
        my $rss_caching = 1;                           # Caching der Feeds aktivieren 
        my $rss_caching_time = 15;                     # Caching-Time (Wert in Minuten)
        my $rss_pfad = './';

        my $rss_out = '';
        
#############################################

print "\n==> Script $0 wurde gestartet\n" if $debug;

### Parameter einlesen & prüfen ###
        my $cgi = CGI->new();
        my $board_id      = $cgi->param( 'board' )   || 0;
        my $thread_id     = $cgi->param( 'thread' )  || 0;
        my $user_id       = $cgi->param( 'user_id' ) || 0;
        my $action        = $cgi->param( 'action' )  || 'lastMessagesNumbers';
        my $last_entries  = $cgi->param( 'last' )    || 0;
        my $filter        = $cgi->param( 'filter' )  || 0;

        # board_id prüfen
        $board_id = 0 if ($board_id !~ m|^[0-9]*$|) || ($board_id < 0);

        # thread_id prüfen
        $thread_id = 0 if ($thread_id !~ m|^[0-9]*$|) || ($thread_id < 0);

        # user_id prüfen
        $user_id = 0 if ($user_id !~ m|^[0-9]*$|) || ($user_id < 0);
         
        # Default-Wert für '$action' falls ungültig
        if (!grep $action eq $_, qw/lastMessagesNumbers LastMessagesDays/) { $action = $action_default; } # if

        # Default-Wert für '$last_entries' falls nicht definiert
        $last_entries = 0 if ($last_entries !~ m|^[0-9]*$|) || ($last_entries < 0);
        if (!$last_entries) {
                if (lc($action) eq lc('lastMessagesDays')) { $last_entries = $last_entries_default_days; } # if
                else { $last_entries = $last_entries_default_entries; } # ifelse
                } # if 

        # '$last_entries' auf Höchst-Wert prüfen
        $last_entries = $max_days    if (lc($action) eq lc('lastMessagesDays')) && ($last_entries > $max_days);
        $last_entries = $max_entries if (lc($action) eq lc('lastMessagesDays')) && ($last_entries > $max_days);

        # Default-Wert für '$filter' falls ungültig
        if (!grep $filter eq $_, qw/no_replies/) { $filter = 0; } # if

        print "Board:   ".$board_id."\n" if $debug;
        print "Thread:  ".$thread_id."\n" if $debug;
        print "User:    ".$user_id."\n" if $debug;
        print "Action:  ".$action."\n" if $debug;
        print "Last:    ".$last_entries."\n" if $debug;
        print "Filter:  ".$filter."\n" if $debug;

### Caching ###
        if ($rss_caching && !$user_id) {
                # caching nur 'allgemein', nicht für Nutzer
                my $datei = 'rss';
                $datei .= '_board_'.$board_id      if $board_id;
                $datei .= '_thread_'.$thread_id    if $thread_id;
                $datei .= '_action_'.$action       if $action;
                $datei .= '_last_'.$last_entries   if $last_entries;
                $datei .= '_filter_'.$filter       if $filter;
                $datei = lc($rss_pfad.$datei.'.txt');
                print "Datei:   $datei\n" if $debug;

                # (-M $datei) bestimmt das Alter in Tagen als Gleitkommazahl
                if ((-e $datei) && (((-M $datei)*24*60 + 60) < $rss_caching_time)) {
                        # d.h. die Datei ist vorhanden und ist nicht älter als $rss_caching_time
                        print "Alter:   ".((-M $datei)*24*60 + 60)." Minuten\n" if $debug;
                        print "Lese Datei aus Cache\n" if $debug;
                        
                        open (my $FH, "$datei") || die "Can't Open $datei: $!\n";
                        my @LINES = <$FH>;
                        close $FH;
                        
                        $rss_out = join('', @LINES);
                        } # if
                else {
                        # d.h. die Datei ist nicht vorhanden/zu alt
                        print "Erzeuge Datei für Cache\n" if $debug;
                        $rss_out = erzeuge_rss_feed();
                        open (my $FH, ">$datei") || die "Can't Open $datei: $!\n";
                        print $FH $rss_out;
                        close $FH;
                        } # ifelse
                } # if

        if ($rss_out eq '') { $rss_out = erzeuge_rss_feed(); } # if

        print $cgi->header(-type    => 'text/plain',
                           -expires => '+0s',
                           -charset => 'ISO-8859-1',
                           );

        # RSS-Ausgabe
        print $rss_out;

print "\n==> Script $0 wurde beendet\n" if $debug;
Gruß
Hagen

View full thread Mail-Benachrichtigung oder RSS ...