2013-05-15 4 views
0

Итак, у меня есть скрипт CGI на Python, запущенный на моем сервере apache. В принципе, с веб-страницы пользователь вводит слово в форму, и это слово передается скрипту. Затем слово используется для запроса API поиска в Twitter и возврата всех твитов для этого слова. Поэтому проблема заключается в том, что я запускаю этот запрос в цикле, чтобы получить три страницы результатов (около 300 твитов). Но то, что я называю сценарием (который печатает все твиты на HTML-странице), на странице иногда будет отображаться 5 твитов, иногда 18, полные случайные числа. Является ли это проблемой тайм-аута, или я пропустил некоторые основные в моем коде? Python CGI скрипт, размещенный ниже, спасибо заранее.Python CGI-скрипт, возвращающий непоследовательные результаты

#!/usr/bin/python 

# Import modules for CGI handling 
import cgi, cgitb 
import urllib 
import json 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields 
topic = form.getvalue('topic') 


results=[] 


for x in range(1,3): 
    response = urllib.urlopen("http://search.twitter.com/search.json?q="+topic+"&rpp=100&include_entities=true&result_type=mixed&lang=en&page="+str(x)) 
    pyresponse= json.load(response) 
    results= results + pyresponse["results"] 



print "Content-type:text/html\r\n\r\n" 
print "<!DOCTYPE html>" 
print "<html>" 
print "<html lang=\"en\">" 
print "<head>" 
print "<meta charset=\"utf-8\" />" 
print "<meta name=\"description\" content=\"\"/>" 
print "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>" 
print "<title>Data analysis for %s </title>" %(topic) 
print "</head>" 
print "<body>" 
print "<label>" 
for i in range(len(results)): 
    print str(i)+": "+results[i]["text"]+ "<br></br>" 
print "</label>" 
print "</body>" 
print "</html>" 

ответ

1

Прежде всего я хотел бы отметить, что range(1,3) не получит вам три страницы, как вы ожидаете.

Однако выполнение кода Python в интерпретатор встречается исключение в этой точке:

>>> for i in range(len(results)): 
... print str(i) + ": "+ results[x]["text"] 

<a few results print successfully> 

UnicodeEncodeError: 'latin-1' codec can't encode character u'\U0001f611' 
in position 121: ordinal not in range(256) 

Изменение кодировки затем напечатает их всех:

>>> for i in range(len(results)): 
... print str(i) + ": "+ results[i]["text"].encode('utf-8') 
<success> 
+0

Ха-ха, спасибо, просто понял, что тоже. Спасибо хоть! – user1493543

+0

взаимно независимое открытие :) –

1

Хорошо, понял. Это было действительно глупое исправление. В принципе, поскольку Python анализирует JSON, ему необходимо закодировать весь текст в формате UTF-8, чтобы он отображался правильно.

print str(i)+": "+results[i]["text"].encode('utf-8')+ "<br></br>" 

Ничего общего с самим скриптом или сервером.