利用推特官方api获取用户信息和推文信息(Python,tweepy模块)

/ 0评 / 2

①api获取

(这里假设已经安装了tweepy模块,并申请了twitter提供的开发Key和secret。我的申请小作文大致内容是:“我是个管人痴,我想第一时间获取我关注的管人所发布的推文,并将推文转发到我所在的管人粉丝社群。”)

import tweepy

#填写twitter提供的开发Key和secret

consumer_key = ''
consumer_secret = ''
access_token = ''
access_token_secret = ''

#提交你的Key和secret

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

#获取类似于内容句柄的东西

api = tweepy.API(auth, proxy="http://127.0.0.1:7890")

②获取用户信息:api.get_user()

▲get_user()将返回一个User对象,它可以输入的参数如下。
user_id: 用户id(int)
screen_name:用户屏幕名字(@后面那一串)

红色笔画圈中部分即为screen_name

③推文获取(Status对象)

方法一:根据推文id获取推文

tweet = api.get_status(id=tweet_id)

方法二:根据用户id批量获取

public_tweets = api.user_timeline()
for tweet in public_tweets:
#处理推文

▲user_timeline()可以输入的参数如下(含有部分机翻)。
user_id:用户id
screen_name:’用户屏幕名字‘(用户@后面的那一串东西)
since_id:获取在since_id推文之后,发布的推文(不包括since_id推文)
count:需要获取的推文数量
max_id:获取在max_id推文之前,发布的推文(包括max_id推文)
trim_user:当设置为true、t或1时,时间线中返回的每条推文都将包含一个User对象,但其中仅包含int和str数据类型的用户id。忽略此参数可接收完整的User对象。
exclude_replies:此参数将阻止回复推文出现在返回的时间线中。
include_rts:当设置为False时,时间线将删除所有转发推文(尽管它们仍将计入时间线的最大长度和count参数选择的片段)。注意:如果您将trim_user参数与include_rts结合使用,转发推文仍将包含完整的User对象。
tweet_mode='extended'
默认情况下,使用兼容模式,这会将tweepy.API返回的Status对象的text属性截断为140个字符。
使用扩展模式('extended')时,text属性将被替换为一个full_text属性,该属性包含Tweet的整个未截断文本。

一般来说有以下几种推文,这些推文所对应的Status对象的某些属性不太一样,后面将给出详细说明:
1、正常发推
(包括:纯文字推文、含有一张图的推文、含有多于一张图的推文、含有视频的推文、含有gif的推文)
2、转发推文
3、回复推文
4、引用了其他推文
5、包含其他网站链接(如油管等)的推文

▲tweet(一个Status对象)包含以下属性。

created_at:推文发布时间,如'Mon Jun 27 15:03:40 +0000 2022'
id:推文id(int)
id_str:'推文id'(str)
text:'推文内容'(str),'extended'模式下该属性名被替换为full_text
truncated:是否被截断(bool),兼容模式下推文太长会被截断,省略后面的内容。


entities:实体(dict),包含以下键:
{
#以下为必定含有的键(如果没有元素,以下list=[])
hashtags:标签(list),如果推文有标签,每个元素是一个dict,
包含{'text': '标签名字', 'indices': [a, b]}
#indices表明标签出现在text元素中的哪个位置,下同。
symbols:不知道是什么(list)
user_mentions:回复/@提到的用户(list),每个元素是一个dict,
包含{'screen_name': '用户屏幕名字', 'name': '用户名字',
'id': 用户id(int), 'id_str': '用户id'(str),
'indices': [a, b]}
urls:推文附上的链接(list),如果推文附有链接,每个元素是一个dict,
包含{'url': '链接', 'expanded_url': '完整链接',
'display_url': '推文显示链接', 'indices': [a, b]}

#以下为不一定含有的键,只有含多媒体文件时,才会含有media键
media:多媒体文件的封面,如果有多张图片则media为第一张图片(dict)。包含
{'id': 图片id(int), 'id_str': '图片id'(str), 'indices': [a, b],
'media_url': '图片/视频封面http链接',
'media_url_https': '图片/视频封面https链接',
'url': 'media链接',
'display_url': 'media显示链接',
'expanded_url': 'media完整链接',
'type': 'photo',
'sizes': {'thumb': {'w': 宽, 'h': 高, 'resize': 'crop'},
'large': {'w': 宽, 'h': 高, 'resize': 'fit'},
'small': {'w': 宽, 'h': 高, 'resize': 'fit'},
'medium': {'w': 宽, 'h': 高, 'resize': 'fit'}
}
}
}


extended_entities(推文含有多媒体文件时才有,一般处理多媒体推文时不使用entities属性,而使用extended_entities属性):扩展实体(dict),包含以下键:
{
'media':多媒体文件列表(list),每个元素是一个dict,这些元素和entities['media']含有的键值相同。

#若'type':animated_gif,比特率为0
#若文件类型为视频,即'type':'vedio',则元素还包括以下键值:
'video_info': 视频信息,包含
{'aspect_ratio': [a, b], #视频纵横比
'duration_millis': 持续时间(单位:ms),
'variants':视频不同格式(list),每个元素是一个dict,每个元素包含
{'bitrate':比特率(视频类型为mpeg时,没有这个键)
'content_type': 视频类型,例如'video/mp4', 'application/x-mpegURL'
'url': 该类型视频的链接
}
}
'additional_media_info': 附加信息(dict),包含{'monetizable': False,不知道是什么} }


source:发推用户端,如'<a href="https://mobile.twitter.com" rel="nofollow">Twitter Web App</a>',
还有Twitter for iPhone等用户端


#以下属性只有在推文是回复他人时不为None
in_reply_to_status_id:回复的推文id(int),
in_reply_to_status_id_str:'回复的推文id'(str),
in_reply_to_user_id:回复的用户id(int),
in_reply_to_user_id_str:'回复的用户id'(str),
in_reply_to_screen_name:'回复的用户的screen_name'


user:发送该推文的User对象,包含以下属性:
id: 用户id(int)
id_str: '用户id'(str)
name: '用户昵称'
screen_name:'用户屏幕名字'
location:地区
description:'描述'
url:'个人网站链接'
entities:实体{
'description':{
'urls': [{'url': '个人网站链接',
'expanded_url': '个人网站完整链接',
'display_url': '个人网站展示链接',
'indices': [a, b]
}] #类似于Status对象的entities['urls']
}
}
protected:是否锁推(bool)
followers_count:关注者数量
friends_count:正在关注数量
listed_count:此用户所属的公共列表数
created_at:'推特创建时间'
favourites_count:此用户喜欢的推文数量
statuses_count:发推数
verified:是否被认证为官方账号
profile_image_url:'头像图片http链接'
profile_image_url_https:'头像图片https链接'
profile_banner_url:'个人资料横幅图片https链接'
default_profile:False, #如果为true,表示用户没有上传图像,而是使用默认图像。
default_profile_image:False withheld_in_countries:[]

#以下为推特已弃用属性
utc_offset:None
time_zone:None
geo_enabled:False
lang:None
contributors_enabled:False
is_translator:False
is_translation_enabled:False
profile_background_color
profile_background_image_url
profile_background_image_url_https
profile_background_tile:True
profile_link_color
profile_sidebar_border_color
profile_sidebar_fill_color
profile_text_color
profile_use_background_image
has_extended_profile:True
following:False
follow_request_sent:False
notifications:False
translator_type:'none'


geo:None
coordinates:None
place:None
contributors:None


#如果该推文属于转发推文,则有retweeted_status属性:
retweeted_status:转发的推文(兼容模式的Status对象)


is_quote_status:是否引用了其他推文(转推也算)


#如果引用了其他推文,则'is_quote_status': True,且还会多出以下4个属性:
quoted_status_id:引用的推文id(int)
quoted_status_id_str:引用的推文id(str)
quoted_status_permalink: {
'url': 'https://t.co/jmGxPydBOo',
'expanded': 'https://twitter.com/tt4sol/status/1496867565389373441',
'display': 'twitter.com/tt4sol/status/…' },
quoted_status:引用的推文(兼容模式的Status对象)


retweet_count:被转推数量
favorite_count:被喜欢数量
favorited:开发者是否喜欢(bool)
retweeted:开发者是否转推(bool)
possibly_sensitive:是否含有敏感内容(bool)
lang:'语言',注意日语是'ja'

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注