source: subversion/applications/editors/osmpedit/curl.pm @ 34678

Last change on this file since 34678 was 1097, checked in by tpersson, 13 years ago

bug fixes

File size: 7.5 KB
Line 
1#    Copyright (C) 2005 Tommy Persson, tpe@ida.liu.se
2#
3#    This program is free software; you can redistribute it and/or modify
4#    it under the terms of the GNU General Public License as published by
5#    the Free Software Foundation; either version 2 of the License, or
6#    (at your option) any later version.
7#
8#    This program is distributed in the hope that it will be useful,
9#    but WITHOUT ANY WARRANTY; without even the implied warranty of
10#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11#    GNU General Public License for more details.
12#
13#    You should have received a copy of the GNU General Public License
14#    along with this program; if not, write to the Free Software
15#    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
16
17package curl;
18
19use FindBin qw($RealBin);
20use lib "$RealBin/../perl";
21
22use strict;
23
24my $urlbase = "http://www.openstreetmap.org/api/0.3/";
25
26#BEGIN {
27#    my $easy = 1;
28#    foreach my $prefix (@INC) {
29#       print STDERR "PREFIX:$prefix\n";
30#       if (-f "$prefix/WWW/Curl/Easy.pm") {
31#           print STDERR "Easy.pm found: $prefix\n";
32#           $easy = 0;
33#       }
34#    }
35#    if ($easy) {
36#       eval {
37#           require WWW::Curl::easy;
38#           import WWW::Curl::easy;
39#           sub neweasy { return WWW::Curl::easy->new(); };
40#       }
41#    } else {
42#       eval {
43#           require WWW::Curl::Easy;
44#           import WWW::Curl::Easy;
45#           sub neweasy { return WWW::Curl::Easy->new(); };
46#       }
47#    }
48#}
49
50##use WWW::Curl::easy;
51
52sub neweasy {
53  eval { require "WWW/Curl/Easy.pm"; import WWW::Curl::easy; };
54  unless ($@) {
55      return WWW::Curl::Easy->new();
56  }
57  eval { require "WWW/Curl/easy.pm"; import WWW::Curl::easy; };
58  unless ($@) {
59      return WWW::Curl::easy->new();
60  }
61}
62
63sub chunk { 
64    my ($data,$pointer)=@_; 
65    ${$pointer}.=$data; 
66##    print STDERR "CHUNK:$data\n";
67    return length($data) 
68}
69
70sub hchunk { 
71    my ($data,$pointer)=@_; 
72    ${$pointer}.=$data; 
73##    print STDERR "CHUNK:$data\n";
74    return length($data) 
75}
76
77sub grab_landsat {
78    my $west = shift;
79    my $south = shift;
80    my $east = shift;
81    my $north = shift;
82    my $width_px = shift;
83    my $height_px = shift;
84
85    my $url = 'http://onearth.jpl.nasa.gov/wms.cgi?request=GetMap&width=' .
86        "$width_px" . '&height=' . "$height_px" . '&layers=global_mosaic&styles=&srs=EPSG:4326&format=image/jpeg&bbox=' . "$west,$south,$east,$north";
87
88#    my $url = "http://www.ida.liu.se/~tompe/";
89    print STDERR "URL:$url\n";
90
91#    my $curl = WWW::Curl::easy->new();
92    my $curl = neweasy ();
93
94    my $headers = "";
95    my $body = "";
96   
97    $curl->setopt ($curl->CURLOPT_HEADERFUNCTION, \&hchunk );
98    $curl->setopt ($curl->CURLOPT_WRITEFUNCTION, \&chunk );
99    $curl->setopt ($curl->CURLOPT_WRITEHEADER, \$headers );
100#    $curl->setopt (CURLOPT_WRITEDATA, \$body );
101    $curl->setopt ($curl->CURLOPT_FILE, \$body );
102    $curl->setopt ($curl->CURLOPT_URL, $url);
103##    $curl->setopt (CURLOPT_VERBOSE, 1);
104##    $curl->setopt (CURLOPT_HEADER, 0);
105
106    if ($curl->perform() != 0) {
107        print "STDERR Failed ::".$curl->errbuf."\n";
108    };
109##    print STDERR "HEADER:$headers\n";
110    if (check_200_OK ($headers)) {
111        return $body;
112    } else {
113        return -1;
114    }
115
116}
117
118
119sub grab_osm {
120    my $west = shift;
121    my $south = shift;
122    my $east = shift;
123    my $north = shift;
124    my $username = shift;
125    my $password = shift;
126
127    my $url = "${urlbase}map?bbox=$west,$south,$east,$north";
128
129    print STDERR "URL:$url\n";
130##    print STDERR "$username:$password";
131
132##    my $curl = WWW::Curl::easy->new();
133    my $curl = neweasy ();
134
135    my $headers = "";
136    my $body = "";
137   
138    $curl->setopt ($curl->CURLOPT_HEADERFUNCTION, \&hchunk );
139    $curl->setopt ($curl->CURLOPT_WRITEFUNCTION, \&chunk );
140    $curl->setopt ($curl->CURLOPT_FILE, \$body );
141    $curl->setopt ($curl->CURLOPT_URL, $url);
142    $curl->setopt ($curl->CURLOPT_HEADER, 0);
143    $curl->setopt ($curl->CURLOPT_USERPWD, "$username:$password");
144
145    if ($curl->perform() != 0) {
146        print "STDERR Failed ::".$curl->errbuf."\n";
147    }
148#    print $body;
149    return $body;
150}
151
152
153sub get {
154    my $suffixdata = shift;
155    my $username = shift;
156    my $password = shift;
157
158    my $url = "$urlbase$suffixdata";
159
160    print STDERR "URL:$url\n";
161##    print STDERR "$username:$password";
162
163#    my $curl = WWW::Curl::easy->new();
164    my $curl = neweasy ();
165
166    my $header = "";
167    my $body = "";
168   
169    $curl->setopt ($curl->CURLOPT_HEADERFUNCTION, \&hchunk );
170    $curl->setopt ($curl->CURLOPT_WRITEFUNCTION, \&chunk );
171    $curl->setopt ($curl->CURLOPT_FILE, \$body );
172    $curl->setopt ($curl->CURLOPT_URL, $url);
173    $curl->setopt ($curl->CURLOPT_HEADER, 0);
174    $curl->setopt ($curl->CURLOPT_USERPWD, "$username:$password");
175    $curl->setopt ($curl->CURLOPT_WRITEHEADER, \$header);
176##    $curl->setopt (CURLOPT_VERBOSE, 1);
177
178    if ($curl->perform() != 0) {
179        print "STDERR Failed ::".$curl->errbuf."\n";
180    }
181#    print $body;
182
183    chomp $body;
184    if (check_200_OK ($header)) {
185        return $body;
186    } else {
187        return -1;
188    }
189    return $body;
190}
191
192sub delete {
193    my $suffixdata = shift;
194    my $username = shift;
195    my $password = shift;
196
197    my $url = "$urlbase$suffixdata";
198
199    print STDERR "URL:$url\n";
200##    print STDERR "$username:$password";
201
202##    my $curl = WWW::Curl::easy->new();
203    my $curl = neweasy ();
204
205    my $header = "";
206    my $body = "";
207   
208    $curl->setopt ($curl->CURLOPT_HEADERFUNCTION, \&hchunk );
209    $curl->setopt ($curl->CURLOPT_WRITEFUNCTION, \&chunk );
210    $curl->setopt ($curl->CURLOPT_FILE, \$body );
211    $curl->setopt ($curl->CURLOPT_URL, $url);
212    $curl->setopt ($curl->CURLOPT_HEADER, 0);
213    $curl->setopt ($curl->CURLOPT_USERPWD, "$username:$password");
214    $curl->setopt ($curl->CURLOPT_WRITEHEADER, \$header);
215    $curl->setopt ($curl->CURLOPT_CUSTOMREQUEST, "DELETE");
216##    $curl->setopt (CURLOPT_VERBOSE, 1);
217
218    if ($curl->perform() != 0) {
219        print "STDERR Failed ::".$curl->errbuf."\n";
220    }
221#    print $body;
222
223    chomp $body;
224    return (check_200_OK ($header));
225}
226
227
228sub read_callback {
229    my ($maxlength,$pointer)=@_;
230##    print "MAXLENGTH: $maxlength\n";
231##    print "POINTER: $$pointer\n";
232    my $data = $$pointer;
233    $$pointer = "";
234    return $data;
235}
236
237sub put_data {
238    my $suffixdata = shift;
239    my $data = shift;
240    my $username = shift;
241    my $password = shift;
242
243    my $length = length ($data);
244
245    my $body = "";
246    my $header = "";
247
248    my $url = "$urlbase$suffixdata";
249
250    print STDERR "URL:$url\n";
251##    print STDERR "$username:$password";
252
253##    my $curl = WWW::Curl::easy->new();
254    my $curl = neweasy ();
255
256    $curl->setopt ($curl->CURLOPT_READFUNCTION, \&read_callback);
257    $curl->setopt ($curl->CURLOPT_UPLOAD, 1);
258    $curl->setopt ($curl->CURLOPT_PUT, 1);
259    $curl->setopt ($curl->CURLOPT_URL, $url);
260    $curl->setopt ($curl->CURLOPT_USERPWD, "$username:$password");
261#    $curl->setopt (CURLOPT_READDATA, \$data );
262    $curl->setopt ($curl->CURLOPT_INFILE, \$data );
263    $curl->setopt ($curl->CURLOPT_INFILESIZE, length ($data) );
264
265    $curl->setopt ($curl->CURLOPT_HEADERFUNCTION, \&hchunk );
266    $curl->setopt ($curl->CURLOPT_HEADER, 0);
267    $curl->setopt ($curl->CURLOPT_WRITEFUNCTION, \&chunk );
268    $curl->setopt ($curl->CURLOPT_FILE, \$body );
269    $curl->setopt ($curl->CURLOPT_WRITEHEADER, \$header);
270
271###    $curl->setopt (CURLOPT_VERBOSE, 1);
272
273
274    if ($curl->perform() != 0) {
275        print "STDERR Failed ::".$curl->errbuf."\n";
276    }
277#    print $body;
278##    print $header;
279    chomp $body;
280    if (check_200_OK ($header)) {
281        return $body;
282    } else {
283        return -1;
284    }
285}
286
287sub check_200_OK {
288    my $s = shift;
289    if ($s =~ /200 OK/) {
290#       print STDERR "200 OK\n";
291        return 1;
292    }
293    print "HEADER: $s\n";
294    return 0;
295}
296
297return 1;
Note: See TracBrowser for help on using the repository browser.