Вернуть текущие твиты в tweepy?
Я пишу программу twitter, используя tweepy. Когда я запускаю этот код, он печатает значения Python... для них, например
<tweepy.models.Status object at 0x95ff8cc>
Что плохого. Как получить реальный твит?
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)
Ответы
Ответ 1
В общем, вы можете использовать встроенный dir()
встроенный Python для проверки объекта.
Казалось бы, документация Tweepy здесь очень не хватает, но я бы предположил, что объекты Status отражают структуру формата статуса REST в Twitter, см. (например) https://dev.twitter.com/docs/api/1/get/statuses/home_timeline
Итак - попробуйте
print dir(status)
чтобы узнать, что живет в объекте статуса
или просто, скажем,
print status.text
print status.user.screen_name
Ответ 2
Посмотрите на метод getstate() get, который можно использовать для проверки возвращаемого объекта
for i in pub:
print i.__getstate__()
Ответ 3
Метод api.home_timeline()
возвращает список из 20 объектов tweepy.models.Status, которые соответствуют 20 верхним твитам. То есть каждый твит считается объектом класса Status. Каждый объект состояния имеет несколько атрибутов, таких как id, text, user, place, created_at и т.д.
Следующий код напечатает идентификатор твита и текст:
tweets = api.home_timeline()
for tweet in tweets:
print tweet.id, " : ", tweet.text
Ответ 4
от фактических твитов, если у вас требуется конкретный твит, у вас должен быть идентификатор твита,
и используйте
tweets = self.api.statuses_lookup(tweetIDs)
for tweet in tweets:
#tweet obtained
print(str(tweet['id'])+str(tweet['text']))
или если вам нужны твиты вообще
использовать поток twitter 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)
создать класс Stdoutlistener, который унаследован от StreamListener
переопределить функцию on_data, а твит возвращается в json формате, эта функция запускается каждый раз, когда получается твит
твиты отфильтровываются по стоп-словам
который является списком u слов u хочет в ур твиты
Ответ 5
В экземпляре состояния Tweepy вы можете получить доступ к атрибуту _json
, который возвращает dict, представляющий исходный содержимое Tweet.
Например:
type(status)
# tweepy.models.Status
type(status._json)
# dict
status._json.keys()
# dict_keys(['favorite_count', 'contributors', 'id', 'user', ...])