我正在开发博客并同时学习网页开发。我想了解有关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模板引擎。
感谢。
答案 0 :(得分: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来获取正确的信息。