如何使用 twitter API V2 从用户推文时间轴获取源视频 URL
How to get source video URL from user tweet timeline using twitter API V2
我正在使用以下 url 来获取用户推文。
https://api.twitter.com/2/users/{user_twitter_id}/tweets
以下是我的请求参数
query_params = {
'max_results': max_results,
'expansions': 'attachments.media_keys',
'tweet.fields': 'id,created_at,text,author_id,in_reply_to_user_id,referenced_tweets,attachments,withheld,geo,entities,public_metrics,possibly_sensitive,source,lang,context_annotations,conversation_id,reply_settings',
'media.fields': 'media_key,duration_ms,height,preview_image_url,type,url,width,public_metrics,non_public_metrics,organic_metrics,promoted_metrics,alt_text'
}
以下是我在“包含”中获得的响应,其中包含媒体列表
"includes": {
"media": [
{
"height": 750,
"media_key": "3_1489397927281840131",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKtnhhDWUAMtyBi.jpg",
"width": 1125
},
{
"height": 750,
"media_key": "3_1489397930452783110",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKtnhs3XEAYeMkP.jpg",
"width": 1125
},
{
"height": 750,
"media_key": "3_1489397944214302727",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKtnigIXMAcTO6t.jpg",
"width": 1125
},
{
"duration_ms": 242784,
"height": 1080,
"media_key": "13_1489018359819771906",
"preview_image_url": "https://pbs.twimg.com/media/FKoOePDWYAA1ZZB.jpg",
"public_metrics": {
"view_count": 275300
},
"type": "video",
"width": 1920
},
{
"height": 2400,
"media_key": "3_1488933061307809794",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKnAuwWWQAIZZ8J.jpg",
"width": 3000
},
{
"height": 2000,
"media_key": "3_1488640905187938304",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKi3BB_X0AA47_h.jpg",
"width": 3000
},
{
"duration_ms": 41374,
"height": 1080,
"media_key": "13_1488623384250527746",
"preview_image_url": "https://pbs.twimg.com/amplify_video_thumb/1488623384250527746/img/K2fiO7GwjmxL0H89.jpg",
"public_metrics": {
"view_count": 239341
},
"type": "video",
"width": 1080
},
{
"height": 2000,
"media_key": "3_1488548514921603078",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKhi_NbWYAYqP04.jpg",
"width": 3000
},
{
"height": 750,
"media_key": "3_1488336416732028931",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKeiFeGXIAMgHQx.jpg",
"width": 1125
},
{
"duration_ms": 53136,
"height": 1080,
"media_key": "13_1488316251667582978",
"preview_image_url": "https://pbs.twimg.com/amplify_video_thumb/1488316251667582978/img/DE2q07gtwoARK76r.jpg",
"public_metrics": {
"view_count": 214984
},
"type": "video",
"width": 1080
},
{
"duration_ms": 40248,
"height": 1080,
"media_key": "13_1488154727544152064",
"preview_image_url": "https://pbs.twimg.com/media/FKb85iAXoAou4ED.jpg",
"public_metrics": {
"view_count": 242329
},
"type": "video",
"width": 1080
},
{
"height": 913,
"media_key": "3_1487927712761229314",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKYuXxKXsAIbXd2.jpg",
"width": 1200
},
{
"duration_ms": 35785,
"height": 1080,
"media_key": "13_1487538546948939777",
"preview_image_url": "https://pbs.twimg.com/amplify_video_thumb/1487538546948939777/img/qzUmEZKmD6ii_0dM.jpg",
"public_metrics": {
"view_count": 290603
},
"type": "video",
"width": 1080
}
]
}
正如您在媒体响应中看到的,我们有类型视频和媒体密钥,但没有实际视频 url 我们只能看到视频缩略图。所以请告诉我如何获取视频 urls 以及预览图像 url
这里有几点需要注意:
在 Twitter API v2 中,在 2022 年 2 月撰写此答案时,视频 URL 当前不可用。这是 Twitter 正在处理的一个已知遗漏。
推特APIv1.1,一般应该可以得到视频URLs。还有两件事需要了解...
- 如果推文较长(超过 140 个字符),则您需要将
tweet_mode=extended
添加到 API 调用以确保包含整个推文数据和扩展实体.如果 truncated
字段值为 true
,您可以判断是否没有检索到整个推文。上面的示例推文 ID 就是这种情况。使用 tweet_mode=extended
您将看到视频 URLs.
- 如果推文来自广告平台,则视频可能是广告卡片格式的一部分,并且这些不会通过 API 提供。你可以通过检查
source
字段来判断推文是作为广告发布的证据。在这种情况下,广告商可以将媒体标记为不用于更广泛的联合/API 访问,并且视频 URL 不会在 API. 中返回
除了 之外,还有一个变通方法 包括 直接 URL 视频:
只需获取推文 ID 并使用 https://cdn.syndication.twimg.com/tweet?id=<tweet_id>
URL (example) 即可获取您需要的数据。
优点:
- 无需任何 API 密钥即可工作,因此易于集成
- 它为您提供指向
.mp4
和 .hls
格式视频的直接链接
缺点:
- 这是内部API调用,外部使用不可靠❗️❗️❗️
- 需要一个额外的请求来获取数据
- 取消CORS策略需要代理
我正在使用以下 url 来获取用户推文。
https://api.twitter.com/2/users/{user_twitter_id}/tweets
以下是我的请求参数
query_params = {
'max_results': max_results,
'expansions': 'attachments.media_keys',
'tweet.fields': 'id,created_at,text,author_id,in_reply_to_user_id,referenced_tweets,attachments,withheld,geo,entities,public_metrics,possibly_sensitive,source,lang,context_annotations,conversation_id,reply_settings',
'media.fields': 'media_key,duration_ms,height,preview_image_url,type,url,width,public_metrics,non_public_metrics,organic_metrics,promoted_metrics,alt_text'
}
以下是我在“包含”中获得的响应,其中包含媒体列表
"includes": {
"media": [
{
"height": 750,
"media_key": "3_1489397927281840131",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKtnhhDWUAMtyBi.jpg",
"width": 1125
},
{
"height": 750,
"media_key": "3_1489397930452783110",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKtnhs3XEAYeMkP.jpg",
"width": 1125
},
{
"height": 750,
"media_key": "3_1489397944214302727",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKtnigIXMAcTO6t.jpg",
"width": 1125
},
{
"duration_ms": 242784,
"height": 1080,
"media_key": "13_1489018359819771906",
"preview_image_url": "https://pbs.twimg.com/media/FKoOePDWYAA1ZZB.jpg",
"public_metrics": {
"view_count": 275300
},
"type": "video",
"width": 1920
},
{
"height": 2400,
"media_key": "3_1488933061307809794",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKnAuwWWQAIZZ8J.jpg",
"width": 3000
},
{
"height": 2000,
"media_key": "3_1488640905187938304",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKi3BB_X0AA47_h.jpg",
"width": 3000
},
{
"duration_ms": 41374,
"height": 1080,
"media_key": "13_1488623384250527746",
"preview_image_url": "https://pbs.twimg.com/amplify_video_thumb/1488623384250527746/img/K2fiO7GwjmxL0H89.jpg",
"public_metrics": {
"view_count": 239341
},
"type": "video",
"width": 1080
},
{
"height": 2000,
"media_key": "3_1488548514921603078",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKhi_NbWYAYqP04.jpg",
"width": 3000
},
{
"height": 750,
"media_key": "3_1488336416732028931",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKeiFeGXIAMgHQx.jpg",
"width": 1125
},
{
"duration_ms": 53136,
"height": 1080,
"media_key": "13_1488316251667582978",
"preview_image_url": "https://pbs.twimg.com/amplify_video_thumb/1488316251667582978/img/DE2q07gtwoARK76r.jpg",
"public_metrics": {
"view_count": 214984
},
"type": "video",
"width": 1080
},
{
"duration_ms": 40248,
"height": 1080,
"media_key": "13_1488154727544152064",
"preview_image_url": "https://pbs.twimg.com/media/FKb85iAXoAou4ED.jpg",
"public_metrics": {
"view_count": 242329
},
"type": "video",
"width": 1080
},
{
"height": 913,
"media_key": "3_1487927712761229314",
"type": "photo",
"url": "https://pbs.twimg.com/media/FKYuXxKXsAIbXd2.jpg",
"width": 1200
},
{
"duration_ms": 35785,
"height": 1080,
"media_key": "13_1487538546948939777",
"preview_image_url": "https://pbs.twimg.com/amplify_video_thumb/1487538546948939777/img/qzUmEZKmD6ii_0dM.jpg",
"public_metrics": {
"view_count": 290603
},
"type": "video",
"width": 1080
}
]
}
正如您在媒体响应中看到的,我们有类型视频和媒体密钥,但没有实际视频 url 我们只能看到视频缩略图。所以请告诉我如何获取视频 urls 以及预览图像 url
这里有几点需要注意:
在 Twitter API v2 中,在 2022 年 2 月撰写此答案时,视频 URL 当前不可用。这是 Twitter 正在处理的一个已知遗漏。
推特APIv1.1,一般应该可以得到视频URLs。还有两件事需要了解...
- 如果推文较长(超过 140 个字符),则您需要将
tweet_mode=extended
添加到 API 调用以确保包含整个推文数据和扩展实体.如果truncated
字段值为true
,您可以判断是否没有检索到整个推文。上面的示例推文 ID 就是这种情况。使用tweet_mode=extended
您将看到视频 URLs. - 如果推文来自广告平台,则视频可能是广告卡片格式的一部分,并且这些不会通过 API 提供。你可以通过检查
source
字段来判断推文是作为广告发布的证据。在这种情况下,广告商可以将媒体标记为不用于更广泛的联合/API 访问,并且视频 URL 不会在 API. 中返回
- 如果推文较长(超过 140 个字符),则您需要将
除了 https://cdn.syndication.twimg.com/tweet?id=<tweet_id>
URL (example) 即可获取您需要的数据。
优点:
- 无需任何 API 密钥即可工作,因此易于集成
- 它为您提供指向
.mp4
和.hls
格式视频的直接链接
缺点:
- 这是内部API调用,外部使用不可靠❗️❗️❗️
- 需要一个额外的请求来获取数据
- 取消CORS策略需要代理