2011-09-04 25 views
5

Tôi cố gắng để có được danh sách của Maps được tạo ra bởi tôi trong Google Maps và API Maps cho biết như sau:Sử dụng GET và POST với tiêu đề HTTP Authorization bằng Python


Lấy ra một Danh sách Maps

API dữ liệu Maps cung cấp nguồn cấp dữ liệu liệt kê các bản đồ được tạo bởi một người dùng cụ thể; nguồn cấp dữ liệu này được gọi là "siêu dữ liệu". Một API Maps liệu metafeed điển hình là một yêu cầu GET của hình thức sau đây:

Các yêu cầu thức ăn chăn nuôi mặc định tất cả các bản đồ liên quan đến việc xác thực người dùng

GET http://maps.google.com/maps/feeds/maps/default/full 
Authorization: GoogleLogin auth="authorization_token" 

Các yêu cầu metafeed chuẩn tất cả bản đồ gắn liền với userID liên

GET http://maps.google.com/maps/feeds/maps/userID/full 
Authorization: GoogleLogin auth="authorization_token" 

Lưu ý rằng cả hai yêu cầu GET yêu cầu tiêu đề HTTP ủy quyền, chuyển mã thông báo AuthSub hoặc GoogleLogin, tùy thuộc vào lược đồ xác thực bạn đã triển khai. (Mã thông báo GoogleLogin tương ứng với quy trình xác thực ClientLogin.)


Tôi không biết cách tạo yêu cầu HTTP với tiêu đề HTTP ủy quyền. Tôi đã có mã để có được những authorization_token, được như sau:

# coding: utf-8 

import urllib, re, getpass 

# http://code.google.com/intl/pt-BR/apis/maps/documentation/mapsdata/developers_guide_protocol.html#ClientLogin 

username = 'heltonbiker' 
senha = getpass.getpass('Senha do usuário ' + username + ':') 

dic = { 
     'accountType':  'GOOGLE', 
     'Email':   (username + '@gmail.com'), 
     'Passwd':   senha, 
     'service':   'local', 
     'source':   'helton-mapper-1' 
     } 
url = 'https://www.google.com/accounts/ClientLogin?' + urllib.urlencode(dic) 
output = urllib.urlopen(url).read() 
authid = output.strip().split('\n')[-1].split('=')[-1] 

Tôi cũng đã xem xét httplib tài liệu, nhưng không hiểu nhiều (tôi không phải là một lập trình viên chuyên nghiệp).

Bất kỳ đầu mối nào?

Trả lời

7

Sử dụng urllib2 sẽ làm cho mọi thứ dễ dàng hơn:

import urllib2 

request = urllib2.Request('http://maps.google.com/maps/feeds/maps/default/full') 
request.add_header('Authorization', 'GoogleLogin auth=%s' % authorization_token) 
urllib2.urlopen(request).read() 

BTW, không phải là Google Maps API dữ liệu bị phản đối? http://googlegeodevelopers.blogspot.com/2010/11/maps-data-api-deprecation-announcement.html

+0

Bạn đã đạt được điểm! Tôi biết sẽ có một số cách đơn giản để làm điều đó. Bây giờ cho việc không sử dụng API dữ liệu Maps, một số trang web nói một điều, một số nói khác ... Hãy xem liệu điều đó có hiệu quả không! – heltonbiker

+0

Có, nó hoạt động, tôi lấy lại một chuỗi XML với thông tin về tất cả các bản đồ của tôi, nhưng tôi hoặc không biết phải làm gì với dữ liệu, và cũng là API thực sự không được chấp nhận. Vì vậy, tôi sẽ tiếp tục sử dụng regex để lấy 'MapID' từ chuỗi này và tự động tải xuống bản đồ ở định dạng KML: ''http://maps.google.com.br/maps/ms?msid=USERID.MAPID&msa=0&output= kml' – heltonbiker

Các vấn đề liên quan