1

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

谢谢。

4

1 回答 1

2

self.request.url或者self.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 来获取正确的信息。

于 2013-08-24T07:07:39.277 回答