2014-01-08 18 views
0

,我一直在努力需要来自用户的输入,输出与一堆基于关键字结果的应用。我使用的网页抓取到报废的结果。谷歌应用程序引擎:创建一个自定义错误页

下面是相同的Python代码:

import os 
import webapp2 
import jinja2 
from google.appengine.ext import db 
import urllib2 
import re 

template_dir = os.path.join(os.path.dirname(__file__), 'templates') 
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True) 

class Handler(webapp2.RequestHandler): 
    def write(self, *a, **kw): 
     self.response.out.write(*a, **kw) 
    def render_str(self, template, **params): 
     t = jinja_env.get_template(template) 
     return t.render(params) 
    def render(self, template, **kw): 
     self.write(self.render_str(template, **kw)) 

class MainPage(Handler): 
    def get(self): 
     self.render("formrss.html") 
    def post(self): 
     x = self.request.get("rssquery") 
     url = "http://www.quora.com/" + x + "/rss" 
     content = urllib2.urlopen(url).read() 
     content = content.decode('utf-8') 
     allTitles = re.compile('<title>(.*?)</title>') 
     allLinks = re.compile('<link>(.*?)</link>') 
     list = re.findall(allTitles,content) 
     linklist = re.findall(allLinks,content) 
     self.render("frontrss.html", list = list, linklist = linklist) 



app = webapp2.WSGIApplication([('/', MainPage)], debug=True) 

现在,因为我通过将用户输入的关键词获得最终的URL,总有一个机会,从关键字得到的网址是无效的。因此,在这种情况下,用户得到一个404错误。

这里的应用程序的实时演示:

http://quorable.appspot.com/

我如何才能避免这个错误?或者说,我怎么能显示的情况下获得的网址无法使用用户自定义消息?我不希望用户认为应用程序被破坏或发生故障时代替用户输入的关键字是无效的。

回答

1
import... 

def handleNone(request, response, exception): 
    logging.exception(exception) # if you need some logging 
    response.headers['Content-Type'] = 'text/html' 
    response.write('No feed for this keywords. Go <a href="/">back</a>') 
    response.set_status(404) 

app = webapp2.WSGIApplication([('/', MainPage)], debug=True) 

app.error_handlers[404] = handleNone 

顺便说一句,你最好做一个重定向,如果Quora的服务器响应404 检查urllib2.urlopen()reference docs

req = urllib2.Request(yourURL) 
try: urllib2.urlopen(req) 
except URLError as e: 
    if e.code == 404: 
     redirect_to_a_no_results_page() 
else: 
     fetch_the_results() 
相关问题