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

Revision 32951, 3.6 KB (checked in by davidb, 8 months ago)

Name changed to reflect additional changes now in the script

  • Property svn:executable set to *
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 browser.