2016-04-19 5 views
3

Я использую этот код:Как получить MEDIA_URL из твитов с помощью API Tweepy

import tweepy 
from tweepy.api import API 
import urllib 
import os 

i = 1 
consumer_key="xx" 
consumer_secret="xx" 
access_token="xx" 
access_token_secret="xx" 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.secure = True 
auth.set_access_token(access_token, access_token_secret) 
api = tweepy.API(auth) 

class MyStreamListener(tweepy.StreamListener): 
def __init__(self, api=None): 
    self.api = api or API() 
    self.n = 0 
    self.m = 10 

def on_status(self, status): 
    if 'media' in status.entities: 
     for image in status.entities['media']: 
      global i 
      #picName = status.user.screen_name 
      picName = "pic%s.jpg" % i 
      i += 1 
      link = image['media_url'] 
      filename = os.path.join("C:/Users/Charbo/Documents/Python/",picName) 
      urllib.urlretrieve(link,filename) 
      #use to test 
      print(status.user.screen_name) 

    else: 
     print("no media_url") 

    self.n = self.n+1 

    if self.n < self.m: 
     return True 
    else: 
     print ('tweets = '+str(self.n)) 
     return False 

def on_error(self, status): 
    print (status) 

myStreamListener = MyStreamListener() 
myStream = tweepy.Stream(auth, MyStreamListener(),timeout=30) 
myStream.filter(track=['#feelthebern']) 

Я пытаюсь доступ MEDIA_URL под «фото» в моем словаре. Но я получаю следующую ошибку: объект «dict» не имеет атрибута «media». Я был бы признателен за помощь в навигации JSON.

Заранее благодарен!

+0

Вы пытались увидеть, что все директории (статус) предложения? Я не могу воспроизвести ошибку, так как вы не дали минимальных и полных шагов, чтобы воспроизвести ее, но, используя twiters api, я думаю, что json доступен в виде status._json? – MohitC

+0

@MohitC Я добавил весь свой код. – MarcCharbo

ответ

4

Вы должны попробовать две вещей:

  • Добавить объекты на запрос

>

tweepy.Cursor(api.search, q="#hashtag", count=5, include_entities=True) 
  • Проверьте, если носитель не NUL:

>

if 'media' in tweet.entities: 
    for image in tweet.entities['media']: 
     (do smthing with image['media_url']) 

Надеется, что это поможет

+0

Спасибо за вышесказанное. Просто чтобы уточнить, можем ли мы использовать tweepy.Cursor при использовании класса Stream (поэтому при потоковой передаче)? Я добавил свой первый маркер в свой код. См. Отредактированный код в моем исходном вопросе – MarcCharbo

+0

Я не уверен, но я так думаю, поскольку курсор обрабатывает только разбиение на страницы результатов – Falkwn