2017-03-08 2 views
0

J'essaie d'interroger les tweets d'un utilisateur spécifié avec un mot clé spécifié inclus dans le texte du tweet. Voici mon code:Interroger l'état de Twitter en utilisant Python et Tweepy

# Import Tweepy, sleep, credentials.py 
import tweepy 
from time import sleep 
from credentials import * 

# Access and authorize our Twitter credentials from credentials.py 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 
api = tweepy.API(auth) 

SCREEN_NAME = "BachelorABC" 
KEYWORD = "TheBachelor" 

def twtr2(): 
    raw_tweets = tweepy.Cursor(api.search, q=KEYWORD, lang="en").items(50) 
    for tweet in raw_tweets: 
     if tweet['user']['screen_name'] == SCREEN_NAME: 
      print tweet 
twtr2() 

Je reçois le message d'erreur comme ci-dessous:

Traceback (most recent call last): 
    File "test2.py", line 19, in <module> 
    twtr2() 
    File "test2.py", line 17, in twtr2 
    if tweet['user']['screen_name'] == SCREEN_NAME: 
TypeError: 'Status' object has no attribute '__getitem__' 

Je googlé beaucoup et je pensais que peut-être que je devais sauver JSON Twitter en python premier, alors j'ai essayé les éléments suivants :

import tweepy, json 
from time import sleep 
from credentials import * 

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

SCREEN_NAME = "BachelorABC" 
KEYWORD = "TheBachelor" 

raw_tweets = tweepy.Cursor(api.search, q=KEYWORD, lang="en").items(50) 
for tweet in raw_tweets: 
    load_tweet = json.loads(tweet) 
    if load_tweet['user']['screen_name'] == SCREEN_NAME: 
     print tweet 

Cependant, le résultat est triste:

Traceback (most recent call last): 
    File "test2.py", line 35, in <module> 
    load_tweet = json.loads(tweet) 
    File "C:\Python27\lib\json\__init__.py", line 339, in loads 
    return _default_decoder.decode(s) 
    File "C:\Python27\lib\json\decoder.py", line 364, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
TypeError: expected string or buffer 

Est-ce que quelqu'un sait ce qui ne va pas avec mon code? Et pouvez-vous m'aider à le réparer?

Merci d'avance!

Répondre

1

j'ai compris. Voici la solution:

# Import Tweepy, sleep, credentials.py 
import tweepy 
from time import sleep 
from credentials import * 

# Access and authorize our Twitter credentials from credentials.py 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 
api = tweepy.API(auth) 

SCREEN_NAME = "BachelorABC" 
KEYWORD = "TheBachelor" 
for tweet in tweepy.Cursor(api.search, q=KEYWORD, lang="en").items(200): 
    if tweet.user.screen_name == SCREEN_NAME: 
     print tweet.text 
     print tweet.user.screen_name 

S'il vous plaît Notez que cette façon n'est pas un moyen efficace de localiser les tweets avec les conditions spécifiées (screen_name et mot-clé) satisfaits. En effet, nous interrogeons d'abord par mot-clé, puis nous interrogeons par nom_écran. Si le mot-clé est très populaire, comme ce que j'utilise ici "TheBachelor", avec un nombre limité de tweets (200), nous pouvons trouver aucun des 200 tweets envoyés par le nom d'écran spécifié. Je pense que si nous pouvons interroger d'abord par screen_name, puis par mot-clé, peut-être que cela donnera un meilleur résultat. Mais c'est hors de discussion.

Je vais vous laisser ici.

0

La question est la

load_tweet = json.loads(tweet) 

L'objet "tweet" est pas un objet JSON. Si vous souhaitez utiliser des objets JSON, suivez ce post stackoverflow sur l'utilisation des objets JSON avec tweepy.

Pour atteindre ce que vous essayez de faire (imprimer chaque tweet d'une alimentation de 50), je suivrais ce qui a été dit dans le getting started docs:

import tweepy 

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

api = tweepy.API(auth) 

public_tweets = api.home_timeline() 
for tweet in public_tweets: 
    print(tweet.text) 
+0

Merci pour votre temps @ethanchewy Je suis à la recherche de tweets avec ** spécifié ** screen_name et mot-clé. Votre réponse concerne les 20 premiers tweets en général. Avez-vous une idée de localiser les tweets avec ces conditions? – Counter10000

+0

@LinguisticsStudent Jetez un coup d'œil au dernier extrait de code situé ici: https://github.com/tweepy/tweepy/blob/master/docs/code_snippet.rst. Vous stockez les screen_names dans une liste, puis recherchez dans cette liste un certain nom d'écran. Notez que Twitter a des limitations strictes pour l'interrogation. – ethanchewy

+0

Merci @ethanchewy. La page que vous citez ci-dessus est de récupérer le nom d'écran du suiveur ou de l'utilisateur, pas le statut. Je vais mettre à jour si je trouve une réponse plus tard. – Counter10000