另外,请尽量避免使用百度等搜索引擎,请以Bing配合ADBlocker使用。
2023年8月左右,Twitter Media Downloader插件的作者宣布由于各种原因,不再维护此插件,随后将此插件的github页面删除。
基于此原因,目前暂无(暂未发现)一劳永逸式的一键批量下载X(原推特)用户所有图片功能,于是我在这篇gallery-dl相关文章的指引下摸清了gallery-dl的使用方法并在此基础上摸出了微痛地从Twitter Media Downloader的下载文件中导出下载记录到gallery-dl的方法,使用此方法既可以下载所有文件,又可以在已有过下载记录的基础上避免重复下载相同文件。
你需要准备如下软件:
1. Python,版本不限;
2. EmEditor等大文本文件编辑器,考虑到数据大小一般的文本编辑器如记事本可能会崩溃,且编辑功能有限。
3. Excel,版本不限,用于整合文件列表。
4. DB Browser,用于编辑数据库文件。
5. Gallery-dl程序
6. Powertoys或其他具备以正则表达式批量重命名文件名的软件
7. Everything,用于检索大量文件
8. Chrome,安装Get cookies.txt LOCALLY,用于导出X的用户cookies,请注意这样做存在账号泄露风险。插件地址可在引用文章中找到。
1) 首先,确保你已经配置好了python相关的设置,此处不再赘述。
2) 前往你存放X相关图片的地方,也就是Twitter Media Downloader的下载文件夹,打开everything,搜索所有符合用户名-Xid-8位时间码-6位随机码-img/vid00格式的文件,即XXXX-0000000000000000000-20230101-000000-img1,全选或分次选(根据文件数量可能需要多选几次),使用6中的重命名软件批量重命名至此格式:
XXXX-0000000000000000000-20230101-01
可供参考的正则表达式:
匹配:_(\d{6})(\-)(\w{3})(\d)(\.\w{3})$
替换:-0\4\5
3) 然后,新建一个bat文件后用文本编辑器打开,输入以下内容后保存:
dir /b /s /a-d >files.txt
这个文件在双击执行后会在同目录下创建一个files.txt文件,包含文件夹内所有文件的文件名及路径,按情况不同这个文件可能会高达5mb甚至更高,普通的文本编辑器打开可能会崩溃,切记。
4) 使用EmEditor打开这个文件,首先将所有与2)步中改名后文件无关的文件名剔除,确保只保留下2)中格式一致的文件名。参考正则表达式如下:
^.*(\\.*)\\(.*)\-(\d+)\-\d{8}-.*0\d\.\w\w\w$
5) 选择所有匹配项,将它们剪切到新的文本文件中,然后删去文件名前面和后面的所有东西。参考正则表达式如下(分步骤):
匹配1:^.*(\\.*)\\((.*)\-(\d+)\-\d{8}-.*0\d\.\w\w\w$)
替换1:\2
匹配2:\.\w{3}
替换2:留空(删除)
匹配3:(\-\d{8}\-)0
替换3:_0_
匹配4:.*(\-)
替换4:twitter
6) 完成后,你应该得到一个如下图的文件:

1) 在GitHub页面下载Gallery-dl.exe后放进一个喜欢的位置,将所在文件夹路径添加到高级系统设置下的用户环境变量(不要带中文)。做完后打开命令提示符,输入
gallery-dl –version
来测试是否安装成功。出现版本号则说明成功。
2) 在以下路径创建config.json文件,完成后用文本编辑器打开,粘贴并编辑以下内容:
{
"extractor":
{
"base-directory": "./gallery-dl/",
"parent-directory": false,
"postprocessors": null,
"archive": "这里填写你想放置下载记录数据库的文件路径,不要有中文/{category}.sqlite3",
"cookies": null,
"cookies-update": true,
"proxy": "如果使用了全局梯,这里填写梯子的端口号xxxx,如127.0.0.1:xxxx",
"skip": true,
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0",
"retries": 4,
"timeout": 30.0,
"verify": true,
"fallback": true,
"sleep": 0,
"sleep-request": 0,
"sleep-extractor": 0,
"path-restrict": "auto",
"path-replace": "_",
"path-remove": "\\u0000-\\u001f\\u007f",
"path-strip": "auto",
"path-extended": true,
"extension-map": {
"jpeg": "jpg",
"jpe" : "jpg",
"jfif": "jpg",
"jif" : "jpg",
"jfi" : "jpg"
},
"twitter":
{
"username": null,
"password": null,
"cookies": "这里填写你从浏览器导出的X用户cookies的文件路径,路径中要包含文件名和后缀名",
"base-directory": "这里填写你希望gallery-dl将下载自推特的内容存放的位置,请注意它会在这个路径下自动创建名为twitter的子文件夹",
"filename": "{author['name']}-{tweet_id}-{date:%Y%m%d}-0{num}.{extension}",
"cards": false,
"conversations": false,
"pinned": false,
"quoted": false,
"replies": false,
"retweets": false,
"strategy": null,
"text-tweets": false,
"twitpic": false,
"unique": true,
"users": "user",
"videos": true
},
"unsplash":
{
"format": "raw"
},
"vsco":
{
"videos": true
},
"zerochan":
{
"username": null,
"password": null,
"metadata": false
},
"booru":
{
"tags": false,
"notes": false
}
},
"downloader":
{
"filesize-min": null,
"filesize-max": null,
"mtime": true,
"part": true,
"part-directory": null,
"progress": 3.0,
"rate": null,
"retries": 4,
"timeout": 30.0,
"verify": true,
"http":
{
"adjust-extensions": true,
"chunk-size": 32768,
"headers": null,
"validate": true
},
"ytdl":
{
"format": null,
"forward-cookies": false,
"logging": true,
"module": null,
"outtmpl": null,
"raw-options": null
}
},
"output":
{
"mode": "auto",
"progress": true,
"shorten": true,
"ansi": false,
"colors": {
"success": "1;32",
"skip" : "2"
},
"skip": true,
"log": "[{name}][{levelname}] {message}",
"logfile": null,
"unsupportedfile": null
},
"netrc": false
}
3) 理论上,这个时候你已经可以下载图片了。找一个图片数量较少的X账户,将它的媒体页链接按如下格式粘贴进cmd里:
gallery-dl https://twitter.com/AAAAAA/media
4) 回车后应该会看到下载已经开始。
新建excel文件,将你在第三章中得到的文本文件中的内容粘贴进第一列,如下图:

保存为csv格式,记住位置,准备后续导入。
用DB Browser打开你在上面输入的下载记录数据库位置中的twitter.sqlite3,若找不到可活用Everything查找,按照以下步骤导入csv文件:

第一步

一定要注意导入时的表名称与已有表名称必须相同,否则会因表名称不对而无法识别下载记录
导入时若提示是否覆盖

导入后数据库会多出上万条记录,如图:

写入更改,至此你就完成了Twitter Media Downloader的下载记录的导入工作,后续使用gallery-dl下载内容时就不会下载到重复的内容。
新建文本文档,粘贴以下内容后保存为你喜欢的名字.py:
import subprocess
# 获取用户输入的网址
url = input("请输入网址: ")
# 构建命令行命令
cmd = ["gallery-dl", url]
try:
# 执行命令
subprocess.run(cmd, check=True)
except subprocess.CalledProcessError as e:
print(f"命令执行失败,返回码: {e.returncode}")
except FileNotFoundError:
print("找不到gallery-dl命令,请确保已经安装并在系统路径中可用。")
except KeyboardInterrupt:
print("用户取消了操作。") (此代码来自chatgpt)
保存后,双击此程序则可在弹出窗口中直接粘贴链接后回车下载,无需每次都手打gallery-dl+链接,如图:

下载完成后窗口就会消失,属于正常情况
声明:本文仅作个人使用时的操作方法留档,不保证教会,本人也并非码农或攻城狮,文中正则表达式和python脚本的编写使用到了chatgpt,因此若遇到网络或代码相关的问题还请直接前往gallery-dl的github页面进行反馈或寻找解答。感谢用户:网页链接的文章的帮助。