2012-04-06 3 views
0

Toutes mes excuses, vous est simple:TypeError connexion à tweetstream - Python 3.2

Nouveau sur Python et aux interfaces Python avec l'API de streaming de Twitter, en essayant d'utiliser tweetstream sur Python 3.2 pour le faire.

import tweetstream 
stream = tweetstream.FilterStream(username = "myusername", password = "mypassword", track = bytes("oprah", encoding = "utf-8")) 
for tweet in stream: 
    print(tweet) 

Génère:

TypeError: Point séquence 0: instance str prévu, int trouvé

j'ai codé l'argument 'de la piste' parce que les tentatives précédentes pour passer une chaîne jeté,

TypeError: les données POST doivent être des octets ou des itérables d'octets. Ça ne peut pas être str.

Merci.

+0

Est-ce que tweetstream est compatible avec python 3.2? Si tweatstream fait quelque chose comme u'thisisautfstring 'alors python3K va lancer quelques erreurs. Cela dit, où se passe l'erreur? Je suppose dans la ligne "stream =", mais avez-vous le retraçage complet? Ce serait utile –

+0

Je viens de regarder la base de code, il semble attraper quelques trucs python 3k, mais je pense que cela est en grande partie inappliquée. Il n'y a pas d'urllib2 dans python3k sans moyen de l'attraper. –

+0

J'ai compris, merci. La trace complète était: Fichier "", ligne 1, dans \ n Fichier "C: \ Python ... (emplacement de tweetstream) ... \ streamclasses.py", ligne 165, dans __iter__ \ n self._init_conn() \ n Fichier "C: \ Python ... (emplacement de tweetstream) ... \ streamclasses.py", ligne 86, dans init_conn \ n postdata = self._get_post_data() ou {} \ n Fichier "C: \ Python ... (emplacement de tweetstream) ... \ streamclasses.py ", ligne 232, dans _get_post_data \ n si self._track: postdata ['track'] =", ". Join (self._track) \ n TypeError: élément de séquence 0: instance str attendue, int trouvé. – Zack

Répondre

0

Votre problème est que vous utilisez Python3 avec un paquet Python2.

Voir ici pour plus d'informations sur les octets python3:

http://docs.python.org/release/3.0.1/library/functions.html#bytes

également ceci:

http://docs.python.org/whatsnew/2.6.html#pep-3112-byte-literals

En python3, cela envoie un tableau d'octets. Cependant, la fonction _get_post_data attend une chaîne. La façon dont les chaînes sont traitées dans python3 et python2 est totalement différente et source de beaucoup de frustration pour ceux qui souhaitent porter sur Python3.

À moins que ce paquet ne le rende compatible avec Python3, vous devrez utiliser Python2. Vous pouvez le faire vous-même bien sûr, mais compte tenu de tout autre paquet que vous utiliserez sera également limité à l'utilisation de python2, je recommanderais d'aller de cette façon.

Fondamentalement, en python 2.6/2.7, si vous

b = bytes('a') 
print type(b) 

vous obtiendrez le type str

En Python 3, si vous

b = bytes('a') 
print(type(b)) 

Vous obtiendrez le type " bytearray "