#!/usr/bin/perl -w #Code adapted from http://perlmonks.com/?node=Personal%20Nodelet%20Extractor use strict; use LWP; use Getopt::Std; use HTTP::Request::Common; $|++; use vars qw(%opts); getopts('p:u:n:h',\%opts); my ($user,$passwd,$nodeletfile) = ($opts{u},$opts{p},$opts{n}); USAGE() and exit unless $user and $passwd and $nodeletfile and not $opts{h}; my @nodelets; open NODELET, $nodeletfile or die "can't open nodelet file: $nodeletfile $!"; while () { next unless my ($nodelet) = /^\s*(\d+)/; push @nodelets, $nodelet; } use constant URL => 'http://www.perlmonks.org/'; my $ua = LWP::UserAgent->new; $ua->agent('personal_nodlet_restorer/1.0 (' . $ua->agent .')'); #$ua->proxy('http', 'http://myproxy:8080'); # log in and access your User Setting page in raw format my $request = POST(URL, Content => [ op => 'login', user => $user, passwd => $passwd, node_id => 1072, displaytype => 'raw', addtopn => \@nodelets, modifypn => 'on', ] ); my $response = $ua->request($request); die $response->message unless $response->is_success; print "All done. Please double check by logging into PerlMonks with your browser"; sub USAGE { print "USAGE: $0 -u user -p -password -n nodelet_filename\n"; } =pod =head1 NAME restore_personal_nodelet.pl - LWP script =head1 DESCRIPTION Reverses the action of Jeffa's Personal Nodelet Extractor. Given a filename that contains a list of node_ids, it will log in and add then all to your personal nodelet. The majority of this code was shamelessly stolen from Jeffa's Personal Nodelet Extractor: http://www.perlmonks.com/index.pl?node=Personal%20Nodelet%20Extractor =head1 SYNOPSIS for *nix: ./restore_personal_nodelet.pl C<-u> uname C<-p> passwd C<-n> filename for win32: perl restore_personal_nodelet.pl C<-u> uname C<-p> passwd C<-n> filename Invokes the script for the specified username and password. The contents on the input file would look something like this: 24270 Permutations and combinations 25730 Life in the land of OOP, and I'm confused. 17890 shift, Pop, Unshift and Push with Impunity! 32005 Apache::MP3 34786 Why I like functional programming It doesn't need a default record seperator - it's collecting all numbers so a \d+ is sufficient. =cut