Twitter Media Downloader

Save Video/Photo by One-Click.

< Обсуждения: Twitter Media Downloader

Отзыв: Нормальный — скрипт работает, но имеет существенные недостатки

これでDLできるかな?

258 let base_url = `https://${host}/i/api/graphql/NmCeCgkVlsRGS1cAwqtgmw/TweetDetail`;

let base_url = `https://${host}/i/api/graphql/2ICDjqPd81tulZcYrtpTuQ/TweetResultByRestId`;

260 "focalTweetId":status_id,

"tweetId":status_id,
269 let features = {
...
290 };

let features = {
"articles_preview_enabled":true,
"c9s_tweet_anatomy_moderator_badge_enabled":true,
"communities_web_enable_tweet_community_results_fetch":false,
"creator_subscriptions_quote_tweet_preview_enabled":false,
"creator_subscriptions_tweet_preview_api_enabled":false,
"freedom_of_speech_not_reach_fetch_enabled":true,
"graphql_is_translatable_rweb_tweet_is_translatable_enabled":true,
"longform_notetweets_consumption_enabled":false,
"longform_notetweets_inline_media_enabled":true,
"longform_notetweets_rich_text_read_enabled":false,
"premium_content_api_read_enabled":false,
"profile_label_improvements_pcf_label_in_post_enabled":true,
"responsive_web_edit_tweet_api_enabled":false,
"responsive_web_enhance_cards_enabled":false,
"responsive_web_graphql_exclude_directive_enabled":false,
"responsive_web_graphql_skip_user_profile_image_extensions_enabled":false,
"responsive_web_graphql_timeline_navigation_enabled":false,
"responsive_web_grok_analysis_button_from_backend":false,
"responsive_web_grok_analyze_button_fetch_trends_enabled":false,
"responsive_web_grok_analyze_post_followups_enabled":false,
"responsive_web_grok_image_annotation_enabled":false,
"responsive_web_grok_share_attachment_enabled":false,
"responsive_web_grok_show_grok_translated_post":false,
"responsive_web_jetfuel_frame":false,
"responsive_web_media_download_video_enabled":false,
"responsive_web_twitter_article_tweet_consumption_enabled":true,
"rweb_tipjar_consumption_enabled":true,
"rweb_video_screen_enabled":false,
"standardized_nudges_misinfo":true,
"tweet_awards_web_tipping_enabled":false,
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":true,
"tweetypie_unmention_optimization_enabled":false,
"verified_phone_label_enabled":false,
"view_counts_everywhere_api_enabled":true,
};

追記
301 let tweet_entrie = tweet_detail.data.threaded_conversation_with_injections_v2.instructions[0].entries.find(n => n.entryId == `tweet-${status_id}`);
302 let tweet_result = tweet_entrie.content.itemContent.tweet_results.result;

//let tweet_entrie = tweet_detail.data.threaded_conversation_with_injections_v2.instructions[0].entries.find(n => n.entryId == `tweet-${status_id}`);
//let tweet_result = tweet_entrie.content.itemContent.tweet_results.result;
let tweet_result = tweet_detail.data.tweetResult.result;

感谢 现在可以用了!
ありがとう、今は動くようになりました!

どうやってやったのか分かりませんが、現在は機能しています。しかし、ダウンロードしようとしたファイルが多すぎるため、429 エラーが発生しました。うまくいけば、失敗してもう一度やり直す必要がない限り、ただ待つだけで済みます。

どうもありがとうございます!

NICE!
I try to fix old API but not work.
Good for use other api!

Thank you for sharing this!

ありがとうございました。Hero.

ありがとうございます。成功しました。本当にありがとうございました

§
Создано: 27.04.2025
Изменено: 27.04.2025

補充一下怎麼使用

第 285 行

將這段:

let base_url = `https://${host}/i/api/graphql/NmCeCgkVlsRGS1cAwqtgmw/TweetDetail`;

替換成:

let base_url = `https://${host}/i/api/graphql/2ICDjqPd81tulZcYrtpTuQ/TweetResultByRestId`;

第 260 行

將這段:

"focalTweetId":status_id,

替換成:

"tweetId":status_id,

第 269 行

將第 269 行到第 290 行的代碼刪除並替換成:


      let features = {
        "articles_preview_enabled":true,
        "c9s_tweet_anatomy_moderator_badge_enabled":true,
        "communities_web_enable_tweet_community_results_fetch":false,
        "creator_subscriptions_quote_tweet_preview_enabled":false,
        "creator_subscriptions_tweet_preview_api_enabled":false,
        "freedom_of_speech_not_reach_fetch_enabled":true,
        "graphql_is_translatable_rweb_tweet_is_translatable_enabled":true,
        "longform_notetweets_consumption_enabled":false,
        "longform_notetweets_inline_media_enabled":true,
        "longform_notetweets_rich_text_read_enabled":false,
        "premium_content_api_read_enabled":false,
        "profile_label_improvements_pcf_label_in_post_enabled":true,
        "responsive_web_edit_tweet_api_enabled":false,
        "responsive_web_enhance_cards_enabled":false,
        "responsive_web_graphql_exclude_directive_enabled":false,
        "responsive_web_graphql_skip_user_profile_image_extensions_enabled":false,
        "responsive_web_graphql_timeline_navigation_enabled":false,
        "responsive_web_grok_analysis_button_from_backend":false,
        "responsive_web_grok_analyze_button_fetch_trends_enabled":false,
        "responsive_web_grok_analyze_post_followups_enabled":false,
        "responsive_web_grok_image_annotation_enabled":false,
        "responsive_web_grok_share_attachment_enabled":false,
        "responsive_web_grok_show_grok_translated_post":false,
        "responsive_web_jetfuel_frame":false,
        "responsive_web_media_download_video_enabled":false,
        "responsive_web_twitter_article_tweet_consumption_enabled":true,
        "rweb_tipjar_consumption_enabled":true,
        "rweb_video_screen_enabled":false,
        "standardized_nudges_misinfo":true,
        "tweet_awards_web_tipping_enabled":false,
        "tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":true,
        "tweetypie_unmention_optimization_enabled":false,
        "verified_phone_label_enabled":false,
        "view_counts_everywhere_api_enabled":true,
      };

第 301、302 行

將這兩段代碼:

let tweet_entrie = tweet_detail.data.threaded_conversation_with_injections_v2.instructions[0].entries.find(n => n.entryId == `tweet-${status_id}`);
let tweet_result = tweet_entrie.content.itemContent.tweet_results.result;

刪除並替換成:

let tweet_result = tweet_detail.data.tweetResult.result;

END

超级感谢,已经可以用了。

補充一下怎麼使用

第 285 行

將這段:

let base_url = `https://${host}/i/api/graphql/NmCeCgkVlsRGS1cAwqtgmw/TweetDetail`;

替換成:

let base_url = `https://${host}/i/api/graphql/2ICDjqPd81tulZcYrtpTuQ/TweetResultByRestId`;

第 260 行

將這段:

"focalTweetId":status_id,

替換成:

"tweetId":status_id,

第 269 行

將第 269 行到第 290 行的代碼刪除並替換成:


      let features = {
        "articles_preview_enabled":true,
        "c9s_tweet_anatomy_moderator_badge_enabled":true,
        "communities_web_enable_tweet_community_results_fetch":false,
        "creator_subscriptions_quote_tweet_preview_enabled":false,
        "creator_subscriptions_tweet_preview_api_enabled":false,
        "freedom_of_speech_not_reach_fetch_enabled":true,
        "graphql_is_translatable_rweb_tweet_is_translatable_enabled":true,
        "longform_notetweets_consumption_enabled":false,
        "longform_notetweets_inline_media_enabled":true,
        "longform_notetweets_rich_text_read_enabled":false,
        "premium_content_api_read_enabled":false,
        "profile_label_improvements_pcf_label_in_post_enabled":true,
        "responsive_web_edit_tweet_api_enabled":false,
        "responsive_web_enhance_cards_enabled":false,
        "responsive_web_graphql_exclude_directive_enabled":false,
        "responsive_web_graphql_skip_user_profile_image_extensions_enabled":false,
        "responsive_web_graphql_timeline_navigation_enabled":false,
        "responsive_web_grok_analysis_button_from_backend":false,
        "responsive_web_grok_analyze_button_fetch_trends_enabled":false,
        "responsive_web_grok_analyze_post_followups_enabled":false,
        "responsive_web_grok_image_annotation_enabled":false,
        "responsive_web_grok_share_attachment_enabled":false,
        "responsive_web_grok_show_grok_translated_post":false,
        "responsive_web_jetfuel_frame":false,
        "responsive_web_media_download_video_enabled":false,
        "responsive_web_twitter_article_tweet_consumption_enabled":true,
        "rweb_tipjar_consumption_enabled":true,
        "rweb_video_screen_enabled":false,
        "standardized_nudges_misinfo":true,
        "tweet_awards_web_tipping_enabled":false,
        "tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":true,
        "tweetypie_unmention_optimization_enabled":false,
        "verified_phone_label_enabled":false,
        "view_counts_everywhere_api_enabled":true,
      };

第 301、302 行

將這兩段代碼:

let tweet_entrie = tweet_detail.data.threaded_conversation_with_injections_v2.instructions[0].entries.find(n => n.entryId == `tweet-${status_id}`);
let tweet_result = tweet_entrie.content.itemContent.tweet_results.result;

刪除並替換成:

let tweet_result = tweet_detail.data.tweetResult.result;

END

老哥能求个修正后的全部代码吗,
你们的修正应该是在上一次修正后的再修正,
我第一次修正失败后,恢复到1.27版本,再按照教程修正已经全部对不上了。。。
修正后无效hhh

goemon2017 Thanks a lot, it's working now.

@Yun Yin full code https://pastebin.com/r53iy73V

goemon2017 Thanks a lot, it's working now.

@Yun Yin full code https://pastebin.com/r53iy73V

非常感谢,兄弟

日本兄贵本当上手!大感谢!

The download button is gray and cannot be clicked.

ダウンロードボタンはグレーでクリックできません。

これでDLできるかな?

258 let base_url = `https://${host}/i/api/graphql/NmCeCgkVlsRGS1cAwqtgmw/TweetDetail`;

let base_url = `https://${host}/i/api/graphql/2ICDjqPd81tulZcYrtpTuQ/TweetResultByRestId`;

260 "focalTweetId":status_id,

"tweetId":status_id,
269 let features = {
...
290 };

let features = {
"articles_preview_enabled":true,
"c9s_tweet_anatomy_moderator_badge_enabled":true,
"communities_web_enable_tweet_community_results_fetch":false,
"creator_subscriptions_quote_tweet_preview_enabled":false,
"creator_subscriptions_tweet_preview_api_enabled":false,
"freedom_of_speech_not_reach_fetch_enabled":true,
"graphql_is_translatable_rweb_tweet_is_translatable_enabled":true,
"longform_notetweets_consumption_enabled":false,
"longform_notetweets_inline_media_enabled":true,
"longform_notetweets_rich_text_read_enabled":false,
"premium_content_api_read_enabled":false,
"profile_label_improvements_pcf_label_in_post_enabled":true,
"responsive_web_edit_tweet_api_enabled":false,
"responsive_web_enhance_cards_enabled":false,
"responsive_web_graphql_exclude_directive_enabled":false,
"responsive_web_graphql_skip_user_profile_image_extensions_enabled":false,
"responsive_web_graphql_timeline_navigation_enabled":false,
"responsive_web_grok_analysis_button_from_backend":false,
"responsive_web_grok_analyze_button_fetch_trends_enabled":false,
"responsive_web_grok_analyze_post_followups_enabled":false,
"responsive_web_grok_image_annotation_enabled":false,
"responsive_web_grok_share_attachment_enabled":false,
"responsive_web_grok_show_grok_translated_post":false,
"responsive_web_jetfuel_frame":false,
"responsive_web_media_download_video_enabled":false,
"responsive_web_twitter_article_tweet_consumption_enabled":true,
"rweb_tipjar_consumption_enabled":true,
"rweb_video_screen_enabled":false,
"standardized_nudges_misinfo":true,
"tweet_awards_web_tipping_enabled":false,
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":true,
"tweetypie_unmention_optimization_enabled":false,
"verified_phone_label_enabled":false,
"view_counts_everywhere_api_enabled":true,
};

Thank you!bro!

これでDLできるかな?

258 let base_url = `https://${host}/i/api/graphql/NmCeCgkVlsRGS1cAwqtgmw/TweetDetail`;

let base_url = `https://${host}/i/api/graphql/2ICDjqPd81tulZcYrtpTuQ/TweetResultByRestId`;

260 "focalTweetId":status_id,

"tweetId":status_id,
269 let features = {
...
290 };

let features = {
"articles_preview_enabled":true,
"c9s_tweet_anatomy_moderator_badge_enabled":true,
"communities_web_enable_tweet_community_results_fetch":false,
"creator_subscriptions_quote_tweet_preview_enabled":false,
"creator_subscriptions_tweet_preview_api_enabled":false,
"freedom_of_speech_not_reach_fetch_enabled":true,
"graphql_is_translatable_rweb_tweet_is_translatable_enabled":true,
"longform_notetweets_consumption_enabled":false,
"longform_notetweets_inline_media_enabled":true,
"longform_notetweets_rich_text_read_enabled":false,
"premium_content_api_read_enabled":false,
"profile_label_improvements_pcf_label_in_post_enabled":true,
"responsive_web_edit_tweet_api_enabled":false,
"responsive_web_enhance_cards_enabled":false,
"responsive_web_graphql_exclude_directive_enabled":false,
"responsive_web_graphql_skip_user_profile_image_extensions_enabled":false,
"responsive_web_graphql_timeline_navigation_enabled":false,
"responsive_web_grok_analysis_button_from_backend":false,
"responsive_web_grok_analyze_button_fetch_trends_enabled":false,
"responsive_web_grok_analyze_post_followups_enabled":false,
"responsive_web_grok_image_annotation_enabled":false,
"responsive_web_grok_share_attachment_enabled":false,
"responsive_web_grok_show_grok_translated_post":false,
"responsive_web_jetfuel_frame":false,
"responsive_web_media_download_video_enabled":false,
"responsive_web_twitter_article_tweet_consumption_enabled":true,
"rweb_tipjar_consumption_enabled":true,
"rweb_video_screen_enabled":false,
"standardized_nudges_misinfo":true,
"tweet_awards_web_tipping_enabled":false,
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":true,
"tweetypie_unmention_optimization_enabled":false,
"verified_phone_label_enabled":false,
"view_counts_everywhere_api_enabled":true,
};

Thank you!bro!

Not working again?

it works, great thanks

§
Создано: 27.04.2025
Изменено: 27.04.2025

ダウンロード成功、さすが日本兄貴

Thanks, it works, the only thing is that it doesn't remember your last save location, but for now it works so I am thankful

The images work fine, but I can't download the videos, am I doing something wrong?

The download button is gray and cannot be clicked.

ダウンロードボタンはグレーでクリックできません。

The button is a copy of the share button, so it's disabled if the share button is. You can make this change to fix it. Around line ~70 in the script.

let btn_down = btn_share.cloneNode(true); // EXISTING LINE
btn_down.querySelector('button').removeAttribute('disabled'); // ADD THIS BELOW

Sorry, this still doesn't work

Sorry, this still doesn't work

ok it can work now.
thanks for everyone

これで DL できるかな?258 let base_url = https://${host}/i/api/graphql/NmCeCgkVlsRGS1cAwqtgmw/TweetDetail;↓let base_url = https://${host}/i/api/graphql/2ICDjqPd81tulZcYrtpTuQ/TweetResultByRestId;260 "focalTweetId":status_id,↓"tweetId":status_id,269 let features = {...290 };↓let features = {"articles_preview_enabled":true,"c9s_tweet_anatomy_moderator_badge_enabled":true,"communities_web_enable_tweet_community_results_fetch":false,"creator_subscriptions_quote_tweet_preview_enabled":false,"creator_subscriptions_tweet_preview_api_enabled":false,"freedom_of_speech_not_reach_fetch_enabled":true,"graphql_is_translatable_rweb_tweet_is_translatable_enabled":true,"longform_notetweets_consumption_enabled":false,"longform_notetweets_inline_media_enabled":true,"longform_notetweets_rich_text_read_enabled":false,"premium_content_api_read_enabled":false,"profile_label_improvements_pcf_label_in_post_enabled":true,"responsive_web_edit_tweet_api_enabled":false,"responsive_web_enhance_cards_enabled":false,"responsive_web_graphql_exclude_directive_enabled":false,"responsive_web_graphql_skip_user_profile_image_extensions_enabled":false,"responsive_web_graphql_timeline_navigation_enabled":false,"responsive_web_grok_analysis_button_from_backend":false,"responsive_web_grok_analyze_button_fetch_trends_enabled":false,"responsive_web_grok_analyze_post_followups_enabled":false,"responsive_web_grok_image_annotation_enabled":false,"responsive_web_grok_share_attachment_enabled":false,"responsive_web_grok_show_grok_translated_post":false,"responsive_web_jetfuel_frame":false,"responsive_web_media_download_video_enabled":false,"responsive_web_twitter_article_tweet_consumption_enabled":true,"rweb_tipjar_consumption_enabled":true,"rweb_video_screen_enabled":false,"standardized_nudges_misinfo":true,"tweet_awards_web_tipping_enabled":false,"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":true,"tweetypie_unmention_optimization_enabled":false,"verified_phone_label_enabled":false,"view_counts_everywhere_api_enabled":true,};

It works, thank you

さすが日本兄貴

これでDLできるかな?

258 let base_url = `https://${host}/i/api/graphql/NmCeCgkVlsRGS1cAwqtgmw/TweetDetail`;

let base_url = `https://${host}/i/api/graphql/2ICDjqPd81tulZcYrtpTuQ/TweetResultByRestId`;

260 "focalTweetId":status_id,

"tweetId":status_id,
269 let features = {
...
290 };

let features = {
"articles_preview_enabled":true,
"c9s_tweet_anatomy_moderator_badge_enabled":true,
"communities_web_enable_tweet_community_results_fetch":false,
"creator_subscriptions_quote_tweet_preview_enabled":false,
"creator_subscriptions_tweet_preview_api_enabled":false,
"freedom_of_speech_not_reach_fetch_enabled":true,
"graphql_is_translatable_rweb_tweet_is_translatable_enabled":true,
"longform_notetweets_consumption_enabled":false,
"longform_notetweets_inline_media_enabled":true,
"longform_notetweets_rich_text_read_enabled":false,
"premium_content_api_read_enabled":false,
"profile_label_improvements_pcf_label_in_post_enabled":true,
"responsive_web_edit_tweet_api_enabled":false,
"responsive_web_enhance_cards_enabled":false,
"responsive_web_graphql_exclude_directive_enabled":false,
"responsive_web_graphql_skip_user_profile_image_extensions_enabled":false,
"responsive_web_graphql_timeline_navigation_enabled":false,
"responsive_web_grok_analysis_button_from_backend":false,
"responsive_web_grok_analyze_button_fetch_trends_enabled":false,
"responsive_web_grok_analyze_post_followups_enabled":false,
"responsive_web_grok_image_annotation_enabled":false,
"responsive_web_grok_share_attachment_enabled":false,
"responsive_web_grok_show_grok_translated_post":false,
"responsive_web_jetfuel_frame":false,
"responsive_web_media_download_video_enabled":false,
"responsive_web_twitter_article_tweet_consumption_enabled":true,
"rweb_tipjar_consumption_enabled":true,
"rweb_video_screen_enabled":false,
"standardized_nudges_misinfo":true,
"tweet_awards_web_tipping_enabled":false,
"tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled":true,
"tweetypie_unmention_optimization_enabled":false,
"verified_phone_label_enabled":false,
"view_counts_everywhere_api_enabled":true,
};

it works,ths

非常感谢您的修正!

Videos longer than 60 seconds still cannot be downloaded
超过60秒的视频仍然无法下载
60秒以上ダウンロードできません

Videos longer than 60 seconds still cannot be downloaded
超过60秒的视频仍然无法下载
60秒以上ダウンロードできません



it works for me normally IDK what's the problem with yours
try this code https://pastebin.com/r53iy73V

超过60秒的视频仍无法下载超过 60 秒的视频仍然无法下载无法下载超过60秒

这个修复代码是有用的,我都把他更新到脚本了,下载十几分钟的我看也能下载啊 https://greasyfork.runtimutd.eu.org/zh-CN/scripts/529453-twitter-x-media-downloader

超过 60 秒的视频仍然无法下载
超过60秒的视频仍然无法下载
无法下载超过 60 秒



我用的正常,不知道你的是什么问题
试试这个代码 https://pastebin.com/r53iy73V

感谢大神!

Anyone knows how to deal with error 429? I swear this did not happened so fast before.

非常感谢,能用了

thank u,jp bro
どうもありがとうございます

The download button is gray and cannot be clicked.

ダウンロードボタンはグレーでクリックできません。



The button is a copy of the share button, so it's disabled if the share button is. You can make this change to fix it. Around line ~70 in the script.

let btn_down = btn_share.cloneNode(true); // EXISTING LINE
btn_down.querySelector('button').removeAttribute('disabled'); // ADD THIS BELOW

Thank you very much for inserting these two lines of code into 70 lines. They are already usable.

ありがとうございますこの2行のコードを70行挿入して使用できるようにしてください

超过60秒的视频仍无法下载超过 60 秒的视频仍然无法下载无法下载超过60秒

这个修复代码是有用的,我都把他更新到脚本了,下载十几分钟的我看也能下载啊
https://greasyfork.runtimutd.eu.org/zh-CN/scripts/529453-twitter-x-media-downloader

非常感谢

Videos longer than 60 seconds still cannot be downloaded
超过60秒的视频仍然无法下载
60秒以上ダウンロードできません



it works for me normally IDK what's the problem with yours
try this code https://pastebin.com/r53iy73V

Thank you very much.

Anyone knows how to deal with error 429? I swear this did not happened so fast before.



感谢 非常完美丝滑

Thank you all.

Ответить

Войдите, чтобы ответить.