[freeside-commits] freeside/httemplate/misc xmlhttp-cust_main-censustract.html, NONE, 1.1

Jeff Finucane,420,, jeff at wavetail.420.am
Mon Jun 29 06:53:26 PDT 2009


Update of /home/cvs/cvsroot/freeside/httemplate/misc
In directory wavetail.420.am:/tmp/cvs-serv21344/httemplate/misc

Added Files:
	xmlhttp-cust_main-censustract.html 
Log Message:
FCC form 477 reporting #4912

--- NEW FILE: xmlhttp-cust_main-censustract.html ---
<% objToJson($return) %>
<%init>

my $DEBUG = 0;

my $url='http://www.ffiec.gov/Geocode/default.aspx';

my $sub = $cgi->param('sub');

my $return = {};
my $error = '';

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Request::Common qw( GET POST );
use HTML::TokeParser;

if ( $sub eq 'censustract' ) {

  my %arg = $cgi->param('arg');
  warn join('', map "$_: $arg{$_}\n", keys %arg )
    if $DEBUG;

  my $ua = new LWP::UserAgent;
  my $res = $ua->request( GET( $url ) );

  warn $res->as_string
    if $DEBUG > 1;

  unless ($res->code  eq '200') {

    $error = $res->message;

  } else {

    my $content = $res->content;
    my $p = new HTML::TokeParser \$content;
    my $viewstate;
    while (my $token = $p->get_tag('input') ) {
      next unless $token->[1]->{name} eq '__VIEWSTATE';
      $viewstate = $token->[1]->{value};
      last;
    }

    unless ($viewstate) {

      $error = "no __VIEWSTATE found";

    } else {

      my($zip5, $zip4) = split('-',$arg{zip});

      my @ffiec_args = (
        __VIEWSTATE => $viewstate,
        ddlbYear    => $arg{year},
        txtAddress  => $arg{address},
        txtCity     => $arg{city},  
        ddlbState   => $arg{state},
        txtZipCode  => $zip5,
        btnSearch   => 'Search',
      );
      warn join("\n", @ffiec_args )
        if $DEBUG;

      $res = $ua->request( POST( $url, \@ffiec_args ) );
      warn $res->as_string
        if $DEBUG > 1;

      unless ($res->code  eq '200') {

        $error = $res->message;

      } else {

        my @id = qw( MSACode StateCode CountyCode TractCode );
        $content = $res->content;
        $p = new HTML::TokeParser \$content;
        my $prefix = 'UcGeoResult11_lb';
        my $compare =
          sub { my $t=shift; scalar( grep { lc($t) eq lc("$prefix$_")} @id ) };

        while (my $token = $p->get_tag('span') ) {
          next unless ( $token->[1]->{id} && &$compare( $token->[1]->{id} ) );
          $token->[1]->{id} =~ /^$prefix(\w+)$/;
          $return->{lc($1)} = $p->get_trimmed_text("/span");
        }

        $error = "No census tract found" unless $return->{tractcode};

      } #unless ($res->code  eq '200')

    } #unless ($viewstate)

  } #unless ($res->code  eq '200')

  $error = "FFIEC Geocoding error: $error" if $error;
  $return->{'error'} = $error;

  $return;

}

</%init>



More information about the freeside-commits mailing list