【问题标题】:Accessing JSON Attributes of Tweet using Twitter API使用 Twitter API 访问推文的 JSON 属性
【发布时间】:2018-10-28 19:58:01
【问题描述】:

这是一个非常基本的问题,但无论如何它让我有点难过。我正在尝试访问推文的特定属性(找到here 的文档),例如“文本”。我尝试通过 data["text"] 访问它,但是这给了我以下错误TypeError: string indices must be integers

所以我尝试使用json.loads(data) 解析数据,认为这将允许我访问推文的每个属性。但是,这只会返回推文的文本部分,这意味着当我执行 print(newData) 时,它会打印出文本。虽然这很有用,但我需要能够访问推文的其他属性,例如 "created_at"

所以我的问题是,我如何解析推文或访问它,这样我就可以提取出我需要的各个属性。重申一下,我确信这很简单,但是我是处理 JSON 对象的新手,我发现的其他解决方案只是告诉我使用 load(),这不是我想要的。

    class TwitterStreamer():
    """
    Class for streaming and processing live tweets for a given list of hashtags
    """
    def stream_tweets(selfself, hashtag_list):
        listener = StdOutListener()
        auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
        auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

        stream = Stream(auth, listener)

        stream.filter(track=hashtag_list)


class StdOutListener(StreamListener):

    def on_data(self, data):
        print(data)
        newData = json.loads(data)
        print(newData["text"])
        return True

    def on_error(self, status):
        print(status)


def main():
    hashtag_list = ['Chelsea']
    fetched_tweets_filename = "tweets.json"
    twitter_streamer = TwitterStreamer()
    twitter_streamer.stream_tweets(hashtag_list)

main()

【问题讨论】:

    标签: python json twitter


    【解决方案1】:

    尝试使用“.”操作员访问推文的属性。我在我的代码中使用它如下:

    tweet = follow_user.status.created_at
    

    在此我以 JSON 数据的形式获取用户 "status" 是该 JSON 对象的属性 "follow_user"

    【讨论】:

    • 所以在我的例子中应该是newData.status.text?我试过了,它给了我以下错误'dict' object has no attribute 'status'
    • 将其分为两行:my_status = newData.status answer = my_status.textmy_status = newData['status'] answer = my_status['text '] 上述方法之一肯定会奏效。我一直在使用它,但实际上不知道它背后的原因 干杯
    【解决方案2】:

    尝试使用 json.load() 将 JSON 作为 Python 对象加载。 json.loads() 方法将 JSON 加载为字符串,这就是为什么它会给你一个 TypeError 异常,因为字符串对象索引只能是整数。

    【讨论】:

    • 不幸的是,当我尝试使用 load() 时,它给了我以下错误AttributeError: 'str' object has no attribute 'read',我读到这是因为json.load() 需要输入一个文件?因此我决定选择loads() 而不是load() 方法
    • 您应该使用上下文管理器来读取文件,并在使用 json.load() 加载 JSON 文件后轻松遍历该文件。使用 open('tweets.json') as f: data = json.load(f)
    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 2021-07-13
    • 2021-12-05
    • 2014-10-23
    • 1970-01-01
    • 2014-09-19
    • 2011-08-02
    • 1970-01-01
    相关资源
    最近更新 更多