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

Revision 33044, 3.9 KB (checked in by cpb16, 4 months ago)

Streamlined numpages checking and random selection. Corrected COMPX-RUN-X.sh to download all files (naming error). NEXT: Clean up corpus generation and move on to the next phase

  • 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/meta/";
88
89
90my $request_url;
91if (defined $ARGV[0]) {
92    $request_url = $base_request_url.$ARGV[0];
93}
94else {
95    # The following ID is to the example given in the Data API documentation
96    # $request_url = $base_request_url."mdp.39015000000128/1";
97   
98    # The following is an example of a 'open-open' sheet music doc
99    $request_url = $base_request_url."mdp.39015070661841/1";
100}
101   
102my $consumer = OAuth::Lite::Consumer->new
103  (
104   consumer_key    => $access_key,
105   consumer_secret => $secret_key,
106   auth_method     => OAuth::Lite::AuthMethod::URL_QUERY,
107  );
108
109if ($DEBUG) {
110    my $params = $consumer->gen_auth_params('GET', $request_url);
111    print STDERR "(Info) Resolved URL for retrieval:\n";
112    print STDERR "$request_url?v=2&";
113    print STDERR "oauth_consumer_key=$params->{'oauth_consumer_key'}&";
114    print STDERR "oauth_timestamp=$params->{'oauth_timestamp'}&";
115    print STDERR "oauth_nonce=$params->{'oauth_nonce'}&";
116    print STDERR "oauth_signature_method=$params->{'oauth_signature_method'}&";
117    print STDERR "oauth_signature=$params->{'oauth_signature'}&";
118    print STDERR "oauth_version=$params->{'oauth_version'}\n";
119}
120
121my $response = $consumer->request
122  (
123   method  => 'GET',
124   url     => $request_url,
125   params  => {
126               v => '2',
127               #cformat => 'png',
128               ip => $ip_address,
129              },
130  );
131
132my $success = $response->is_success;
133my $content_type = 'image/png';
134
135unless ($success) {
136    #$content_type = 'text/html';
137}
138
139if ($WEB_DISPLAY) {
140    print CGI::header(
141                      Content_type => $content_type,
142                      Status => $response->status_line,
143                     );
144
145    unless ($success) {
146        print "<p><b>Error: " . $response->content . "</b><br/>";
147    }
148    else {
149        print $response->content;
150    }
151}
152else {
153    print $response->content;
154}
155
156if ($success) {
157    exit 0;
158}
159else {
160    exit 1;
161}
162
163
164
165
Note: See TracBrowser for help on using the browser.