source: other-projects/is-sheet-music-encore/trunk/dapiclient2-extended.pl@ 32951

Last change on this file since 32951 was 32951, checked in by davidb, 3 years ago

Name changed to reflect additional changes now in the script

  • Property svn:executable set to *
File size: 3.6 KB
Line 
1#!/usr/bin/env perl
2
3=head1 NAME
4
5dapiclient_2
6
7=head1 DESCRIPTION
8
9This is an example perl 2-legged oauth client that makes a request to
10the full Data API. Replace OAUTH_CONSUMER_SECRET and
11OAUTH_CONSUMER_KEY (below) with the keys you received from
12http://babel.hathitrust.org/cgi/kgs and MY_IP_ADDRESS by the IP
13address of workstation or server running this script.
14
15It uses a hardcoded URL to request a single page image for a public domain item.
16
17It is intended to aid development of a fully function Data API client
18in Perl or other languages that implement HMAC_SHA1 OAuth libraries.
19
20=head1 SYNOPSIS
21
22At the Unix command line:
23
24 % cd /path/to/dapiclient_2/directory
25 % chmod u+x dapiclient_2
26
27then:
28
29 % curl 'http://yourhost/path_to_client/dapiclient_2' > mdp.39015000000128.png
30
31If your png is corrupt, run without i/o redirection to see the error code:
32
33 % curl 'http://yourhost/path_to_client/dapiclient_2'
34
35or paste the URL to your browser.
36
37=head1 OUTPUT
38
39Stream of data for the above mentioned page image file or error code.
40
41=cut
42
43use strict;
44use warnings;
45
46use CGI;
47use OAuth::Lite::Consumer;
48use OAuth::Lite::AuthMethod;
49
50# read_file()
51# Derived from:
52# https://stackoverflow.com/questions/953707/in-perl-how-can-i-read-an-entire-file-into-a-string
53sub read_file
54{
55 my ($file) = @_;
56
57 my $text = do {
58 local $/ = undef;
59 open my $fh, "<", $file
60 || die "could not open $file: $!";
61 <$fh>;
62 };
63
64 chomp($text);
65 return $text;
66}
67
68my $DEBUG=1;
69my $WEB_DISPLAY=0;
70
71my $access_key = 'OAUTH_CONSUMER_KEY'; # replace with your access_key
72my $secret_key = 'OAUTH_CONSUMER_SECRET'; # replace with your secret_key
73my $ip_address = 'MY_IP_ADDRESS'; # replace with the IP address of your workstation or server
74
75if (-f "my_access_key.txt") {
76 $access_key = read_file("my_access_key.txt");
77}
78
79if (-f "my_secret_key.txt") {
80 $secret_key = read_file("my_secret_key.txt");
81}
82
83if (-f "my_ip_address.txt") {
84 $ip_address = read_file("my_ip_address.txt");
85}
86
87my $base_request_url = "https://babel.hathitrust.org/cgi/htd/volume/pageimage/";
88
89#my $request_url = $base_request_url."mdp.39015000000128/1";
90my $request_url = $base_request_url."mdp.39015070661841/1";
91
92
93my $consumer = OAuth::Lite::Consumer->new
94 (
95 consumer_key => $access_key,
96 consumer_secret => $secret_key,
97 auth_method => OAuth::Lite::AuthMethod::URL_QUERY,
98 );
99
100if ($DEBUG) {
101 my $params = $consumer->gen_auth_params('GET', $request_url);
102 print STDERR "(Info) Resolved URL for retrieval:\n";
103 print STDERR "$request_url?v=2&";
104 print STDERR "oauth_consumer_key=$params->{'oauth_consumer_key'}&";
105 print STDERR "oauth_timestamp=$params->{'oauth_timestamp'}&";
106 print STDERR "oauth_nonce=$params->{'oauth_nonce'}&";
107 print STDERR "oauth_signature_method=$params->{'oauth_signature_method'}&";
108 print STDERR "oauth_signature=$params->{'oauth_signature'}&";
109 print STDERR "oauth_version=$params->{'oauth_version'}\n";
110}
111
112my $response = $consumer->request
113 (
114 method => 'GET',
115 url => $request_url,
116 params => {
117 v => '2',
118 format => 'png',
119 ip => $ip_address,
120 },
121 );
122
123my $success = $response->is_success;
124my $content_type = 'image/png';
125
126unless ($success) {
127 $content_type = 'text/html';
128}
129
130if ($WEB_DISPLAY) {
131 print CGI::header(
132 Content_type => $content_type,
133 Status => $response->status_line,
134 );
135
136 unless ($success) {
137 print "<p><b>Error: " . $response->content . "</b><br/>";
138 }
139 else {
140 print $response->content;
141 }
142}
143else {
144 print $response->content;
145}
146exit $success;
147
148
149
Note: See TracBrowser for help on using the repository browser.