2014-09-04 54 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