Пост в твиттере Python 3.1 с установленной библиотекой, - PullRequest
3 голосов
/ 11 мая 2010

Я бы хотел иметь возможность публиковать твиттер-сообщения от python 3.0. Ни в одном из твиттер-API я не смотрел поддержку Python 3.1. Поскольку для продолжения работы требуется только:

JSON: curl -u username:password -d status="your message here" http://api.twitter.com/1/statuses/update.json 

Мне было интересно, возможно ли с помощью стандартных библиотек отформатировать это так, чтобы можно было отправить сообщение. Моя голова говорит, что это должно быть возможно.

1 Ответ

2 голосов
/ 14 мая 2010

Попробуйте это:

import urllib.request
import urllib.parse
import base64

def encode_credentials(username, password):
    byte_creds = '{}:{}'.format(username, password).encode('utf-8')
    return base64.b64encode(byte_creds).decode('utf-8')

def tweet(username, password, message):
    encoded_msg = urllib.parse.urlencode({'status': message})
    credentials = encode_credentials(username, password)
    request = urllib.request.Request(
         'http://api.twitter.com/1/statuses/update.json')
    request.add_header('Authorization', 'Basic ' + credentials)
    urllib.request.urlopen(request, encoded_msg)

Затем позвоните tweet('username', 'password', 'Hello twitter from Python3!').

Функция urlencode подготавливает сообщение для запроса HTTP POST.

Объект Request использует HTTP-аутентификацию, как описано здесь: http://en.wikipedia.org/wiki/Basic_access_authentication

Методы urlopen отправляют запрос в твиттер. Когда вы передаете ему некоторые данные, он использует POST, в противном случае GET.

Используются только части стандартной библиотеки Python3. Однако, если вы хотите работать с HTTP, вам следует пересмотреть использование сторонних библиотек. В этой главе Dive Into Python 3 объясняется, как и почему.

...