#!/usr/bin/perl

$baseURL = "https://okapi-drew.folio.ebsco.com";
$jsonHeader = "Content-type: application/json";
$xOkapiToken = `cat /opt/folio/okapi-tokens/okapi-token.txt`;
chomp($xOkapiToken);

use JSON;

$json = `curl -s -X GET -G -H '$jsonHeader' -H '$xOkapiToken' -d 'limit=2000' $baseURL/locations?query=code="*"`;
$hash = decode_json $json;
for ( @{$hash->{locations}} ) {
   $name = $_->{'name'};
   $id = $_->{'id'};
   $locationName{$id} = $name;
}

$jsonA = `curl -s -X GET -G -H '$jsonHeader' -H '$xOkapiToken' -d 'limit=100' $baseURL/coursereserves/terms?query=id="*"`; 
$hashA = decode_json $jsonA; 
for ( @{$hashA->{terms}} ) {
   $name = $_->{'name'}; 
   if ($name eq "Spring 2025") {
       $termId = $_->{'id'}; 
   }
}

$jsonB = `curl -s -X GET -G -H '$jsonHeader' -H '$xOkapiToken' -d 'limit=1000' $baseURL/coursereserves/courselistings?query=termId=$termId`;
$hashB = decode_json $jsonB; 
for ( @{$hashB->{courseListings}} ) {
   $courseListingId = $_->{'id'}; 
   for ( @{$_->{'instructorObjects'}} ) {
      $profName = $_->{'name'};
   }
   $jsonC = `curl -s -X GET -G -H '$jsonHeader' -H '$xOkapiToken' -d 'limit=1000' $baseURL/coursereserves/courses?query=courseListingId=$courseListingId`;
   $hashC = decode_json $jsonC; 
   for ( @{$hashC->{courses}} ) {
      $courseId = $_->{'id'}; 
      $courseNumber = $_->{'courseNumber'} . "/" . $_->{'sectionName'};
      $courseNumber =~ s/\/$//; 
      $name = $_->{'name'}; 
      push(@courses,"$courseNumber|$profName|$name|\n");
      $jsonD = `curl -s -X GET -G -H '$jsonHeader' -H '$xOkapiToken' -d 'limit=1000' $baseURL/coursereserves/reserves?query=courseListingId=$courseListingId`;
      $hashD = decode_json $jsonD; 
      for ( @{$hashD->{reserves}} ) {
         $counter++;
         $callNumber = $_->{'copiedItem'}{'callNumber'};
         $temporaryLocationId = $_->{'copiedItem'}{'temporaryLocationId'}; 
         $location = $locationName{$temporaryLocationId};
         $title = $_->{'copiedItem'}{'title'};
         $sortTitle = lc($title);
         $sortTitle =~ s/^the //;
         $sortTitle =~ s/^la //;
         $sortTitle =~ s/^an //;
         $sortTitle =~ s/^a //;
         push(@reserves,"$sortTitle|$title|$callNumber|$courseNumber|$location|\n");
     } 
   }
}

@coursesSorted = sort @courses;
@reservesSorted = sort @reserves;

$html = "<ul>";
foreach $course (@coursesSorted) {
   ($courseNumber,$profName,$name) = split(/\|/,$course);
   $html .= "<p><li><b>$courseNumber $name </b><br>Prof. $profName<ul>";
   foreach $reserve (@reservesSorted) {
      if ($reserve =~ /\|$courseNumber\|/) {
         ($sortTitle,$title,$callNumber,$courseNumber,$location) = split(/\|/,$reserve);
         $html .= "<li>$title <br>&nbsp;&nbsp;&nbsp;&nbsp;$location $callNumber";
      }
   }
   $html .= "</ul>";
}
$html .= "</ul><!-- @reserves -->";

print "$html";

  • No labels
Write a comment…