2010-05-11 6 views
3

Je voudrais être en mesure de poster des messages twitter à partir de python 3.0. Aucune des API de Twitter que j'ai consultées ne supporte python 3.1. Depuis le proceedure post exige seulement ceci:Python 3.1 twitter post avec la bibliothèque installée,

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

Je me demandais s'il est possible avec les bibliothèques standard pour formater ce donc un message peut être envoyé. Ma tête dit que cela devrait être possible.

Répondre

2

Essayez ceci:

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) 

appellent ensuite tweet('username', 'password', 'Hello twitter from Python3!'). La fonction urlencode prépare le message pour la demande HTTP POST.

L'objet Request utilise l'authentification HTTP comme expliqué ici: http://en.wikipedia.org/wiki/Basic_access_authentication

Les méthodes urlopen envoie la demande au twitter. Lorsque vous lui transmettez des données, il utilise POST, sinon GET.

Ceci utilise uniquement des parties de la bibliothèque standard Python3. Cependant, si vous voulez travailler avec HTTP, vous devriez reconsidérer en utilisant des bibliothèques tierces. Ce Dive Into Python 3 chapter explique comment et pourquoi.

+0

Fonction Comme un charme, - point de remarque pour quelqu'un d'autre l'essayant, si vous envoyez le même message deux fois, il lèvera une exception. – Andrew