возвращает фактические твиты в tweepy?

#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', ...])