keyerror

w9apscun  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(445)

使用tweepy,我试图实时流化tweets并将其保存到数据库sqlite中,但一旦加载json文件并存储到数据库中,错误就会不断发生 KeyError : created_at 但是已经有一把钥匙了 created_at . 我也尝试过与其他人合作,但错误依然存在。
这是我的密码:

  1. import sqlite3
  2. conn = sqlite3.connect("twitter.db")
  3. import sys
  4. import tweepy
  5. import json
  6. tb_create = "CREATE TABLE tweets2(created_at, favorite_count, favorited, filter_level, lang, retweet_count, retweeted, source, text, truncated, user_created_at, user_followers_count, user_location, user_lang, user_name, user_screen_name, user_time_zone, user_utc_offset, user_friends_count)"
  7. c = conn.cursor()
  8. c.execute(tb_create)
  9. conn.commit
  10. import tweepy
  11. class MaxListener(tweepy.StreamListener):
  12. def on_data(self, raw_data):
  13. all_data = json.loads(raw_data)
  14. created_at = all_data['created_at']
  15. favorite_count = all_data["favorite_count"]
  16. favorited = all_data["favorited"]
  17. filter_level = all_data["filter_level"]
  18. lang = all_data["lang"]
  19. retweet_count = all_data["retweet_count"]
  20. retweeted = all_data["retweeted"]
  21. source = all_data["source"]
  22. text = all_data["text"]
  23. truncated = all_data["truncated"]
  24. user_created_at = all_data["user"]["created_at"]
  25. user_followers_count = all_data["user"]["followers_count"]
  26. user_location = all_data["user"]["location"]
  27. user_lang = all_data["user"]["lang"]
  28. user_name = all_data["user"]["name"]
  29. user_screen_name = all_data["user"]["screen_name"]
  30. user_time_zone = all_data["user"]["time_zone"]
  31. user_utc_offset = all_data["user"]["utc_offset"]
  32. user_friends_count = all_data["user"]["friends_count"]
  33. c.execute("INSERT INTO tweets2(created_at, favorite_count, favorited, filter_level, lang, retweet_count, retweeted, source, text, truncated, user_created_at, user_followers_count, user_location, user_lang, user_name, user_screen_name, user_time_zone, user_utc_offset, user_friends_count) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", (created_at, favorite_count, favorited, filter_level, lang, retweet_count, retweeted, source, text, truncated, user_created_at, user_followers_count, user_location, user_lang, user_name, user_screen_name, user_time_zone, user_utc_offset, user_friends_count))
  34. conn.commit()
  35. def process_data(delf,raw_data):
  36. print(raw_data)
  37. def on_error(self, status_code):
  38. if status_code == 420:
  39. return False
  40. class MaxStream():
  41. def __init__(self, auth, listner):
  42. self.stream = tweepy.Stream(auth=auth, listener=listener)
  43. def start(self, keyword_list):
  44. self.stream.filter(track= keyword_list)
  45. if __name__ == "__main__":
  46. listener = MaxListener()
  47. from tweepy import OAuthHandler
  48. auth = OAuthHandler(ckey, csecret)
  49. auth.set_access_token(atoken, asecret)
  50. stream = MaxStream(auth, listener)
  51. stream.start("python")

错误

  1. KeyError Traceback (most recent call last)
  2. <ipython-input-4-0bf7c95f9c6c> in <module>()
  3. 55
  4. 56 stream = MaxStream(auth, listener)
  5. ---> 57 stream.start("python")
  6. 8 frames
  7. <ipython-input-4-0bf7c95f9c6c> in on_data(self, raw_data)
  8. 10 all_data = json.loads(raw_data)
  9. 11
  10. ---> 12 created_at = all_data['created_at']
  11. 13 favorite_count = all_data["favorite_count"]
  12. 14 favorited = all_data["favorited"]
  13. KeyError: 'created_at'
r7knjye2

r7knjye21#

on_data 接收来自流的所有数据,包括非tweet有效负载的消息类型。
这个 KeyError 几乎可以肯定的是,当接收到其他消息类型之一时会发生。
在使用推特之前,应检查是否存在特定于twitt的属性,或考虑使用 on_status 相反

相关问题