#!/usr/bin/perl -T use warnings; no warnings 'uninitialized'; use lib '/web/httpd_perl/perllibs'; use strict; use LWP::Simple; use XML::Simple; my $namespaceid = 110166; my $namespaceurl = "http://perlmonks.org/index.pl?node_id=$namespaceid"; my $xmlurl = "http://perlmonks.org/index.pl?node_id=37150"; my $user = 'blakem'; my $pass = 'yeahright'; ## Get a unique list of all node_ids on the page that are bigger than $namespaceid my %seen; my @possiblenodes = grep {!$seen{$_}++ && $_ > $namespaceid} get($namespaceurl) =~ /\bnode_id=(\d+)/gs; ## Ask the perlmonks XML engine about the nodes my $queryurl = $xmlurl . '&nodes=' . join(',',@possiblenodes) . "&user=$user&passwd=$pass&op=login"; my $nodeinfo = XMLin(get $queryurl); ## Keep those that have 'Name Space' as their parent; %seen = (); my (@children,@authorids); for my $node (@{$nodeinfo->{NODE}}) { if ($node->{parent_node} == $namespaceid) { push (@children,[$node->{node_id},$node->{author_user}]); push (@authorids,$node->{author_user}) unless $seen{$node->{author_user}}++; } } ## Get usernames by asking the XML engine about homenodeids my %authors; my $authorurl = $xmlurl . '&nodes=' . join(',',@authorids) . "&user=$user&passwd=$pass&op=login"; my $authorinfo = XMLin(get $authorurl); for my $node (@{$authorinfo->{NODE}}) { $authors{$node->{node_id}} = $node->{content}; } ## Map the author names back onto our list of children @children = map {[$_->[0],$_->[1],$authors{$_->[1]}]} @children; ## Generate some output based on the data in @children printf "%20s %8s %8s\n", 'Name', 'HomeNode', 'Nodeid'; printf "%20s %8s %8s\n", '-'x10, '-'x8, '-'x8; for (sort {lc($a->[2]) cmp lc($b->[2])} @children) { my ($nodeid,$homenodeid,$name) = @$_; printf "%20s %8d %8d\n", $name, $homenodeid, $nodeid; } =OUTPUT Name HomeNode Nodeid ---------- -------- -------- agent00013 88170 110210 Aighearach 8329 122320 Arguile 70968 121735 basicdez 52645 122419 beretboy 70819 124672 blakem 83485 124766 BooK 21732 123175 BrentDax 59600 121974 brianarn 64771 122822 buckaduck 63135 110774 cadfael 32111 110343 chaoticset 117316 121945 Chmrr 34691 124788 Corion 5348 110229 CubicSpline 113570 120007 davis 80839 120534 demerphq 108447 110195 dga 101472 110325 dragonchild 85580 110274 dthacker 4945 124473 earthboundmisfit 85698 121656 giulienk 114167 124686 gregor42 63250 119121 Guildenstern 25301 120004 Hero Zzyzzx 59531 124631 herveus 73441 110281 Hofmator 85506 110246 ichimunki 45391 110190 idnopheq 63535 110270 jackdied 111952 120038 japhy 1936 110171 Jouke 27919 117301 kwoff 115491 121723 lo_tech 108270 110209 Maestro_007 73311 123882 Masem 53423 110197 mexnix 63979 110336 mikeB 82957 120127 mr_mischief 62512 121651 MrNobo1024 56379 110212 poqui 105362 120119 PotPieMan 23091 120952 riffraff 60508 123693 runrig 31503 110194 s173451000 120825 120950 seanbo 72233 123827 shotgunefx 75719 110196 sifukurt 1683 120006 stefan k 5094 124362 suaveant 56739 120111 synapse0 62956 110202 TheoPetersen 22772 110307 theorbtwo 25047 117292 tilly 26179 110186 toadi 5087 110313 Veachian64 116016 124682 wine 77442 110292 ybiC 14909 117217 zakzebrowski 38800 120012 Zaxo 82147 110250 Zecho 105646 121653 {NULE} 113194 117228