Проблемы с urllib.urlencode - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь написать скрипт на python, который отправляет запрос в API TweetSentiments.com.

Идея в том, что он будет работать так - Считывает файл твита 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 [lines]) Тип Ошибка: индексы списка должны быть целыми числами, а не списком»

Я знаю, что мой список «TweetList» хранит твиты так, как мне нравится, но я не думаю, что я правильно использую urllib.urlencode. API требует, чтобы запросы отправлялись как -

http://data.tweetsentiments.com:8080/api/analyze.json?q= (текст для анализа)

Таким образом, идея заключалась в том, что urllib.urlencode просто добавил твиты в конец адреса, чтобы разрешить запрос.

Последние четыре строки кода стали беспорядочными после просмотра множества примеров. Ваша помощь будет высоко ценится.

1 Ответ

0 голосов
/ 07 марта 2012

Я не уверен на 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)
    .....
...