--- nsdl/lonsql 2005/11/17 22:04:47 1.2 +++ nsdl/lonsql 2005/11/24 21:34:31 1.7 @@ -3,7 +3,7 @@ # The LearningOnline Network # lonsql - LON TCP-NSDL Query Handler. # -# $Id: lonsql,v 1.2 2005/11/17 22:04:47 www Exp $ +# $Id: lonsql,v 1.7 2005/11/24 21:34:31 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -113,7 +113,10 @@ use IO::File; use Socket; use Fcntl; use Tie::RefHash; - +use HTML::LCParser(); +use LWP::UserAgent(); +use HTTP::Headers; +use HTTP::Date; use File::Find; use localenroll; @@ -401,7 +404,7 @@ sub make_new_child { } } else { # Do an sql query - $result = &do_sql_query($query,$arg1,$arg2); + $result = &nsdl_query($query,$arg1,$arg2); } # result does not need to be escaped because it has already been # escaped. @@ -417,58 +420,6 @@ sub make_new_child { exit; } } - -######################################################## -######################################################## - -=pod - -=item &do_sql_query - -Runs an sql metadata table query. - -Inputs: $query, $custom, $customshow - -Returns: A string containing escaped results. - -=cut - -######################################################## -######################################################## -{ - my @metalist; - -sub process_file { - if ( -e $_ && # file exists - -f $_ && # and is a normal file - /\.meta$/ && # ends in meta - ! /^.+\.\d+\.[^\.]+\.meta$/ # is not a previous version - ) { - push(@metalist,$File::Find::name); - } -} - -sub do_sql_query { - my ($query) = @_; - &logthis('doing query '.$query); - - my @results = (); - - # - if ($query) { - #prepare and execute the query - my $aref=&nsdl_query($query); - foreach my $row (@$aref) { - my @b=map { &escape($_); } @$row; - push @results,join(",", @b); - } - - } - return join("&",@results); -} # End of &do_sql_query - -} # End of scoping curly braces for &process_file and &do_sql_query -######################################################## ######################################################## =pod @@ -842,12 +793,56 @@ sub HUPSMAN { # sig # # Takes SQL query # sends it to NSDL -# has to return array reference # sub nsdl_query { my $query=shift; -} + my ($keyword)=($query=~/\"\%([^\%]+)\%\"/); + $keyword=&escape($keyword); + my $url='http://search.nsdl.org?verb=Search&s=0&n=500&q=-link.primaryCollection:oai\:nsdl.org\:nsdl.nsdl\:00254%20'.$keyword; + my $ua=new LWP::UserAgent; + my $response=$ua->get($url); + my $parser=HTML::LCParser->new(\$response->content); + my $is=''; + my $cont=''; + my $token; + my %result=(); + my $allresults=''; + while ($token=$parser->get_token) { + if ($token->[0] eq 'T') { + $cont.=$token->[1]; + } elsif ($token->[0] eq 'S') { + if ($token->[1] eq 'record') { + %result=(); + } elsif ($token->[1]=~/^dc\:/) { + $is=$token->[1]; + $cont=''; + } + } elsif ($token->[0] eq 'E') { + if ($token->[1] eq 'record') { +# +# Now store it away +# + my $url=$result{'dc:identifier'}; + if ($url=~/^http\:/) { + $url=~s/^http:\//\/ext/; + } else { + $url=''; + } + $allresults.='&'. + &escape($result{'dc:title'}).','. + &escape($result{'dc:creator'}).','. + &escape($url).','. + &escape($result{'dc:subject'}).',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,'; + } elsif ($token->[1]=~/^dc\:/) { + $result{$is}=$cont; + } + } + } + $allresults=~s/^\&//; +&logthis($allresults); + return $allresults; +} =pod