Difference between revisions of "Favorites/ScoringCode"
From Exalted - Unofficial Wiki
m (link fix) |
|||
| (2 intermediate revisions by 2 users not shown) | |||
| Line 13: | Line 13: | ||
my $contents="$rootpath/content"; | my $contents="$rootpath/content"; | ||
| − | my $rootfile="$contents | + | my $rootfile="$contents/Favorites.txt"; |
my $now = localtime time; | my $now = localtime time; | ||
| Line 45: | Line 45: | ||
# Dump results | # Dump results | ||
| − | foreach my $count (sort { $ | + | foreach my $count (reverse sort { $a <=> $b } keys %groupres) |
{ | { | ||
print ":'''Favorite of $count users:'''\n"; | print ":'''Favorite of $count users:'''\n"; | ||
| Line 76: | Line 76: | ||
{ | { | ||
my ($line) = @_; | my ($line) = @_; | ||
| − | |||
chomp $line; | chomp $line; | ||
my $test = $line; | my $test = $line; | ||
| − | + | $test =~ s/^\*+\s*(\[\[)?([\w\/-]+).*/$2/; | |
| − | $test =~ s/^\*+\s*\[\[ | + | return $line eq $test ? "" : $test; |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
} | } | ||
Revision as of 01:29, 11 February 2007
This is the Perl code used to calculate the Favorites list. It assumes the existence of *.txt files containing the wiki text of the root favorites page and the pages to which it links. Creating such files is left as an exercise for the reader.
#!/usr/bin/perl
#Author: Wordman
use Time::Local;
use strict;
my %seen;
my $rootpath='/path/to/files';
my $contents="$rootpath/content";
my $rootfile="$contents/Favorites.txt";
my $now = localtime time;
print "Run begins: $now\n";
my @links;
get_bullet_links($rootfile,\@links);
my %results;
foreach my $link (@links)
{
my $path = "$contents/$link.txt";
my %favs;
count_favorites($path,\%favs);
foreach my $fav (keys %favs)
{
$results{$fav} ||= 0;
$results{$fav} += 1;
print "Counting vote from $link for $fav\n";
}
}
# Now build an inverted result map
my %groupres;
foreach my $fav (keys %results)
{
my $count = $results{$fav};
$groupres{$count}{$fav} = '';
}
# Dump results
foreach my $count (reverse sort { $a <=> $b } keys %groupres)
{
print ":'''Favorite of $count users:'''\n";
my $list = $groupres{$count};
foreach my $fav (sort keys %$list)
{
print "::[[$fav]]\n";
}
}
sub get_bullet_links
{
my ($path,$list) = @_;
if (open(DAT, $path))
{
my @existing=<DAT>;
close(DAT);
foreach my $line (@existing)
{
my $link = extract_bullet_link($line);
next if !$link;
push(@$list,$link);
}
}
}
sub extract_bullet_link
{
my ($line) = @_;
chomp $line;
my $test = $line;
$test =~ s/^\*+\s*(\[\[)?([\w\/-]+).*/$2/;
return $line eq $test ? "" : $test;
}
sub count_favorites
{
my ($path,$favs) = @_;
my @links;
get_bullet_links($path,\@links);
# Count each link only once
foreach my $link (@links)
{
$favs->{$link} = 1;
}
}