2011-02-06 4 views
2

Я пишу back-end узла агрегатора ответов в python, используя Bing API (привязки python здесь: http: //uswaretech.com/blog/2009/06/ Бинг-Python-API /). Ниже мой код:Обработка ответа JSON в python для Bing API

#!/usr/bin/python 
from bingapi import bingapi 
import re 
import cgi 
import cgitb 
from HTMLParser import HTMLParser 

class MLStripper(HTMLParser): 
    def __init__(self): 
      self.reset() 
      self.fed = [] 
    def handle_data(self, d): 
      self.fed.append(d) 
    def get_data(self): 
      return ''.join(self.fed) 

def strip_tags(html): 
    s = MLStripper() 
    s.feed(html) 
    return s.get_data() 

def strip_tags2(data): 
    p = re.compile(r'<[^<]*?>') 
    q = re.compile(r'[&;[email protected]#$%^*()]*') 
    data = p.sub('', data) 
    return q.sub('', data) 

def getUrl(item): 
    return item['Url'] 

def getContent(item): 
    return item['Description'] 

def getInfo(siteStr, qry): 
    query = "{0} {1}".format(qry, siteStr) 
    bing = bingapi.Bing('APP_ID_HERE') 
    j = bing.do_web_search(query) 
    results = j['SearchResponse']['Web']['Results'] 
    return result 

def updateRecent(qry): 
    f = open("recent.txt", "r") 
    lines = f.readlines() 
    f.close() 
    lines = lines[1:] 

    if len(qry) > 50: #truncate if string too long 
      qry = (qry[:50] + '...') 
    qry = strip_tags2(qry) #strip out the html if injection try 

    lines.append("\n%s" % qry) 
    f = open("recent.txt", "w") 
    f.writelines(lines) 
    f.close() 

if __name__ == '__main__': 
    form = cgi.FieldStorage() 
    qry = form["qry"].value 
    qry = r'%s' % qry 

    updateRecent(qry) 

    siteStr = "site:answers.yahoo.com OR site:chacha.com OR site:blurtit.com OR site:answers.com OR site:question.com OR site:answerbag.com OR site:stackexchange.com" 

    print "Content-type: text/html" 
    print 

    header = open("header.html", "r") 
    contents = header.readlines() 
    header.close() 
    for item in contents: 
      print item 

    print """ 
    <div id="results"> 
    <center><h1>Results:</h1></center> 
    """ 
    print getInfo(siteStr, qry) 
    for item in getInfo(siteStr, qry): 
      print "<h3>%s</h3>" % getUrl(item) 
      print "<br />" 
      print "<p style=\"color:gray\">%s</p>" % getContent(item) 
      print "<br />" 
    print "</div>" 

    footer = open("footer.html", "r") 
    contents = footer.readlines() 
    footer.close() 
    for thing in contents: 
      print thing 

По какой-то причине, когда я запускаю это в моем браузере (отправка его запрос с использованием ввода текста) он ничего не печатает. Может кто-нибудь объяснить, почему это происходит? Thx заранее!

+0

Ваш журнал ошибок говорит? –

+0

Журнал ошибок ничего не говорит. В синтаксисе нет ошибки, иначе она вернет ошибку 500 или что-то в этом роде. –

ответ

1

Nevermind, только что нашел синтаксическую ошибку, которую apache не подобрал, я думаю. В функции «getInfo()» говорится «return result», когда он должен сказать «return results».

Смежные вопросы