tutorial - twitter bot python
devolver tweets reales en tweepy? (5)
Estaba escribiendo un programa de Twitter usando tweepy. Cuando ejecuto este código, imprime los valores de Python ... para ellos, como
<tweepy.models.Status object at 0x95ff8cc>
Lo cual no es bueno ¿Cómo obtengo el tweet real?
import tweepy, tweepy.api
key = XXXXX
sec = XXXXX
tok = XXXXX
tsec = XXXXX
auth = tweepy.OAuthHandler(key, sec)
auth.set_access_token(tok, tsec)
api = tweepy.API(auth)
pub = api.home_timeline()
for i in pub:
print str(i)
En general, puede usar el comando dir()
incorporado en Python para inspeccionar un objeto.
Parece que la documentación de Tweepy es muy deficiente aquí, pero me imagino que los objetos de estado reflejan la estructura del formato de estado de REST de Twitter, ver (por ejemplo) https://dev.twitter.com/docs/api/1/get/ estados / home_timeline
Entonces, prueba
print dir(status)
para ver lo que vive en el objeto de estado
o solo, digamos,
print status.text
print status.user.screen_name
Eche un vistazo al método getstate () get que puede usarse para inspeccionar el objeto devuelto
for i in pub:
print i.__getstate__()
El método api.home_timeline()
devuelve una lista de 20 objetos tweepy.models.Status que corresponden a los 20 tweets principales. Es decir, cada Tweet se considera como un objeto de la clase de Estado. Cada objeto de estado tiene una serie de atributos como id, texto, usuario, lugar, created_at, etc.
El siguiente código imprimirá la identificación de tweet y el texto:
tweets = api.home_timeline()
for tweet in tweets:
print tweet.id, " : ", tweet.text
de los tweets reales, si desea un tweet específico, debe tener una identificación de tweet y usar
tweets = self.api.statuses_lookup(tweetIDs)
for tweet in tweets:
#tweet obtained
print(str(tweet[''id''])+str(tweet[''text'']))
o si desea tweets en general, use Twitter Stream api
class StdOutListener(StreamListener):
def __init__(self, outputDatabaseName, collectionName):
try:
print("Connecting to database")
conn=pymongo.MongoClient()
outputDB = conn[outputDatabaseName]
self.collection = outputDB[collectionName]
self.counter = 0
except pymongo.errors.ConnectionFailure as e:
print ("Could not connect to MongoDB:")
def on_data(self,data):
datajson=json.loads(data)
if "lang" in datajson and datajson["lang"] == "en" and "text" in datajson:
self.collection.insert(datajson)
text=datajson["text"].encode("utf-8") #The text of the tweet
self.counter += 1
print(str(self.counter) + " " +str(text))
def on_error(self, status):
print("ERROR")
print(status)
def on_connect(self):
print("You''re connected to the streaming server.
l=StdOutListener(dbname,cname)
auth=OAuthHandler(Auth.consumer_key,Auth.consumer_secret)
auth.set_access_token(Auth.access_token,Auth.access_token_secret)
stream=Stream(auth,l)
stream.filter(track=stopWords)
crear una clase Stdoutlistener que se hereda de la función OverLide de StreamListener on_data, y se devuelve tweet en formato json, esta función se ejecuta cada vez que se obtiene tweet, los tweets se filtran de acuerdo a stopwords, que es una lista de las palabras que quiere en sus tuits
En una instancia de Estado tweepy, puede acceder al atributo _json
, que devuelve un dict que representa los contenidos originales de Tweet .
Por ejemplo:
type(status)
# tweepy.models.Status
type(status._json)
# dict
status._json.keys()
# dict_keys([''favorite_count'', ''contributors'', ''id'', ''user'', ...])