# QQ 聊天记录提取器
## 简介
从 QQ 聊天记录文件中提取聊天信息,仅支持 `txt` 格式的聊天记录。
## 安装
使用 `pip` 安装,要求 `Python 3.9` 或以上版本。
```bash
> pip install -U qq-chat-history
```
## 使用
最简单的启动方式如下,它会自动在当前目录下创建 `output.json` 进行输出(如果安装到虚拟环境请确保已激活)。
```bash
> qq-chat-history /path/to/file.txt
```
启动时输入 `--help` 参数查看更多配置项。
```bash
> qq-chat-history --help
```
或者,可以在代码中使用,如下:
```python
import qq_chat_history
lines = '''
=========
假装我是 QQ 自动生成的文件头
=========
1883-03-07 11:22:33 A<someone@example.com>
关注永雏塔菲喵
关注永雏塔菲谢谢喵
1883-03-07 12:34:56 B(123123)
TCG
1883-03-07 13:24:36 C(456456)
TCG
1883-03-07 22:00:51 A<someone@example.com>
塔菲怎么你了
'''.strip().splitlines()
for msg in qq_chat_history.parse(lines):
print(msg.date, msg.id, msg.name, msg.content)
```
注意 `parse` 方法返回的是一个 `Body` 对象,一般以 `Iterable[Message]` 的形式使用。除外,`Body` 也提供了几个函数,~虽然一般也没什么用~。
## Tips
+ 在 `0.3.0+` 版本中,对于 `parse` 方法的实现进行了大调整,它将返回一个 `Body` 类,原先是 `Iterable[Message]`。但这并**不会导致兼容性问题**,因为 `Body` 也是一个 `Iterable[Message]`。
不同的是,`Body` 类相对于原先单纯的生成器**提供更多功能**,例如`find_xxx` 方法,可以从数据中查找指定 `id` 或 `name` 的消息;`save` 方法可以将数据以 `yaml` 或 `json` 格式保存到文件中,虽然这个工作一般都直接以 `CLI` 模式启动来完成。
+ 在 `0.3.0+` 版本中,你可以向 `parse` 中传入多种多样的类型。
+ `Iterable[str]`:迭代每行的可迭代对象,如 `list` 或 `tuple` 等。
+ `TextIOBase`:文本文件对象,如用 `open` 打开的文本文件,或者 `io.StringIO` 都属于文本文件对象。
+ `str`, `Path`:文件路径,如 `./data.txt`。
这些参数都将被调用合适的工厂方法来构造 `Body` 对象。
+ 由于 `parse` 这个名字的含义比较不清晰,推荐与不推荐的使用方式如下:
```python
# Not recommended 👎
from qq_chat_history import parse
parse(...)
# Recommended 👍
import qq_chat_history
qq_chat_history.parse(...)
from qq_chat_history import parse as parse_qq
parse_qq(...)
```
Raw data
{
"_id": null,
"home_page": "https://github.com/kifuan/qq-chat-history",
"name": "qq-chat-history",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9,<4.0",
"maintainer_email": "",
"keywords": "",
"author": "kifuan",
"author_email": "kifuan@foxmail.com",
"download_url": "https://files.pythonhosted.org/packages/36/38/bf46aec548ff9069ef23506bd48b64f43f710ee17e578e8c7d7581e62ff2/qq_chat_history-1.1.2.tar.gz",
"platform": null,
"description": "# QQ \u804a\u5929\u8bb0\u5f55\u63d0\u53d6\u5668\n\n## \u7b80\u4ecb\n\n\u4ece QQ \u804a\u5929\u8bb0\u5f55\u6587\u4ef6\u4e2d\u63d0\u53d6\u804a\u5929\u4fe1\u606f\uff0c\u4ec5\u652f\u6301 `txt` \u683c\u5f0f\u7684\u804a\u5929\u8bb0\u5f55\u3002\n\n\n## \u5b89\u88c5\n\n\u4f7f\u7528 `pip` \u5b89\u88c5\uff0c\u8981\u6c42 `Python 3.9` \u6216\u4ee5\u4e0a\u7248\u672c\u3002\n\n```bash\n> pip install -U qq-chat-history\n```\n\n## \u4f7f\u7528\n\n\u6700\u7b80\u5355\u7684\u542f\u52a8\u65b9\u5f0f\u5982\u4e0b\uff0c\u5b83\u4f1a\u81ea\u52a8\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u521b\u5efa `output.json` \u8fdb\u884c\u8f93\u51fa\uff08\u5982\u679c\u5b89\u88c5\u5230\u865a\u62df\u73af\u5883\u8bf7\u786e\u4fdd\u5df2\u6fc0\u6d3b\uff09\u3002\n\n```bash\n> qq-chat-history /path/to/file.txt\n```\n\n\u542f\u52a8\u65f6\u8f93\u5165 `--help` \u53c2\u6570\u67e5\u770b\u66f4\u591a\u914d\u7f6e\u9879\u3002\n\n```bash\n> qq-chat-history --help\n```\n\n\u6216\u8005\uff0c\u53ef\u4ee5\u5728\u4ee3\u7801\u4e2d\u4f7f\u7528\uff0c\u5982\u4e0b\uff1a\n\n```python\nimport qq_chat_history\n\nlines = '''\n=========\n\u5047\u88c5\u6211\u662f QQ \u81ea\u52a8\u751f\u6210\u7684\u6587\u4ef6\u5934\n=========\n\n1883-03-07 11:22:33 A<someone@example.com>\n\u5173\u6ce8\u6c38\u96cf\u5854\u83f2\u55b5\n\u5173\u6ce8\u6c38\u96cf\u5854\u83f2\u8c22\u8c22\u55b5\n\n1883-03-07 12:34:56 B(123123)\nTCG\n\n1883-03-07 13:24:36 C(456456)\nTCG\n\n1883-03-07 22:00:51 A<someone@example.com>\n\u5854\u83f2\u600e\u4e48\u4f60\u4e86\n'''.strip().splitlines()\n\nfor msg in qq_chat_history.parse(lines):\n print(msg.date, msg.id, msg.name, msg.content)\n```\n\n\u6ce8\u610f `parse` \u65b9\u6cd5\u8fd4\u56de\u7684\u662f\u4e00\u4e2a `Body` \u5bf9\u8c61\uff0c\u4e00\u822c\u4ee5 `Iterable[Message]` \u7684\u5f62\u5f0f\u4f7f\u7528\u3002\u9664\u5916\uff0c`Body` \u4e5f\u63d0\u4f9b\u4e86\u51e0\u4e2a\u51fd\u6570\uff0c~\u867d\u7136\u4e00\u822c\u4e5f\u6ca1\u4ec0\u4e48\u7528~\u3002\n\n## Tips\n\n+ \u5728 `0.3.0+` \u7248\u672c\u4e2d\uff0c\u5bf9\u4e8e `parse` \u65b9\u6cd5\u7684\u5b9e\u73b0\u8fdb\u884c\u4e86\u5927\u8c03\u6574\uff0c\u5b83\u5c06\u8fd4\u56de\u4e00\u4e2a `Body` \u7c7b\uff0c\u539f\u5148\u662f `Iterable[Message]`\u3002\u4f46\u8fd9\u5e76**\u4e0d\u4f1a\u5bfc\u81f4\u517c\u5bb9\u6027\u95ee\u9898**\uff0c\u56e0\u4e3a `Body` \u4e5f\u662f\u4e00\u4e2a `Iterable[Message]`\u3002\n\n \u4e0d\u540c\u7684\u662f\uff0c`Body` \u7c7b\u76f8\u5bf9\u4e8e\u539f\u5148\u5355\u7eaf\u7684\u751f\u6210\u5668**\u63d0\u4f9b\u66f4\u591a\u529f\u80fd**\uff0c\u4f8b\u5982`find_xxx` \u65b9\u6cd5\uff0c\u53ef\u4ee5\u4ece\u6570\u636e\u4e2d\u67e5\u627e\u6307\u5b9a `id` \u6216 `name` \u7684\u6d88\u606f\uff1b`save` \u65b9\u6cd5\u53ef\u4ee5\u5c06\u6570\u636e\u4ee5 `yaml` \u6216 `json` \u683c\u5f0f\u4fdd\u5b58\u5230\u6587\u4ef6\u4e2d\uff0c\u867d\u7136\u8fd9\u4e2a\u5de5\u4f5c\u4e00\u822c\u90fd\u76f4\u63a5\u4ee5 `CLI` \u6a21\u5f0f\u542f\u52a8\u6765\u5b8c\u6210\u3002\n\n+ \u5728 `0.3.0+` \u7248\u672c\u4e2d\uff0c\u4f60\u53ef\u4ee5\u5411 `parse` \u4e2d\u4f20\u5165\u591a\u79cd\u591a\u6837\u7684\u7c7b\u578b\u3002\n\n + `Iterable[str]`\uff1a\u8fed\u4ee3\u6bcf\u884c\u7684\u53ef\u8fed\u4ee3\u5bf9\u8c61\uff0c\u5982 `list` \u6216 `tuple` \u7b49\u3002\n + `TextIOBase`\uff1a\u6587\u672c\u6587\u4ef6\u5bf9\u8c61\uff0c\u5982\u7528 `open` \u6253\u5f00\u7684\u6587\u672c\u6587\u4ef6\uff0c\u6216\u8005 `io.StringIO` \u90fd\u5c5e\u4e8e\u6587\u672c\u6587\u4ef6\u5bf9\u8c61\u3002\n + `str`, `Path`\uff1a\u6587\u4ef6\u8def\u5f84\uff0c\u5982 `./data.txt`\u3002\n\n \u8fd9\u4e9b\u53c2\u6570\u90fd\u5c06\u88ab\u8c03\u7528\u5408\u9002\u7684\u5de5\u5382\u65b9\u6cd5\u6765\u6784\u9020 `Body` \u5bf9\u8c61\u3002\n\n+ \u7531\u4e8e `parse` \u8fd9\u4e2a\u540d\u5b57\u7684\u542b\u4e49\u6bd4\u8f83\u4e0d\u6e05\u6670\uff0c\u63a8\u8350\u4e0e\u4e0d\u63a8\u8350\u7684\u4f7f\u7528\u65b9\u5f0f\u5982\u4e0b\uff1a\n\n ```python\n # Not recommended \ud83d\udc4e\n from qq_chat_history import parse\n parse(...)\n \n \n # Recommended \ud83d\udc4d\n import qq_chat_history\n qq_chat_history.parse(...)\n \n \n from qq_chat_history import parse as parse_qq\n parse_qq(...)\n ```\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A tool to extract QQ chat history.",
"version": "1.1.2",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "043033c1ebaf63bb46079dd25bf891af258008c09ff24927847fcc253362b70b",
"md5": "fb8694da705dd845edfa7c5685c13335",
"sha256": "a775f2a397d8e8315ef4ce04de053604c7fd07ee218c098ee56bc11e6e21b3fe"
},
"downloads": -1,
"filename": "qq_chat_history-1.1.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "fb8694da705dd845edfa7c5685c13335",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9,<4.0",
"size": 6903,
"upload_time": "2023-03-19T03:18:37",
"upload_time_iso_8601": "2023-03-19T03:18:37.776391Z",
"url": "https://files.pythonhosted.org/packages/04/30/33c1ebaf63bb46079dd25bf891af258008c09ff24927847fcc253362b70b/qq_chat_history-1.1.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3638bf46aec548ff9069ef23506bd48b64f43f710ee17e578e8c7d7581e62ff2",
"md5": "f322722703dee83c47c70d6c464cae23",
"sha256": "a1840baca25d8c40f8a011cebeb14011b7672595faf39ff488aa2dbf50944acb"
},
"downloads": -1,
"filename": "qq_chat_history-1.1.2.tar.gz",
"has_sig": false,
"md5_digest": "f322722703dee83c47c70d6c464cae23",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9,<4.0",
"size": 6408,
"upload_time": "2023-03-19T03:18:39",
"upload_time_iso_8601": "2023-03-19T03:18:39.935660Z",
"url": "https://files.pythonhosted.org/packages/36/38/bf46aec548ff9069ef23506bd48b64f43f710ee17e578e8c7d7581e62ff2/qq_chat_history-1.1.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-03-19 03:18:39",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "kifuan",
"github_project": "qq-chat-history",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "qq-chat-history"
}