2010-05-11 1 views
3

Я бы хотел (-а) публиковать сообщения twitter из python 3.0. Ни один из API twitter я не посмотрел на поддержку python 3.1. Так как пост proceedure требуется только это:Python 3.1 твиттер с установленной библиотекой,

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

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

ответ

2

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

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

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

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

+0

Работает как шарм, - точка примечания для кого-либо еще, пытающегося его, если вы отправляете одно и то же сообщение дважды, оно выдает исключение. – Andrew