#python #twitter #tweepy
#python #Twitter #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. Спасибо. Это очень полезно для объектов в целом.
Ответ №1:
В общем, вы можете использовать dir()
встроенный Python для проверки объекта.
Казалось бы, документации Tweepy здесь очень не хватает, но я бы предположил, что объекты статуса отражают структуру формата статуса REST в Twitter, см. (Например) https://dev.twitter.com/docs/api/1/get/statuses/home_timeline
Итак, попробуйте
print dir(status)
чтобы увидеть, что находится в объекте status
или просто, скажем,
print status.text
print status.user.screen_name
Комментарии:
1.
dir()
это потрясающая функция
Ответ №2:
Взгляните на метод getstate() get, который можно использовать для проверки возвращаемого объекта
for i in pub:
print i.__getstate__()
Ответ №3:
api.home_timeline()
Метод возвращает список из 20 tweepy.models.Объекты состояния, которые соответствуют 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']))
или, если вам нужны твиты в целом
, используйте API потока Twitter
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, и tweet возвращается в формате json, эта функция запускается каждый раз, когда получается tweet
, твиты фильтруются по стоп
-словам, которые представляют собой список u слов, которые u хочет использовать в своих твитах
Ответ №5:
В экземпляре статуса tweepy вы можете получить доступ к _json
атрибуту, который возвращает dict, представляющий исходное содержимое твита.
Например:
type(status)
# tweepy.models.Status
type(status._json)
# dict
status._json.keys()
# dict_keys(['favorite_count', 'contributors', 'id', 'user', ...])