'How to get source video URL from user tweet timeline using twitter API V2
I am using following url for fetching users tweets.
https://api.twitter.com/2/users/{user_twitter_id}/tweets
Following are my Request parameters
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'
}
Below is the response I am getting inside "Includes" which have media list
"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
}
]
}
As you can see in response inside media we have type video and media key, but no actual video url all we can see is video thumbnail. So please tell me how we can fetch video urls along with preview image url
Solution 1:[1]
There are a couple of things to note here:
in Twitter API v2, at the time of writing this answer in Feb 2022, the video URL is not currently available. This is a known omission that Twitter is working on.
in Twitter API v1.1, you generally should be able to get the video URLs. There are two additional things to know about...
- if the Tweet is a longer (more than 140 characters) Tweet, then you will need to add
tweet_mode=extendedto your API call to ensure that the whole Tweet data and extended entities are included. You can tell if you have not retrieved the whole Tweet if thetruncatedfield value istrue. This is the case in your example Tweet ID above. Usingtweet_mode=extendedyou will see the video URLs. - if the Tweet is from the Ads platform, the video may be part of a Ads card format, and these are not served via the API. You can tell this by checking the
sourcefield for evidence that the Tweet was posted as an ad. The advertiser is able to mark the media as not for wider syndication / API access in that case, and the video URL is not returned in the API.
- if the Tweet is a longer (more than 140 characters) Tweet, then you will need to add
Solution 2:[2]
In addition to the answer, there is one more workaround that includes a direct URL to the video:
just take a tweet ID and use https://cdn.syndication.twimg.com/tweet?id=<tweet_id> URL (example) to get the data you need.
Pros:
- It works without any API key, so it's easy to integrate
- It gives you direct links to the video in
.mp4and.hlsformats
Cons:
- It's an internal API call and it's not reliable for external use ??????
- One more additional request is required to get the data
- It requires a proxy to eliminate the CORS policy
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Andy Piper |
| Solution 2 | Svyatoslav Bychkov |
