2023.10月,如何批量下载指定X用户的图片视频等
ArdorMaiden_7535
编辑于 2023年10月05日 05:25

本文不提供任何相关软件下载,请自食其力。文章仅作方法分享。

另外,请尽量避免使用百度等搜索引擎,请以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)     完成后,你应该得到一个如下图的文件: 

 

四、      Gallery-dl的设置

1)      在GitHub页面下载Gallery-dl.exe后放进一个喜欢的位置,将所在文件夹路径添加到高级系统设置下的用户环境变量(不要带中文)。做完后打开命令提示符,输入

gallery-dl –version

来测试是否安装成功。出现版本号则说明成功。

2)      在以下路径创建config.json文件,完成后用文本编辑器打开,粘贴并编辑以下内容:

代码块
JavaScript
自动换行
复制代码
{
    "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)      回车后应该会看到下载已经开始。

五、    将下载记录同步至gallery-dl下载记录数据库

新建excel文件,将你在第三章中得到的文本文件中的内容粘贴进第一列,如下图:

保存为csv格式,记住位置,准备后续导入。

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

第一步

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

导入时若提示是否覆盖

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

写入更改,至此你就完成了Twitter Media Downloader的下载记录的导入工作,后续使用gallery-dl下载内容时就不会下载到重复的内容。

六、    使用python达成快捷下载

新建文本文档,粘贴以下内容后保存为你喜欢的名字.py:

代码块
JavaScript
自动换行
复制代码
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页面进行反馈或寻找解答。感谢用户:网页链接​的文章的帮助。