2013-05-15 77 views
0

所以我有一個運行在我的apache服務器上的Python CGI腳本。基本上,從網頁中,用戶將一個單詞輸入到一個表單中,並將該單詞傳遞給該腳本。然後該單詞用於查詢Twitter搜索API並返回該單詞的所有推文。所以問題是,我在一個循環中運行這個查詢,所以我得到了三頁返回的結果(大約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>" 

與腳本或服務器本身無關。

相關問題