urllib.urlencode问题

时间:2012-03-07 14:52:27

标签: python json api csv urllib

我正在尝试编写一个向TweetSentiments.com API发送查询的python脚本。

这个想法是它会像这样表现 - 读取CSV推文文件>构造查询>询问API>格式JSON响应>写入CSV文件。

到目前为止,我已经想出了这个 -

import csv
import urllib
import os

count = 0

TweetList=[] ## Creates empty list to store tweets.

TweetWriter = csv.writer(open('test.csv', 'w'), dialect='excel', delimiter=' ',quotechar='|')
TweetReader = csv.reader(open("C:\StoredTweets.csv", "r"))

for rows in TweetReader:

    TweetList.append(rows)

#print TweetList [0]

for rows in TweetList:

    data = urllib.urlencode(TweetList[rows])
    connect = httplib.HTTPConnection("http://data.tweetsentiments.com:8080/api/analyze.json?q=")
    connect.result = json.load(urllib.request("POST", "", data))
        TweetWriter.write(result)

但是当它运行时我得到“第20行,data = urllib.urlencode(TweetList [rows])类型错误:列表索引必须是整数,而不是列表”

我知道我的列表“TweetList”正在按照我的意愿存储推文,但我不认为我正在使用urllib.urlencode正确。 API要求查询像 -

一样发送

http://data.tweetsentiments.com:8080/api/analyze.json?q=(要分析的文字)

所以我的想法是urllib.urlencode只是将推文添加到地址的末尾以允许查询。

在看了这么多例子之后,最后四行代码变得一团糟。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不是100%肯定你正在尝试做什么,因为我不知道你正在阅读的文件的格式是什么,但这部分看起来很可疑:

for rows in TweetList:
    data = urllib.urlencode(TweetList[rows])

因为 TweetList 是一个列表,for循环在每次迭代中从列表中放入一个单独的值,所以这个例如:

list = [1, 2, 3, 4]
for num in list:
    print num

将打印1 2 3 4.但如果这样:

list = [1, 2, 3, 4]
for num in list:
    print list[num]

最终会出现此错误: IndexError:列表索引超出范围

您能否详细说明您正在阅读的文件的格式?


修改

如果我理解正确,你需要这样的东西:

tweets = []
tweetReader = csv.reader(open("C:\StoredTweets.csv", "r"))

for row in tweetReader:
    tweets.append({ 'tweet': row[0], 'date': row[1] })

for row in tweets:
    data = urllib.urlencode(row)
    .....