2015-07-02 15 views
0

我試圖用這個方法來節省Twitter的API獲得的一些數據:快譯通錯誤節省了MongoDB的數據 - InvalidDocument:不能編碼對象

def getTweets(usuario): 
    api = Autentificacion.autentificacion() 
    usuari = api.get_user(usuario) 
    dic = {} 

    page_list = [] 
    for page in tweepy.Cursor(api.user_timeline, id=usuario, count=200).pages(16): 
     page_list.append(page)  

    for page in page_list: 
     for status in page:   
      id_tweet = str(status.id) 
      tweet = {usuari.screen_name, status.text, status.created_at} 

      try: 
       dic[id_tweet]= tweet 
      except (KeyError, TypeError, ValueError): 
       print "Error al introducir datos en el diccionario"  
    try: 
     datos = Controles() 
     datos.saveOnBD(dic) 
    except PyMongoError, e: 
     print "Error: ", e 

的方法saveOnDB(DIC)

def saveOnBD(self, dic): 
    client = MongoClient('server', port) 
    db = client.DB_Tweets_User_Date 
    collection = db.tweets 
    collection.insert_one(dic) 

這是回溯:

... 
collection.insert_one(dic) 
File "C:\Python27\lib\site-packages\pymongo\collection.py", line 467, in insert_one 
return InsertOneResult(self._insert(sock_info, document), 
File "C:\Python27\lib\site-packages\pymongo\collection.py", line 430, in _insert 
gen(), check_keys, self.codec_options, sock_info) 
bson.errors.InvalidDocument: Cannot encode object: set([u'That is a testing tweet', datetime.datetime(2015, 7, 2, 8, 23, 30), u'user']) 

我發現很多SI類似問題,但解決方案對我無效。

回答

2

錯誤消息

bson.errors.InvalidDocument: Cannot encode object: set([u'That is a testing tweet', datetime.datetime(2015, 7, 2, 8, 23, 30), u'user']) 

表明你正在設置在你的代碼中的無效的對象。

的錯誤是在這一行,這就是Python 2.7+語法一個Python 設置

tweet = {usuari.screen_name, status.text, status.created_at} 

這一點,它創建了一個字典

tweet = {'screen_name': usuari.screen_name, 'text': status.text, 'created_at': status.created_at} 
+1

非常感謝你許多!有用! – Jota