【问题标题】:How to save JSON from Vk.com API response to MongoDB?如何将来自 Vk.com API 响应的 JSON 保存到 MongoDB?
【发布时间】:2014-10-29 16:51:47
【问题描述】:

我正在尝试使用 Vontakte、mongoengine、Django 从 Vk.com 获取墙帖列表 这是我的看法,wallposts = vk.get('wall.get', owner_id=237897731, offset=0, count=10) 是 Vk.com API 调用:

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 的动态数据。但我想保存它以备后用。所以,我认为问题是如何将 JSON 响应保存到 MongoDB?

【问题讨论】:

    标签: json django mongodb mongoengine vk


    【解决方案1】:

    那么,您看到 wallposts 变量中有什么了吗?

    原因,我认为,错误消息很清楚:在循环变量 wallpost 中,您有 int 值。当然,尝试调用 save() 会引发异常。可能是,wallposts 中的对象有整数索引,你觉得呢?

    尝试打印您在 wallposts 中的内容。

    【讨论】:

    • 如果我在 vk_posts 中为 vk_post 执行 vk_posts = vk.get('wall.get', owner_id=1519369, offset=0, count=5):打印 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'cs540104.vk.me/c540103/v5401039 ....... u'from_id': 71201089}
    【解决方案2】:

    这很简单,我很惊讶没有答案: 我需要使用原始 Pymongo:

    wallpost.save()  
    

    不正确,因为使用预定义字段保存 django 模型

    VkWallPost._get_collection().insert(vk_post)
    

    这是正确的 - 我们使用原始 pymongo insert

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 1970-01-01
      • 2016-08-06
      • 2018-10-21
      • 1970-01-01
      • 2019-11-09
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多