#! /usr/bin/perl -w
# Grab paper titles and abstracts from the microsoft conference management system
# This script is in the public domain
# Dan Pelleg, March 2005

use WWW::Mechanize;
use HTML::TableExtract;

my $url='https://msrcmt.research.microsoft.com/SIGKDD2005RES/reviewer';
my $user;
my $password;

print "Enter user ID: ";
$user = <>;
print "Enter password: ";
$password = <>;
chomp($user, $password);

print "Creating files in the current directory\n";
print "They will have the same name as their subject\n";

my $agent = WWW::Mechanize->new();

$agent->get($url);

$agent->field('Email', $user);
$agent->field('Password', $password);
$agent->submit_form(form_name => 'Form1');

#print $agent->content();


my $te = new HTML::TableExtract( depth => 3, count => 2 , keep_html => 1);
$te->parse($agent->content());
foreach $ts ($te->table_states) {
  foreach $row ($ts->rows) {
    if($row->[1] =~ /<A HREF="([^>]*)">([^<]*)/i) {
      my ($sub_url, $sub_name) = ($1, $2);
      $sub_name =~ s!/!_!g;
      print "Processing subject: $sub_name\n";
      open(OUT, ">$sub_name") or die;
      do_subject($agent, $sub_url, $sub_name);
      close(OUT);
    }
  }
}


sub do_subject {
  my ($agent, $sub_url, $sub_name) = @_;
  $sub_url =~ s/PaperListFrame/PaperListTopMiddle/;
  $agent->get($sub_url);
  #  print $agent->content();
  #  print "$sub_url\n";

  my $te = new HTML::TableExtract(depth => 1, count => 0, keep_html => 1);
  $te->parse($agent->content());
  foreach $ts ($te->table_states) {
    foreach $row ($ts->rows) {
      my $all_row = join('', @$row);
      if ($all_row =~ /javascript:openNewWindow.'(PaperDetails.aspx\?PaperID=(\d+))/i) {
        my ($pap_details, $papnum) = ($1, $2);
        print OUT "Paper #$papnum\n";
        print OUT do_paper($agent, $pap_details);
      }
    }
  }
}

sub do_paper {
  my ($agent, $pap_url) = @_;
  $agent->get($pap_url);
  my $abstract = $agent->content();
  $abstract =~ s/<.*?>//g;
  $abstract =~ s!Microsoft Conference Management Toolkit.*//-->!!s;
  return $abstract;
}
