0

そのため、Apache サーバーで Python CGI スクリプトを実行しています。基本的に、ユーザーが Web ページからフォームに単語を入力すると、その単語がスクリプトに渡されます。次に、この単語を使用して Twitter Search API をクエリし、その単語のすべてのツイートを返します。問題は、このクエリをループで実行しているため、3 ページの結果が返されることです (約 300 ツイート)。しかし、私がスクリプト (すべてのツイートを HTML ページに出力するスクリプト) と呼んでいるものは、ページに 5 つのツイート、場合によっては 18 個の完全な乱数が表示されることがあります。これはタイムアウトの問題ですか、それともコードに基本的なものが欠けていますか? 以下に投稿された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>"
4

2 に答える 2

1

まず第一に、range(1,3)あなたが期待しているような 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>
于 2013-05-15T02:58:36.123 に答える
1

はい、わかった。それは実際には本当にばかげた修正でした。基本的に、Python は JSON を解析しているため、正しく表示できるようにすべてのテキストを UTF-8 形式にエンコードする必要があります。

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

スクリプトやサーバー自体とは関係ありません。

于 2013-05-15T02:59:36.513 に答える