2

我正在尝试通过 Python 脚本写一些笔记。

OSM API 应该支持 HTTP 基本认证。

按照我在 Python 文档中找到的示例,我编写了这个脚本:

#!/usr/bin/env python3

import urllib.request
import urllib.parse

url = 'http://api.openstreetmap.org/api/0.6/notes'
username = 'Stemby'
password = input('password > ')


# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib.request.HTTPBasicAuthHandler()
auth_handler.add_password(realm='Web Password',
        uri=url, user=username,
        passwd=password)
opener = urllib.request.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib.request.install_opener(opener)


def send_note(lat, lon, text):
    data = dict(lat=lat, lon=lon, text=text)
    urllib.request.urlopen(url, urllib.parse.urlencode(data).encode('utf8'))


lat = input('lat > ')
lon = input('lon > ')
text = input('text > ')

send_note(lat, lon, text)

我在这里找到了境界。

这样我可以创建新的笔记,但是这些笔记是匿名的;所以身份验证不起作用。

你能帮助我吗?

我在 Debian Jessie 上使用 Python 3.2.4。

谢谢!

4

1 回答 1

2

通过使用Requests解决。在 Debian 上,软件包名称是“python3-requests”。

这是我的脚本:

#!/usr/bin/env python3

import requests

url = 'http://api.openstreetmap.org/api/0.6/notes'
username = input('username > ')
password = input('password > ')

def send_note(lat, lon, text):
    data = dict(lat=lat, lon=lon, text=text)
    requests.post(url, data=data, auth=(username, password))

lat = input('lat > ')
lon = input('lon > ')
text = input('text > ')

send_note(lat, lon, text)

再见!

于 2013-07-06T09:28:48.693 回答