【问题标题】:How to export the contents of a blog to JSON?如何将博客内容导出为 JSON?
【发布时间】:2013-08-27 05:52:24
【问题描述】:

我正在写博客并同时学习网络开发。我想了解有关 JSON 的更多信息,因此我尝试实现一种将博客的全部内容导出为 JSON 和更高版本的 XML 的方法。我在路上遇到了很多问题,最大的问题是获取我想要动态呈现为 JSON/XML 的页面的 url。我的网站的代码可以在here 找到。我仍然需要更多评论,我必须实现很多功能。负责将内容导出为 JSON 的主要类如下:

class JSONHandler(BaseHandler):
#TODO: get a way to gt the url from the request
def get(self):
    self.response.headers['Content-Type'] = 'application/json'
    url = "http://www.bigb-myapp.appspot.com/blog" 
    #url = self.request.path_url
    logging.info(url)
    page = urllib2.urlopen(url).read()
    soup = BeautifulSoup(page)
    subject_list = []
    day_list = []
    content_list = []

    subjects = soup.findAll('div', {'class' : 'subject-title'})
    days = soup.findAll('div', {'class' : 'day'})
    contents = soup.findAll('div', {'class' : 'post'})

    for subject in subjects:
        subject_list.append(subject.findAll(text = True))

    for day in days:
        day_list.append(day.findAll(text = True))

    for content in contents:
        content_list.append(content.findAll(text = True))

    i = 0

    for s, d, c in subject_list, day_list, content_list:
        json_text = json.dumps({'subject': s[i][i],'day': d[i][i], 'content': c[i][i]})
        i += 1

    self.write(json_text)

我也确定打印功能是错误的,但这是容易的部分。正如我所说,获取网址被证明是一个主要困难。

我试图从环境变量中获取 url,并且我也厌倦了 webapp2 的请求处理程序,例如 self.request.path_url 无济于事。

我正在使用 Google App 引擎并使用 jinja2 模板引擎。

谢谢。

【问题讨论】:

  • “最大的问题是获取我想要动态呈现为 JSON/XML 的页面的 url”是什么意思?
  • @LaszloPapp 我刚刚更详细地编辑了这个问题。我的意思是我不想对 url 进行硬编码,而是想从请求中获取它。但事实证明这很困难。我想要这个,因为我的主页和永久链接页面都有类似的模板,所以我也可以使用同一个类将这些页面导出为 JSON。

标签: python json google-app-engine


【解决方案1】:

self.request.urlself.request.path 应该可以解决问题。 但是,更好的方法是使用类似于您在永久链接部分中使用的方法。只需从请求中解析 post-id 即可。这意味着您应该将 JSONHandler 分为处理两件事 - a) 返回整个博客,b) 返回单个帖子。

我还建议不要使用您用来获取博客文章的这种方法...在 Mainpage 类中,您使用 GQL 做得如此优雅,那么为什么要使用 urllib2 和 BeautifulSoup 呢?

关于最后一个关于回复的问题..正确的方法是:self.response.out.write("something")

编辑添加:
我的意思是将 JSONHandler 分成两部分,这样就会有两个处理程序:('/blog/(\d+).json',PermalinkJSONHandler),
('/blog.json',FullJSONHandler),...

两者应该差不多(即使使用相同的函数来转储 json)只是使用不同的 GQL 来获取正确的信息。

【讨论】:

  • 非常感谢你,我真的没有想到这一点。它确实为初学者提供了很多选择并提出了一些问题,我将如何拆分 JSONHandler ?我会考虑这个的,再次感谢。
  • self.write实际上是一个使用它的函数self.response.out.write
  • @Bhargav 为了在 JSON 中输出某些内容,请使用:stackoverflow.com/questions/12664696/…
  • @Lipis 我现在让它工作了,我让它工作了,正如 Ofir 在他的编辑中提到的那样,通过为 JSON 制作两个处理程序,输出 JSON 从来都不是问题。感谢大家的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
相关资源
最近更新 更多