2014-09-04 72 views
0

我試圖用Vontakte,mongoengine擺脫Vk.com的牆後的名單,Django的 這是我的看法,其中wallposts = vk.get('wall.get', owner_id=237897731, offset=0, count=10)是Vk.com API調用:如何將VK.com API響應中的JSON保存到MongoDB?

import vkontakte 
vk = vkontakte.API(token=access_token) 
class VkWallPostListView(ListView): 
    model = VkWallPost 
    context_object_name = "vk_list" 

    def get_template_names(self): 
     return ["blog/vk_list.html"] 

    def get_queryset(self): 
     wallposts = VkWallPost.objects 
     if 'all_posts' not in self.request.GET: 
      wallposts = vk.get('wall.get', owner_id=237897731, offset=0, count=10) 
      for wallpost in wallposts: 
       wallpost.save() 
      #wallposts = wallposts.filter(text__startswith='RT') 
     tag = self.request.GET.get('tag', None) 
     if tag: 
      wallposts = wallposts.filter(tags=tag) 
     return wallposts 

此外,在這種觀點我試圖實際通話後立即保存API調用的MongoDB的結果:

 for wallpost in wallposts: 
      wallpost.save() 

但在瀏覽器中,我看到了一個錯誤:

Exception Value:  

'int' object has no attribute 'save' 

Exception Location:  c:\Users\JOOMLER\BitNami_DjangoStack\django_mongo_test\blog\views.py in get_queryset, line 109 

如果我刪除這兩個字符串的週期都工作正常,並顯示來自VK.com在瀏覽器中的飛行數據。但我想保存它以備後用。所以,我認爲問題是如何保存到MongoDB的JSON響應?

回答

1

這很簡單,我很驚訝,沒有答案: 我需要使用原始Pymongo:

wallpost.save() 

是不正確的,因爲保存預定義的字段

VkWallPost._get_collection().insert(vk_post) 

這是Django的模型正確 - 我們使用原始pymongo insert

0

那麼,你有沒有看到你有什麼wallposts變量?

原因,我認爲,錯誤信息是相當清楚的:在循環變量wallpost你有INT值。當然,試圖撥打save()會拋出異常。可能是,對象在wallposts有整數指數,你覺得呢?

嘗試打印您在wallposts中有什麼。

+0

這裏是討論https://plus.google.com/u/0/+VicNgrail/posts/f8YWYtdqGSz – 2014-09-13 18:28:17

+0

我音響做 vk_posts = vk.get( 'wall.get',owner_id = 1519369,偏移= 0,計數= 5) 用於vk_post在vk_posts: 打印vk_post 我在控制檯得到了數1367次這樣 的項目{u'likes':{u'count':4,u'can_publish':1,u'can_like':1,u'user_likes':0},u'attachments':[{u'photo':{u 'access_key':u'dff779d5b0ebfa8818',u'src':u'http://cs540104.vk.me/c540103/v5401039 ....... u'from_id':71201089} – 2014-09-13 18:29:05