Ok, if you use firefox or other local RSS reader that doesn't handle authenticated feeds you can use this Perl based fetcher to get your/your friend's Atom feeds. The program is driven by a simple configuration file (name it .lj-rssfetch.ini in your home directory on UNIX)... you will need WWW::Mechanize and Config::IniFiles installed with your perl to make this work.
; comments begin with ';'
[lj-rssfetch]
;
; login to livejournal with your username, 'authuser':
authuser=elo_sf
;
; what's your passworrd, 'authpass':
authpass=youwish
;
; set a salt to randomize the file names
salt=abcdefg
;
; list out journals to fetch, e.g. user1 user2 user3 ... userN
fetchlist=elo_sf friend1 another_friend
;
; Where should the feeds be saved?
;dirroot=/home/erik/public_html/adirectory
#!/usr/bin/perl -w
#
# Copyright (c) 2008 Erik Oliver
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
use strict;
# CPAN Modules
use WWW::Mechanize;
use Config::IniFiles;
use Digest::MD5 qw(md5_hex); # use md5_hex(string)
#global variables
use vars qw($confile);
# userconfig
$confile = $ENV{'HOME'} . '/.lj-rssfetch.ini';
# format for file is
# [lj-rssfetch] # mandatory links prefs with lj-rssfetch
# authuser=<<your username>> # optional
# authpass=<<your ljpass>> # optional
# salt=<<string of your choice>> # optional, but recommended, e.g. salt=abc
# fetchlist=<<space sep journals>> # must have at least one or receive on command line
# dirroot=<<feedloc>> # optional, default to $HOME/public_html/hiddenfeeds/
# You can put # or ; to indicate comments
# trim a string of leading/trailing spaces
sub trim($) {
$_ = shift;
s/^\s+//;
s/\s+$//;
return $_
}
sub Main(@) {
# process the .INI file
if (! (-r $confile) ) {
die("lj-rssfetch: configuration file ($confile) missing or unreadable");
}
my $cfg = Config::IniFiles->new( -file => $confile);
my $authuser = trim($cfg->val('lj-rssfetch','authuser', ''));
my $authpass = trim($cfg->val('lj-rssfetch','authpass', ''));
my $salt = trim($cfg->val('lj-rssfetch','salt', ''));
my $fetchlist = trim($cfg->val('lj-rssfetch','fetchlist',''));
my $dirroot = trim($cfg->val('lj-rssfetch','dirroot',
$ENV{'HOME'} . '/public_html/hiddenfeeds/'));
$cfg->Delete(); # free the memory
# add trailing /
if ($dirroot !~ m/\/$/) { $dirroot .= '/' }
# ok build the array of users to fetch and set up the loop
my @users;
# user didn't put in their config
if ($fetchlist eq '') {
# if we did not get command line parameters, die
if ($#_ < 0) {
die "usage: lj-rssfetch [username1 username2 ... usernameN]\n";
} else {
# ok load our array from the command line
@users = @_;
}
} else {
if ($#_ >= 0) {
warn "lj-rssfetch command line arguments ignored in favor of config file\n";
}
@users = split(/\s/,$fetchlist)
}
# do the actual fetching work here
my $ua = WWW::Mechanize->new( autocheck => 1);
my $authorize = '';
my $user = '';;
my $outfile = '';
# are we authenticating?
if ($authuser ne '' && $authpass eq '') {
# trying to, but no password in INI file
die "lj-rssfetch configuration specifies an authuser, but not an authpass.\n";
} elsif ($authuser ne '' ) {
# yes, set things up
$ua->agent("http://livejournal.com/users/$authuser ($authuser\@livejournal.com");
$ua->credentials($authuser => $authpass);
$authorize = "?auth=digest"
} else {
$ua->agent("somebody running lj-rssfetch script without authenticating");
}
# do the fetching
foreach $user (@users) {
# outfile is where the file goes
$outfile = $dirroot . $user . '-' . md5_hex($salt . $user) . '.xml';
$ua->get("http://$user.livejournal.com/data/atom$authorize");
$ua->save_content($outfile);
}
}
Main(@ARGV);
exit 0;