{"id":20236753,"url":"https://github.com/liesauer/telemediaspider","last_synced_at":"2025-04-10T00:18:03.093Z","repository":{"id":243352824,"uuid":"805356425","full_name":"liesauer/TeleMediaSpider","owner":"liesauer","description":"Telegram media spider for personal use","archived":false,"fork":false,"pushed_at":"2025-03-28T13:07:32.000Z","size":4280,"stargazers_count":75,"open_issues_count":7,"forks_count":8,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-10T00:17:57.174Z","etag":null,"topics":["downloader","gramjs","media","spider","telegram"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/liesauer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-24T12:02:41.000Z","updated_at":"2025-04-09T18:13:36.000Z","dependencies_parsed_at":"2024-06-08T09:27:52.064Z","dependency_job_id":"2bef20a3-6272-4ad4-829e-7e89cb3129d4","html_url":"https://github.com/liesauer/TeleMediaSpider","commit_stats":null,"previous_names":["liesauer/telemediaspider"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liesauer%2FTeleMediaSpider","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liesauer%2FTeleMediaSpider/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liesauer%2FTeleMediaSpider/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liesauer%2FTeleMediaSpider/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/liesauer","download_url":"https://codeload.github.com/liesauer/TeleMediaSpider/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248131318,"owners_count":21052820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["downloader","gramjs","media","spider","telegram"],"created_at":"2024-11-14T08:23:03.989Z","updated_at":"2025-04-10T00:18:03.075Z","avatar_url":"https://github.com/liesauer.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TeleMediaSpider\r\nTelegram 频道爬虫\r\n\r\n![屏幕截图](screenshot.jpg)\r\n\r\n# 初始化（开发）\r\n```bash\r\nyarn\r\n```\r\n\r\n# 如何调试（开发）\r\n`VS Code` 中直接F5运行 `Launch`。\r\n\r\n# 如何打包（开发）\r\n`VS Code` 中运行 `pack executable` 任务，可执行文件会生成到 `output` 目录下。\r\n\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\u003cbr /\u003e\r\n\r\n# 如何使用\r\n\r\n## 0. 下载\r\n已打包好的TeleSpider可在这里下载：[https://github.com/liesauer/TeleMediaSpider/releases](https://github.com/liesauer/TeleMediaSpider/releases)，包含 `Windows x64` `Linux x64` `macOS x64` 多个版本，如需其他版本，请自行打包。\r\n\r\n## 1. 首次运行\r\n直接运行，根据提示进行账号配置，配置以下内容：\r\n\u003cbr /\u003e\u003cbr /\u003e\r\n`account.apiId`（参考文档，[Getting API ID and API HASH | GramJS](https://gram.js.org/getting-started/authorization#getting-api-id-and-api-hash)）\r\n\u003cbr /\u003e\r\n`account.apiHash`（参考文档，[Getting API ID and API HASH | GramJS](https://gram.js.org/getting-started/authorization#getting-api-id-and-api-hash)）\r\n\u003cbr /\u003e\r\n`account.account`（Telegram账号，**需要加上区号**，比如中国大陆就是：+861xxxxxxxxxx，其他区域同理）\r\n\u003cbr /\u003e\r\n~~`account.session`~~（这个不需要填，登录后自动保存）\r\n\r\n无法申请 API （一直提示 ERROR 等）可以尝试这个教程，[另一种不需要 API ID 和 API HASH 的登录方式](https://github.com/liesauer/TGLogin/discussions/1)。\r\n\r\n~~`account.deviceModel`~~（正常不需要填，使用无 API 方案建议填写）\r\n\u003cbr /\u003e\r\n~~`account.systemVersion`~~（正常不需要填，使用无 API 方案建议填写）\r\n\u003cbr /\u003e\r\n~~`account.appVersion`~~（正常不需要填，使用无 API 方案建议填写）\r\n\u003cbr /\u003e\r\n~~`account.langCode`~~（正常不需要填，使用无 API 方案建议填写）\r\n\u003cbr /\u003e\r\n~~`account.systemLangCode`~~（正常不需要填，使用无 API 方案建议填写）\r\n\r\n配置保存后，根据提示进行登录（仅第一次需要）\r\n\r\n## 2. 配置频道列表\r\n\r\n登录成功后，根据提示进行频道配置，配置以下内容：\r\n\u003cbr /\u003e\u003cbr /\u003e\r\n`spider.channels`\r\n\r\n**频道id可以在频道列表文件 `data/channels.txt` 中找到并复制**\r\n\r\n配置保存后，就会自动开始抓取了。\r\n\r\n示例：\r\n\r\n```toml\r\n[spider]\r\nchannels = [ \"频道id1\", \"频道id2\" ]\r\n```\r\n\r\n**如何抓取自己的已保存信息？**\r\n\u003cbr /\u003e\r\n使用固定的频道id：`me` 即可。\r\n\r\n默认抓取频道的`图片` `视频` `音频` `文件`，如果你想特定的频道只抓取特定的数据，也可自由配置，有效值：`photo` `video` `audio` `file`。\r\n\r\n将以下配置\r\n\r\n```toml\r\n  [spider.medias]\r\n  _ = \"photo,video,audio,file\"\r\n```\r\n\r\n修改为\r\n\r\n```toml\r\n  [spider.medias]\r\n  频道id1 = \"photo\"\r\n  频道id2 = \"photo,video,audio,file\"\r\n```\r\n\r\n## 3. 开始抓取\r\n配置完账号信息、频道列表后，就会自动开始抓取啦，智能获取新消息，支持断点续抓，可任意时候随意关闭软件。\r\n\r\n## 4. 并发下载\r\n**注意：这并不是传统意义上的并发下载，而是指多频道同时下载，单一频道只能一条一条信息从前往后解析下载。**\r\n\r\n将以下配置\r\n\r\n```toml\r\n[spider]\r\nconcurrency = 5\r\n```\r\n\r\n修改为你想要的多频道同时下载数，默认为5个频道同时下载。\r\n\r\n## 5. 大小过滤\r\n默认抓取大小不超过10GB的文件，如有需求，可按全局配置或按频道配置文件大小过滤。\r\n\r\n格式：`下限-上限`\r\n\u003cbr /\u003e\r\n单位：`字节`\r\n\u003cbr /\u003e\r\n进制：`1024`\r\n\u003cbr /\u003e\r\n示例：`102400-10485760`\r\n\u003cbr /\u003e\r\n解释：抓取文件大小在 `100KB ~ 10MB` 之间的文件（含）\r\n\r\n优先级：`频道配置 \u003e 全局配置`\r\n\r\n### 5.1. 全局配置\r\n修改以下配置即可\r\n\r\n```toml\r\n[filter.default]\r\nphoto = \"0-10737418240\"\r\nvideo = \"0-10737418240\"\r\naudio = \"0-10737418240\"\r\nfile = \"0-10737418240\"\r\n```\r\n\r\n### 5.2. 频道配置\r\n修改以下配置即可\r\n\r\n```toml\r\n[filter.photo]\r\n频道id1 = \"102400-999999999\"\r\n\r\n[filter.video]\r\n频道id1 = \"102400-999999999\"\r\n\r\n[filter.audio]\r\n频道id1 = \"102400-999999999\"\r\n\r\n[filter.file]\r\n频道id1 = \"102400-999999999\"\r\n```\r\n\r\n## 代理设置\r\n\r\n如果你所在的地区无法直连TG服务器，可使用代理进行连接\r\n\r\n不支持 secret 以 `ee` 开头的 MTProxy，相关issue：[gram-js/gramjs#426](https://github.com/gram-js/gramjs/issues/426)\r\n\r\n参考：\r\n\u003cbr /\u003e\r\n[Using MTProxies and Socks5 Proxies](https://gram.js.org/getting-started/authorization#using-mtproxies-and-socks5-proxies)\r\n\r\n# 配置说明\r\n\r\n**除了第一次配置账号信息，修改任意配置都需要重启软件生效**\r\n\r\n**配置文件中所有的 `_` 配置项都是占位，用来当成示例配置供参考填写的，删除无实际影响。**\r\n\r\n# 数据保存\r\n默认下，同一条消息中的多张图片/文件会视为独立的文件，平级存放在数据文件夹中。\r\n所有数据都保存在 `data/{频道id}[/_{子组id}]` 文件夹下，文件名格式：`[{聚合id}_]{消息id}[_{原文件名}]`。\r\n\r\n## 消息聚合\r\n```toml\r\n[spider]\r\ngroupMessage = true\r\n```\r\n\r\n当开启消息聚合后，这些文件会放在子文件夹中。\r\n即保存在 `data/{频道id}[/_{子组id}][/{聚合id}]` 文件夹下，文件名格式：`{消息id}[_{原文件名}]`。\r\n\r\n## 原始数据保存\r\n```toml\r\n[spider]\r\nsaveRawMessage = true\r\n```\r\n\r\n当开启原始数据保存后，所有的频道列表、频道消息都会保存在 `data/database.db` sqlite3数据库中，以方便有二开或对接的需求。\r\n\r\n### `channel` 表\r\n| 字段  | 类型    | 说明               |\r\n| ---   | ---    | ---                |\r\n| id    | string | 频道id/子组id       |\r\n| pid   | string | 父频道id（子组才有） |\r\n| title | string | 频道名              |\r\n\r\n\r\n### `message` 表\r\n| 字段       | 类型    | 说明                                   |\r\n| ---        | ---    | ---                                    |\r\n| id         | number | 自增id                                 |\r\n| uniqueId   | string | 内部使用                               |\r\n| channelId  | string | 频道id                                 |\r\n| topicId    | string | 子组id                                 |\r\n| messageId  | string | 消息id                                 |\r\n| groupedId  | string | 聚合id                                 |\r\n| text       | string | 消息文本内容                            |\r\n| rawMessage | string | 消息原始内容（JSON）                     |\r\n| fileName   | string | 原文件名（一般只有文件才有，图片等不会有） |\r\n| savePath   | string | 文件保存位置（相对于 `data` 文件夹）      |\r\n| date       | number | 消息发送时间戳                           |\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliesauer%2Ftelemediaspider","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliesauer%2Ftelemediaspider","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliesauer%2Ftelemediaspider/lists"}