Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/liesauer/telemediaspider

Telegram media spider for personal use
https://github.com/liesauer/telemediaspider

downloader gramjs media spider telegram

Last synced: about 2 months ago
JSON representation

Telegram media spider for personal use

Awesome Lists containing this project

README

        

# TeleMediaSpider
Telegram 频道爬虫

![屏幕截图](screenshot.jpg)

# 初始化(开发)
```bash
yarn
```

# 如何调试(开发)
`VS Code` 中直接F5运行 `Launch`。

# 如何打包(开发)
`VS Code` 中运行 `pack executable` 任务,可执行文件会生成到 `output` 目录下。








# 如何使用

## 0. 下载
已打包好的TeleSpider可在这里下载:[https://github.com/liesauer/TeleMediaSpider/releases](https://github.com/liesauer/TeleMediaSpider/releases),包含 `Windows x64` `Linux x64` 多个版本,如需其他版本,请自行打包。

## 1. 首次运行
直接运行,根据提示进行账号配置,配置以下内容:



`account.apiId`(参考文档,[Getting API ID and API HASH | GramJS](https://gram.js.org/getting-started/authorization#getting-api-id-and-api-hash))


`account.apiHash`(参考文档,[Getting API ID and API HASH | GramJS](https://gram.js.org/getting-started/authorization#getting-api-id-and-api-hash))


`account.account`(Telegram账号,**需要加上区号**,比如中国大陆就是:+861xxxxxxxxxx,其他区域同理)


~~`account.session`~~(这个不需要填,登录后自动保存)

配置保存后,根据提示进行登录(仅第一次需要)

## 2. 配置频道列表

登录成功后,根据提示进行频道配置,配置以下内容:



`spider.channels`

**频道id可以在频道列表文件 `data/channels.txt` 中找到并复制**

配置保存后,就会自动开始抓取了。

示例:

```toml
[spider]
channels = [ "频道id1", "频道id2" ]
```

**如何抓取自己的已保存信息?**


使用固定的频道id:`me` 即可。

默认抓取频道的`图片` `视频` `音频` `文件`,如果你想特定的频道只抓取特定的数据,也可自由配置,有效值:`photo` `video` `audio` `file`。

将以下配置

```toml
[spider.medias]
_ = "photo,video,audio,file"
```

修改为

```toml
[spider.medias]
频道id1 = "photo"
频道id2 = "photo,video,audio,file"
```

## 3. 开始抓取
配置完账号信息、频道列表后,就会自动开始抓取啦,智能获取新消息,支持断点续抓,可任意时候随意关闭软件。

## 4. 并发下载
**注意:这并不是传统意义上的并发下载,而是指多频道同时下载,单一频道只能一条一条信息从前往后解析下载。**

将以下配置

```toml
[spider]
concurrency = 5
```

修改为你想要的多频道同时下载数,默认为5个频道同时下载。

## 5. 大小过滤
默认抓取大小不超过10GB的文件,如有需求,可按全局配置或按频道配置文件大小过滤。

格式:`下限-上限`


单位:`字节`


进制:`1024`


示例:`102400-10485760`


解释:抓取文件大小在 `100KB ~ 10MB` 之间的文件(含)

优先级:`频道配置 > 全局配置`

### 5.1. 全局配置
修改以下配置即可

```toml
[filter.default]
photo = "0-10737418240"
video = "0-10737418240"
audio = "0-10737418240"
file = "0-10737418240"
```

### 5.2. 频道配置
修改以下配置即可

```toml
[filter.photo]
频道id1 = "102400-999999999"

[filter.video]
频道id1 = "102400-999999999"

[filter.audio]
频道id1 = "102400-999999999"

[filter.file]
频道id1 = "102400-999999999"
```

## 代理设置

如果你所在的地区无法直连TG服务器,可使用代理进行连接

不支持 secret 以 `ee` 开头的 MTProxy,相关issue:[gram-js/gramjs#426](https://github.com/gram-js/gramjs/issues/426)

参考:


[Using MTProxies and Socks5 Proxies](https://gram.js.org/getting-started/authorization#using-mtproxies-and-socks5-proxies)

# 配置说明

**除了第一次配置账号信息,修改任意配置都需要重启软件生效**

**配置文件中所有的 `_` 配置项都是占位,用来当成示例配置供参考填写的,删除无实际影响。**

# 数据保存
默认下,同一条消息中的多张图片/文件会视为独立的文件,平级存放在数据文件夹中。
所有数据都保存在 `data/{频道id}[/_{子组id}]` 文件夹下,文件名格式:`[{聚合id}_]{消息id}[_{原文件名}]`。

## 消息聚合
```toml
[spider]
groupMessage = true
```

当开启消息聚合后,这些文件会放在子文件夹中。
即保存在 `data/{频道id}[/_{子组id}][/{聚合id}]` 文件夹下,文件名格式:`{消息id}[_{原文件名}]`。

## 原始数据保存
```toml
[spider]
saveRawMessage = true
```

当开启原始数据保存后,所有的频道列表、频道消息都会保存在 `data/database.db` sqlite3数据库中,以方便有二开或对接的需求。

### `channel` 表
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| id | string | 频道id/子组id |
| pid | string | 父频道id(子组才有) |
| title | string | 频道名 |

### `message` 表
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| id | number | 自增id |
| uniqueId | string | 内部使用 |
| channelId | string | 频道id |
| topicId | string | 子组id |
| messageId | string | 消息id |
| groupedId | string | 聚合id |
| text | string | 消息文本内容 |
| rawMessage | string | 消息原始内容(JSON) |
| fileName | string | 原文件名(一般只有文件才有,图片等不会有) |
| savePath | string | 文件保存位置(相对于 `data` 文件夹) |
| date | number | 消息发送时间戳 |