LP1818144: Overdrive Availability API v.2
authorMartha Driscoll <driscoll@noblenet.org>
Wed, 22 May 2019 20:53:56 +0000 (16:53 -0400)
committerMartha Driscoll <driscoll@noblenet.org>
Wed, 19 Feb 2020 16:12:29 +0000 (11:12 -0500)
Overdrive's improved availability API v2 distinguishes
copiesOwned and copiesAvailable at Advantage libraries
and also provides consortia totals.  This commit points
availability lookups to the version 2 API.

Signed-off-by: Martha Driscoll <driscoll@noblenet.org>
Open-ILS/src/perlmods/lib/OpenILS/Application/EbookAPI/OverDrive.pm

index 6eca31e..22385f4 100644 (file)
@@ -107,6 +107,8 @@ sub initialize {
     $self->{discovery_base_uri} = $discovery_base_uri || 'https://api.overdrive.com/v1';
     my $circulation_base_uri = OpenILS::Application::AppUtils->ou_ancestor_setting_value($ou, 'ebook_api.overdrive.circulation_base_uri');
     $self->{circulation_base_uri} = $circulation_base_uri || 'https://patron.api.overdrive.com/v1';
+    my $availability_base_uri = OpenILS::Application::AppUtils->ou_ancestor_setting_value($ou, 'ebook_api.overdrive.availability_base_uri');
+    $self->{availability_base_uri} = $availability_base_uri || 'https://api.overdrive.com/v2';
 
     my $account_id = OpenILS::Application::AppUtils->ou_ancestor_setting_value($ou, 'ebook_api.overdrive.account_id');
     if ($account_id) {
@@ -204,12 +206,16 @@ sub set_http_headers {
         my $token;
         my $circulation_base_uri = $self->{circulation_base_uri};
         my $discovery_base_uri = $self->{discovery_base_uri};
+        my $availability_base_uri = $self->{availability_base_uri};
         if ($req->{uri} =~ /^$circulation_base_uri/) {
             $auth_type = 'Bearer';
             $token = $self->{patron_token};
         } elsif ($req->{uri} =~ /^$discovery_base_uri/) {
             $auth_type = 'Bearer';
             $token = $self->{bearer_token};
+        } elsif ($req->{uri} =~ /^$availability_base_uri/) {
+            $auth_type = 'Bearer';
+            $token = $self->{bearer_token};
         } else {
             $auth_type = 'Basic';
             $token = $self->{basic_token};
@@ -392,7 +398,7 @@ sub get_title_info {
     return;
 }
 
-# GET http://api.overdrive.com/v1/collections/L1BAAEAAA2i/products/76C1B7D0-17F4-4C05-8397-C66C17411584/availability
+# GET https://api.overdrive.com/v2/collections/v1L1BAwAAAA24/products/622708F6-78D7-453A-A7C5-3FE6853F3167/availability
 # User-Agent: {Your application}
 # Authorization: Bearer {OAuth access token}
 # Host: api.overdrive.com
@@ -403,7 +409,7 @@ sub do_availability_lookup {
     $self->get_library_info() if (!$self->{collection_token});
     my $req = {
         method  => 'GET',
-        uri     => $self->{discovery_base_uri} . "/collections/" . $self->{collection_token} . "/products/$title_id/availability"
+        uri     => $self->{availability_base_uri} . "/collections/" . $self->{collection_token} . "/products/$title_id/availability"
     };
     if (my $res = $self->handle_http_request($req, $self->{session_id})) {
         return $res->{content}->{available};
@@ -439,7 +445,7 @@ sub do_holdings_lookup {
     # request copy availability totals
     my $avail_req = {
         method  => 'GET',
-        uri     => $self->{discovery_base_uri} . "/collections/$collection_token/products/$title_id/availability"
+        uri     => $self->{availability_base_uri} . "/collections/$collection_token/products/$title_id/availability"
     };
     if (my $avail_res = $self->handle_http_request($avail_req, $self->{session_id})) {
         $holdings->{copies_owned} = $avail_res->{content}->{copiesOwned};