当前位置: 首页 > 知识库问答 >
问题:

如何使用Tweepy API从推文中获取媒体url

卫诚
2023-03-14

我使用这个代码:

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'])

我正在尝试访问字典中“照片”下的媒体url。但我得到了以下错误:“dict”对象没有属性“media”。如果您能帮助我浏览JSON,我将不胜感激。

提前谢谢!

共有2个答案

姬歌者
2023-03-14

这个答复可能有点晚了,但我相信有一天其他人会发现它很有用。实际上,我不想转发任何包含视频的推特。所以我构建了这个函数。。。。而且它工作得很好。

def on_status(self, status):
    #Ignores the tweet so long as I am the Author, or it's a reply to a tweet
    if status.in_reply_to_status_id is not None or \
        status.user.id == self.me.id:
        return

    #I only retweet tweets that I haven't yet retweeted. I also don't want to retweet any tweets that are quotes.
    if not status.retweeted and not status.is_quote_status:
        #Checking whether the tweet has no "media" in it.
        if 'media' not in status.entities:
            try:
                print(status.text)
                status.retweet()
                time.sleep(40) #Sleep for 40 seconds to avoid limits
            except Exception as e:
                print("Error on_data %s" % str(e))
                print("Error from retweeting")
        #If tweet has media, I only retweet a tweet with a photo
        elif 'media' in status.entities:
            media_details = status.entities['media']
            media_details_kind = media_details[0]
            #print(vide['type'])
            
            if media_details_kind['type'] == 'photo':
                try:
                    print("It is a photo")
                    status.retweet()
                    time.sleep(40)
                except Exception as e:
                    print("Error on_data %s" % str(e))
                    print("Error from retweeting")
        else: #Anything else is a video or GIF. I do nothing. 
            print("Sorry, this might be a video. Cound't retweet because it is neither a photo nor a text")
            print(status.text)
宇文航
2023-03-14

你应该尝试两件事:

  • 将实体添加到您的请求中
tweepy.Cursor(api.search, q="#hashtag", count=5, include_entities=True)
  • 检查媒体是否正常:
if 'media' in tweet.entities:
    for image in  tweet.entities['media']:
        (do smthing with image['media_url'])

希望这个能帮上忙

 类似资料:
  • 我对twitter api有意见。我使用这个脚本脚本删除推文删除推文形成一个帐户。我看到了twitepy方法(api,user_timeline) 不会返回包含媒体的推文(从网站访问推文,它们不会出现在时间线中,但会出现在另一个名为“照片和视频”的选项卡中),因此不会被删除。include_实体不是此方法的参数。 我怎样才能恢复这些推文?我以为我可以用用户名作为查询进行搜索,但那不起作用,而且效率

  • 一般来说,我需要得到所有的用户媒体。 用户有超过250张照片。 但它只返回20张照片。 也许instagram获得媒体是有限制的。如果是,响应有一个分页来解决它。但只有max的身份证照片。怎么知道第一张(最小)身份证照片然后分页呢?

  • 在8.1节中提到过,通过getMediaFileSystems方法获取到的fileSystem中的root属性值就是Entry对象,结合第7章的内容就可以对媒体库中的文件进行操作。 通过getMetadata方法可以读取出媒体文件相关信息1: chrome.mediaGalleries.getMetadata(mediaFile, {metadataType: 'all'}, function(m

  • 如果在Manifest中声明了了"allAutoDetected"权限,则Chrome应用可以无需用户手动指定,自动获取到媒体库的位置。 通过getMediaFileSystems方法可以获取到媒体库对应的fileSystem: chrome.mediaGalleries.getMediaFileSystems({ interactive: 'if_needed' }, function(

  • 我有一个应用程序,可以显示来自互联网的图片和视频。现在我正在实现一个“保存”功能,将图片/视频保存到外部或内部存储器中,无需再次下载。 对于图片,我只是用抓取绘图。我如何用Exoplayer2. x/PlayerView中当前缓冲的视频实现同样的效果?我没有找到一个函数。

  • 我正在为WhatsApp使用Twilio沙箱,当我发送一个图像时,我在webhook中收到的有效负载工作正常,我可以获得图像的url,但不能使用音频文件(语音消息)。 我正面临一个音频问题,如果我从WhatsApp发送语音消息,我的webhook中的有效负载不包括音频URL。 这里是有效载荷: 我希望url媒体如下所示: