Skip to content

Commit

Permalink
Merge branch 'dev-weibo'
Browse files Browse the repository at this point in the history
  • Loading branch information
ShilongLee committed Jun 14, 2024
2 parents 4495260 + 401c1c2 commit d8e1f1a
Show file tree
Hide file tree
Showing 22 changed files with 647 additions and 5 deletions.
Empty file added data/weibo/.gitkeep
Empty file.
199 changes: 199 additions & 0 deletions docs/api/weibo/weibo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
# API 文档

## 微博

### 添加账号

- **功能说明**

用于添加微博网页版账号,cookie从`https://weibo.com/`的请求中获取。

- **URL**

`/weibo/add_account`

- **Method**

`POST`

- **Data Params**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| id | true | string | 账户名(用于管理用户cookie) |
| cookie | true | string | 微博cookie |

- **Response**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| code | true | int | 0: 成功 1: 参数错误 2: 服务器错误 |
| data | true | struct | 数据 |
| msg | true | string | 请求说明(成功、参数错误、服务器错误) |

### 获取账号列表

- **URL**

`/weibo/account_list`

- **Method**

`GET`

- **URL Params**

None

- **Response**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| code | true | int | 0: 成功 1: 参数错误 2: 服务器错误 |
| data | true | list | [ [账户信息](#账户信息) ] |
| msg | true | string | 请求说明(成功、参数错误、服务器错误) |

#### 账户信息

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| id | true | string | 账户名(用于管理用户cookie) |
| cookie | true | string | 微博cookie |
| ct | true | int | 创建时间戳 |
| ut | true | int | 更新时间戳 |
| expired | true | int | 0: 有效 1: 过期 (请求失败时自动设为过期) |

### 获取微博详情

- **功能说明**

由于微博允许游客访问,因此此接口可以不需要添加账号,直接调用。

- **URL**

`/weibo/detail`

- **Method**

`GET`

- **URL Params**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| id | true | string | 微博id,从`https://m.weibo.cn/`找到需要的帖子打开详情页,url中`detail/`后面的数字就是id |

- **Success Response**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| code | true | int | 0: 成功 1: 参数错误 2: 服务器错误 |
| data | true | struct | 数据 |
| msg | true | string | 请求说明(成功、参数错误、服务器错误) |

### 获取微博评论

- **URL**

`/weibo/comments`

- **Method**

`GET`

- **URL Params**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| id | true | string | 微博id,从`https://m.weibo.cn/`找到需要的帖子打开详情页,url中`detail/`后面的数字就是id |
| offset | false | int | 评论翻页偏移量, 默认0 |
| limit | false | int | 评论数量, 默认20 |

- **Success Response**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| code | true | int | 0: 成功 1: 参数错误 2: 服务器错误 |
| data | true | struct | 数据 |
| msg | true | string | 请求说明(成功、参数错误、服务器错误) |

### 获取评论回复

- **URL**

`/weibo/replys`

- **Method**

`GET`

- **URL Params**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| id | true | string | 微博id,从`https://m.weibo.cn/`找到需要的帖子打开详情页,url中`detail/`后面的数字就是id |
| comment_id | true | string | 微博评论id,从评论中获得到的id,例如: 5045096886306039 |
| offset | false | int | 评论翻页偏移量, 默认0 |
| limit | false | int | 评论数量, 默认20 |

- **Success Response**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| code | true | int | 0: 成功 1: 参数错误 2: 服务器错误 |
| data | true | struct | 数据 |
| msg | true | string | 请求说明(成功、参数错误、服务器错误) |

### 关键词搜索微博

- **URL**

`/weibo/search`

- **Method**

`GET`

- **URL Params**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| keyword | true | string | 搜索词 |
| offset | false | int | 搜索翻页偏移量, 默认0 |
| limit | false | int | 结果数量, 默认10 |

- **Success Response**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| code | true | int | 0: 成功 1: 参数错误 2: 服务器错误 |
| data | true | struct | 数据 |
| msg | true | string | 请求说明(成功、参数错误、服务器错误) |

### 微博媒体预览

- **功能说明**

由于微博所有接口返回的媒体资源链接均验证了`referer`,因此不能直接在网页中预览,此接口提供了预览功能,用法为`http://127.0.0.1:8080/weibo/preview?url=xxx`,其中`xxx`替换为媒体资源的地址(请求返回包含参数)即可。

- **URL**

`/weibo/preview`

- **Method**

`GET`

- **URL Params**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| url | true | string | 媒体地址 |

- **Success Response**

| 参数 | 必选 | 类型 | 说明 |
|:---:|:---:|:---:|:---:|
| code | true | int | 0: 成功 1: 参数错误 2: 服务器错误 |
| data | true | struct | 数据 |
| msg | true | string | 请求说明(成功、参数错误、服务器错误) |
14 changes: 14 additions & 0 deletions docs/doc.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,17 @@
- 京东搜索结果获取

京东:[API 文档](api/jd/jd.md)

## 微博

目前支持以下接口:

- 添加微博账号
- 获取微博账号列表
- 微博视频信息获取
- 微博视频评论获取
- 微博评论回复获取
- 微博搜索结果获取
- 微博媒体资源预览

微博:[API 文档](api/weibo/weibo.md)
4 changes: 4 additions & 0 deletions docs/record.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,7 @@
- MOD: 修改所有回复接口视频/笔记id参数名为id
- FIX: 修复哔哩哔哩视频html匹配问题导致的无法爬取
- FIX: 修复sqlite数据库多线程连接池问题

## 2024-06-14

- ADD: 支持微博常见接口
2 changes: 2 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from service.xhs.urls import xhs
from service.taobao.urls import taobao
from service.jd.urls import jd
from service.weibo.urls import weibo
from lib.logger import logger
import yaml

Expand All @@ -15,6 +16,7 @@
app.register_blueprint(xhs, url_prefix="/xhs")
app.register_blueprint(taobao, url_prefix="/taobao")
app.register_blueprint(jd, url_prefix="/jd")
app.register_blueprint(weibo, url_prefix="/weibo")

def init_service():
config_file = "config/config.yaml"
Expand Down
13 changes: 8 additions & 5 deletions readme.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# 服务 - 主流媒体平台爬虫

抖音、快手、哔哩哔哩、小红书、淘宝、京东平台爬虫服务器项目。它可以获取这些平台上的公开信息,但请遵守下方的的免责声明。
抖音、快手、哔哩哔哩、小红书、淘宝、京东、微博平台爬虫服务器项目。它可以获取这些平台上的公开信息,但请遵守下方的的免责声明。

## 免责声明

本项目的初衷是为了帮助开发者更好地了解和掌握这些平台,也希望能帮助企业和安全工程师了解爬虫手段,提高平台的反爬虫措施,而不是用于非法用途,反对用于任何违反相关法律法规的行为。

仅供学习和研究使用,不得用于任何商业用途或非法目的。使用本项目提供的功能时,用户需自行承担可能带来的一切法律责任。

我们提供的爬虫仅能获取抖音,快手、哔哩哔哩、小红书、淘宝、京东等平台上公开的信息,我们强烈反对任何形式的隐私侵犯行为。如果你使用本项目进行了侵犯他人隐私的行为,我们将与你保持距离,并支持受害者通过法律手段维护自己的权益。
我们提供的爬虫仅能获取抖音,快手、哔哩哔哩、小红书、淘宝、京东、微博平台上公开的信息,我们强烈反对任何形式的隐私侵犯行为。如果你使用本项目进行了侵犯他人隐私的行为,我们将与你保持距离,并支持受害者通过法律手段维护自己的权益。

使用本仓库的内容即表示您同意本免责声明的所有条款和条件。如果你不接受以上的免责声明,请立即停止使用本项目。

Expand All @@ -18,10 +18,11 @@

## 功能

- 快手、抖音、哔哩哔哩、小红书、淘宝、京东平台的爬虫接口
- 快手、抖音、哔哩哔哩、小红书、淘宝、京东、微博平台的爬虫接口
- 获取公开的用户信息,帖子信息等
- 使用简单,支持多种语言使用HTTP调用
- 哔哩哔哩视频[一键下载](docs/api/bilibili/bilibili.md#bilibili视频下载)
- 微博媒体资源[预览接口](docs/api/weibo/weibo.md#微博媒体预览)

## 快速开始

Expand Down Expand Up @@ -73,7 +74,7 @@
cat .log/crawler.log # access.log error.log
```

首次使用需添加账号,例如:调用`http://localhost:8080/{platfrom}/add_account`添加账号,platfrom取`douyin``kuaishou``bilibili``xhs``taobao``jd`,接口详情请参考[API 文档](docs/doc.md)。
首次使用需添加账号,例如:调用`http://localhost:8080/{platfrom}/add_account`添加账号,platfrom取`douyin``kuaishou``bilibili``xhs``taobao``jd``weibo`,接口详情请参考[API 文档](docs/doc.md)。

然后在你的代码中调用API,获取公开的信息。

Expand All @@ -91,7 +92,9 @@ API文档:[API 文档](docs/doc.md)

- [x] Bilibili
- [x] 小红书
- [ ] 微博
- [x] 微博
- [ ] 淘宝详情、评论功能
- [ ] 京东详情、评论功能

## 更新记录

Expand Down
4 changes: 4 additions & 0 deletions service/weibo/logic/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from .detail import request_detail
from .comments import request_comments
from .replys import request_replys
from .search import request_search
33 changes: 33 additions & 0 deletions service/weibo/logic/comments.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from .common import common_request

def request_comments(id: str, cookie: str, offset: int = 0, limit: int = 20) -> tuple[dict, bool]:
"""
请求微博获取评论信息
"""
headers = {"cookie": cookie}
end_length = offset + limit
comments = []
max_id = 0
total = 0
is_end = False
while not is_end and len(comments) < end_length:
params = {
"id": id,
"is_show_bulletin": 2,
"is_mix": 0,
"count": 10,
# "uid": 123, # 可通过profile获取,非强制参数
"fetch_level": 0,
"locale": "zh-CN",
"max_id": max_id
}
resp, succ = common_request('/ajax/statuses/buildComments', params, headers)
if not succ:
return resp, succ
comments.extend(resp.get('data', []))
max_id = int(resp.get('max_id', 0))
total = resp.get('total_number', 0)
is_end = max_id == 0

ret = {'total': total, 'comments': comments[offset:end_length]}
return ret, succ
Loading

0 comments on commit d8e1f1a

Please sign in to comment.