ljg-x-download

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

ljg-x-download

ljg-x-download

从 X (Twitter) 链接下载图片或视频到 ~/Downloads。
Download images or videos from X (Twitter) links to ~/Downloads.

依赖

Dependencies

  • yt-dlp
    (已安装)
  • yt-dlp
    (already installed)

执行流程

Execution Steps

1. 解析输入

1. Parse Input

从用户输入中提取 X/Twitter URL。支持的格式:
  • https://x.com/user/status/123456
  • https://twitter.com/user/status/123456
  • https://mobile.twitter.com/user/status/123456
  • 带查询参数的 URL(yt-dlp 自动处理
    ?s=20
    等追踪参数)
缩短链接(t.co)先解析:
curl -Ls -o /dev/null -w '%{url_effective}' "SHORT_URL"
如果用户没有提供 URL,用 AskUserQuestion 要求提供。
Extract the X/Twitter URL from user input. Supported formats:
  • https://x.com/user/status/123456
  • https://twitter.com/user/status/123456
  • https://mobile.twitter.com/user/status/123456
  • URLs with query parameters (yt-dlp automatically handles tracking parameters like
    ?s=20
    )
Resolve shortened links (t.co) first:
curl -Ls -o /dev/null -w '%{url_effective}' "SHORT_URL"
If the user does not provide a URL, use AskUserQuestion to request it.

2. 尝试直接下载(视频优先)

2. Attempt Direct Download (Video Priority)

直接用 yt-dlp 下载,无需先探测:
bash
yt-dlp -o "~/Downloads/%(uploader)s_%(id)s.%(ext)s" "URL"
如果成功(视频推文),完成。跳到步骤 4 汇报结果。
Download directly with yt-dlp without prior detection:
bash
yt-dlp -o "~/Downloads/%(uploader)s_%(id)s.%(ext)s" "URL"
If successful (video tweet), the process is complete. Proceed to step 4 to report the result.

3. 视频下载失败时,提取图片

3. Extract Images When Video Download Fails

yt-dlp 对纯图片推文可能报错。此时用
--dump-json
提取图片 URL:
bash
yt-dlp --dump-json "URL" 2>&1
判断结果:
  • JSON 中有
    thumbnails
    数组 → 提取图片 URL
  • JSON 为空或报错
    no video
    → 推文无媒体,告知用户"该推文不包含可下载的图片或视频"
  • 报错含
    login
    /
    authentication
    → 需要登录(见故障排除)
  • 其他错误 → 报告具体错误信息
图片下载:
从 JSON 的
thumbnails
数组提取所有图片 URL,替换
name=small
name=medium
name=orig
获取原图,然后逐一下载:
bash
curl -L -o ~/Downloads/tweet_ID_1.jpg "https://pbs.twimg.com/media/xxx?format=jpg&name=orig"
curl -L -o ~/Downloads/tweet_ID_2.jpg "https://pbs.twimg.com/media/yyy?format=jpg&name=orig"
文件扩展名跟随 URL 中的
format
参数(jpg/png/webp)。
yt-dlp may throw errors for image-only tweets. In this case, use
--dump-json
to extract image URLs:
bash
yt-dlp --dump-json "URL" 2>&1
Result Judgment:
  • If the JSON contains a
    thumbnails
    array → Extract image URLs
  • If the JSON is empty or throws a
    no video
    error → The tweet has no media, inform the user: "This tweet does not contain downloadable images or videos"
  • If the error contains
    login
    /
    authentication
    → Login is required (see Troubleshooting)
  • Other errors → Report the specific error message
Image Download:
Extract all image URLs from the
thumbnails
array in the JSON, replace
name=small
or
name=medium
with
name=orig
to get the original image, then download them one by one:
bash
curl -L -o ~/Downloads/tweet_ID_1.jpg "https://pbs.twimg.com/media/xxx?format=jpg&name=orig"
curl -L -o ~/Downloads/tweet_ID_2.jpg "https://pbs.twimg.com/media/yyy?format=jpg&name=orig"
The file extension follows the
format
parameter in the URL (jpg/png/webp).

4. 汇报结果

4. Report Results

下载完成后,用
ls -lh
列出已下载的文件:文件名、大小、路径。
After downloading is complete, use
ls -lh
to list the downloaded files: file name, size, and path.

故障排除

Troubleshooting

需要登录

Login Required

yt-dlp 报错含
login
/
Sign in
/
age-restricted
时,加
--cookies-from-browser chrome
bash
yt-dlp --cookies-from-browser chrome -o "~/Downloads/%(uploader)s_%(id)s.%(ext)s" "URL"
When yt-dlp reports errors containing
login
/
Sign in
/
age-restricted
, add
--cookies-from-browser chrome
:
bash
yt-dlp --cookies-from-browser chrome -o "~/Downloads/%(uploader)s_%(id)s.%(ext)s" "URL"

推文无媒体

No Media in Tweet

纯文字推文没有可下载的媒体。告知用户即可。
Text-only tweets have no downloadable media. Simply inform the user.