如何将博客的内容导出到JSON?

时间:2013-08-24 05:44:15

标签: python json google-app-engine

我正在开发博客并同时学习网页开发。我想了解有关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模板引擎。

感谢。

1 个答案:

答案 0 :(得分:2)

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来获取正确的信息。