Estoy tratando de capturar tweets en vivo reales. Estoy tratando de acceder a los contenidos utilizando la biblioteca json, y crear nuevos objetos y agregarlos a una lista.

from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import tweepy

import json
import urllib.parse
from urllib.request import urlopen
import json

# Variables that contains the user credentials to access Twitter API
consumer_key = ""
consumer_secret = "C"
access_token = ""
access_token_secret = ""
sentDexAuth = ''


auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)



def sentimentAnalysis(text):
    encoded_text = urllib.parse.quote(text)
    API_Call = 'http://sentdex.com/api/api.php?text=' + encoded_text + '&auth=' + sentDexAuth
    output = urlopen(API_Call).read()

    return output

class StdOutListener(StreamListener):
    def __init___(self):
        self.tweet_data = []


def on_data(self, data):
    tweet = json.loads(data)
    for x in tweet.items():
        sentimentRating = sentimentAnalysis(x['text'])
        actualtweets = {
            'created_at' : x['created_at'],
            'id' : x['id'],
            'tweets': x['text'] + sentimentRating
        }
        self.tweet_data.append(actualtweets)


    with open('rawtweets2.json', 'w') as out:
        json.dump(self.tweet_data, out)

    print(tweet)
l = StdOutListener()
stream = Stream(auth, l)
keywords = ['iknow']
stream.filter(track=keywords)

Creo que estoy accediendo a los objetos json correctamente, sin embargo, no estoy seguro de este error, necesito que sea una cadena para que funcione mi función de sentimiento, y estoy recibiendo un error de tipo:

sentimentRating = sentimentAnalysis(x['text'])
TypeError: tuple indices must be integers or slices, not str
0
johnobc 23 mar. 2017 a las 15:42

2 respuestas

La mejor respuesta

Aquí,

for x in tweet.items():
        sentimentRating = sentimentAnalysis(x['text'])

x es una tupla de (key,value) de su diccionario, por lo que debe pasar el índice.

Si simplemente desea los datos de la clave 'text'. puedes escribir tweet['text']

2
Chanda Korat 23 mar. 2017 a las 12:49

Su problema es que x es una tupla, por lo que debe usar índices numéricos como x[1], no cadenas.

0
Szymon P. 23 mar. 2017 a las 12:46