├── OneAPI ├── douyin.py ├── lemon8.py ├── weibo.py ├── xigua.py ├── youtube.py ├── bilibili.py ├── kuaishou.py ├── toutiao.py ├── xiaohongshu.py └── tiktok.py └── README.md /OneAPI/douyin.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import re 4 | 5 | import requests 6 | from flask import Flask, jsonify, request 7 | 8 | app = Flask(__name__) 9 | app.config['JSON_AS_ASCII'] = False 10 | did_ck = {} 11 | 12 | 13 | @app.route('/video', methods=['POST']) 14 | def video_list(): 15 | data = request.get_data(as_text=True) 16 | data = json.loads(data) 17 | video_id = data['id'] 18 | except Exception as e: 19 | return { 20 | 'code': 0, 21 | 'data': str(e) 22 | } 23 | 24 | 25 | @app.route('/user/profile', methods=['POST']) 26 | def get_user(): 27 | data = request.get_data(as_text=True) 28 | data = json.loads(data) 29 | user_id = data['id'] 30 | except Exception as e: 31 | return { 32 | 'code': 0, 33 | 'data': str(e) 34 | } 35 | 36 | 37 | @app.route('/feed/profile', methods=['POST']) 38 | def get_feed(): 39 | data = request.get_data(as_text=True) 40 | data = json.loads(data) 41 | feed_id = data['id'] 42 | except Exception as e: 43 | return { 44 | 'code': 0, 45 | 'data': str(e) 46 | } 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | app.run(host="0.0.0.0", port=6666, debug=True) 52 | -------------------------------------------------------------------------------- /OneAPI/lemon8.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import re 4 | 5 | import requests 6 | from flask import Flask, jsonify, request 7 | 8 | app = Flask(__name__) 9 | app.config['JSON_AS_ASCII'] = False 10 | did_ck = {} 11 | 12 | 13 | @app.route('/video', methods=['POST']) 14 | def video_list(): 15 | data = request.get_data(as_text=True) 16 | data = json.loads(data) 17 | video_id = data['id'] 18 | except Exception as e: 19 | return { 20 | 'code': 0, 21 | 'data': str(e) 22 | } 23 | 24 | 25 | @app.route('/user/profile', methods=['POST']) 26 | def get_user(): 27 | data = request.get_data(as_text=True) 28 | data = json.loads(data) 29 | user_id = data['id'] 30 | except Exception as e: 31 | return { 32 | 'code': 0, 33 | 'data': str(e) 34 | } 35 | 36 | 37 | @app.route('/feed/profile', methods=['POST']) 38 | def get_feed(): 39 | data = request.get_data(as_text=True) 40 | data = json.loads(data) 41 | feed_id = data['id'] 42 | except Exception as e: 43 | return { 44 | 'code': 0, 45 | 'data': str(e) 46 | } 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | app.run(host="0.0.0.0", port=6666, debug=True) 52 | -------------------------------------------------------------------------------- /OneAPI/weibo.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import re 4 | 5 | import requests 6 | from flask import Flask, jsonify, request 7 | 8 | app = Flask(__name__) 9 | app.config['JSON_AS_ASCII'] = False 10 | did_ck = {} 11 | 12 | 13 | @app.route('/video', methods=['POST']) 14 | def video_list(): 15 | data = request.get_data(as_text=True) 16 | data = json.loads(data) 17 | video_id = data['id'] 18 | except Exception as e: 19 | return { 20 | 'code': 0, 21 | 'data': str(e) 22 | } 23 | 24 | 25 | @app.route('/user/profile', methods=['POST']) 26 | def get_user(): 27 | data = request.get_data(as_text=True) 28 | data = json.loads(data) 29 | user_id = data['id'] 30 | except Exception as e: 31 | return { 32 | 'code': 0, 33 | 'data': str(e) 34 | } 35 | 36 | 37 | @app.route('/feed/profile', methods=['POST']) 38 | def get_feed(): 39 | data = request.get_data(as_text=True) 40 | data = json.loads(data) 41 | feed_id = data['id'] 42 | except Exception as e: 43 | return { 44 | 'code': 0, 45 | 'data': str(e) 46 | } 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | app.run(host="0.0.0.0", port=6666, debug=True) 52 | -------------------------------------------------------------------------------- /OneAPI/xigua.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import re 4 | 5 | import requests 6 | from flask import Flask, jsonify, request 7 | 8 | app = Flask(__name__) 9 | app.config['JSON_AS_ASCII'] = False 10 | did_ck = {} 11 | 12 | 13 | @app.route('/video', methods=['POST']) 14 | def video_list(): 15 | data = request.get_data(as_text=True) 16 | data = json.loads(data) 17 | video_id = data['id'] 18 | except Exception as e: 19 | return { 20 | 'code': 0, 21 | 'data': str(e) 22 | } 23 | 24 | 25 | @app.route('/user/profile', methods=['POST']) 26 | def get_user(): 27 | data = request.get_data(as_text=True) 28 | data = json.loads(data) 29 | user_id = data['id'] 30 | except Exception as e: 31 | return { 32 | 'code': 0, 33 | 'data': str(e) 34 | } 35 | 36 | 37 | @app.route('/feed/profile', methods=['POST']) 38 | def get_feed(): 39 | data = request.get_data(as_text=True) 40 | data = json.loads(data) 41 | feed_id = data['id'] 42 | except Exception as e: 43 | return { 44 | 'code': 0, 45 | 'data': str(e) 46 | } 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | app.run(host="0.0.0.0", port=6666, debug=True) 52 | -------------------------------------------------------------------------------- /OneAPI/youtube.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import re 4 | 5 | import requests 6 | from flask import Flask, jsonify, request 7 | 8 | app = Flask(__name__) 9 | app.config['JSON_AS_ASCII'] = False 10 | did_ck = {} 11 | 12 | 13 | @app.route('/video', methods=['POST']) 14 | def video_list(): 15 | data = request.get_data(as_text=True) 16 | data = json.loads(data) 17 | video_id = data['id'] 18 | except Exception as e: 19 | return { 20 | 'code': 0, 21 | 'data': str(e) 22 | } 23 | 24 | 25 | @app.route('/user/profile', methods=['POST']) 26 | def get_user(): 27 | data = request.get_data(as_text=True) 28 | data = json.loads(data) 29 | user_id = data['id'] 30 | except Exception as e: 31 | return { 32 | 'code': 0, 33 | 'data': str(e) 34 | } 35 | 36 | 37 | @app.route('/feed/profile', methods=['POST']) 38 | def get_feed(): 39 | data = request.get_data(as_text=True) 40 | data = json.loads(data) 41 | feed_id = data['id'] 42 | except Exception as e: 43 | return { 44 | 'code': 0, 45 | 'data': str(e) 46 | } 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | app.run(host="0.0.0.0", port=6666, debug=True) 52 | -------------------------------------------------------------------------------- /OneAPI/bilibili.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import re 4 | 5 | import requests 6 | from flask import Flask, jsonify, request 7 | 8 | app = Flask(__name__) 9 | app.config['JSON_AS_ASCII'] = False 10 | did_ck = {} 11 | 12 | 13 | @app.route('/video', methods=['POST']) 14 | def video_list(): 15 | data = request.get_data(as_text=True) 16 | data = json.loads(data) 17 | video_id = data['id'] 18 | except Exception as e: 19 | return { 20 | 'code': 0, 21 | 'data': str(e) 22 | } 23 | 24 | 25 | @app.route('/user/profile', methods=['POST']) 26 | def get_user(): 27 | data = request.get_data(as_text=True) 28 | data = json.loads(data) 29 | user_id = data['id'] 30 | except Exception as e: 31 | return { 32 | 'code': 0, 33 | 'data': str(e) 34 | } 35 | 36 | 37 | @app.route('/feed/profile', methods=['POST']) 38 | def get_feed(): 39 | data = request.get_data(as_text=True) 40 | data = json.loads(data) 41 | feed_id = data['id'] 42 | except Exception as e: 43 | return { 44 | 'code': 0, 45 | 'data': str(e) 46 | } 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | app.run(host="0.0.0.0", port=6666, debug=True) 52 | -------------------------------------------------------------------------------- /OneAPI/kuaishou.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import re 4 | 5 | import requests 6 | from flask import Flask, jsonify, request 7 | 8 | app = Flask(__name__) 9 | app.config['JSON_AS_ASCII'] = False 10 | did_ck = {} 11 | 12 | 13 | @app.route('/video', methods=['POST']) 14 | def video_list(): 15 | data = request.get_data(as_text=True) 16 | data = json.loads(data) 17 | video_id = data['id'] 18 | except Exception as e: 19 | return { 20 | 'code': 0, 21 | 'data': str(e) 22 | } 23 | 24 | 25 | @app.route('/user/profile', methods=['POST']) 26 | def get_user(): 27 | data = request.get_data(as_text=True) 28 | data = json.loads(data) 29 | user_id = data['id'] 30 | except Exception as e: 31 | return { 32 | 'code': 0, 33 | 'data': str(e) 34 | } 35 | 36 | 37 | @app.route('/feed/profile', methods=['POST']) 38 | def get_feed(): 39 | data = request.get_data(as_text=True) 40 | data = json.loads(data) 41 | feed_id = data['id'] 42 | except Exception as e: 43 | return { 44 | 'code': 0, 45 | 'data': str(e) 46 | } 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | app.run(host="0.0.0.0", port=6666, debug=True) 52 | -------------------------------------------------------------------------------- /OneAPI/toutiao.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import re 4 | 5 | import requests 6 | from flask import Flask, jsonify, request 7 | 8 | app = Flask(__name__) 9 | app.config['JSON_AS_ASCII'] = False 10 | did_ck = {} 11 | 12 | 13 | @app.route('/video', methods=['POST']) 14 | def video_list(): 15 | data = request.get_data(as_text=True) 16 | data = json.loads(data) 17 | video_id = data['id'] 18 | except Exception as e: 19 | return { 20 | 'code': 0, 21 | 'data': str(e) 22 | } 23 | 24 | 25 | @app.route('/user/profile', methods=['POST']) 26 | def get_user(): 27 | data = request.get_data(as_text=True) 28 | data = json.loads(data) 29 | user_id = data['id'] 30 | except Exception as e: 31 | return { 32 | 'code': 0, 33 | 'data': str(e) 34 | } 35 | 36 | 37 | @app.route('/feed/profile', methods=['POST']) 38 | def get_feed(): 39 | data = request.get_data(as_text=True) 40 | data = json.loads(data) 41 | feed_id = data['id'] 42 | except Exception as e: 43 | return { 44 | 'code': 0, 45 | 'data': str(e) 46 | } 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | app.run(host="0.0.0.0", port=6666, debug=True) 52 | -------------------------------------------------------------------------------- /OneAPI/xiaohongshu.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import re 4 | 5 | import requests 6 | from flask import Flask, jsonify, request 7 | 8 | app = Flask(__name__) 9 | app.config['JSON_AS_ASCII'] = False 10 | did_ck = {} 11 | 12 | 13 | @app.route('/video', methods=['POST']) 14 | def video_list(): 15 | data = request.get_data(as_text=True) 16 | data = json.loads(data) 17 | video_id = data['id'] 18 | except Exception as e: 19 | return { 20 | 'code': 0, 21 | 'data': str(e) 22 | } 23 | 24 | 25 | @app.route('/user/profile', methods=['POST']) 26 | def get_user(): 27 | data = request.get_data(as_text=True) 28 | data = json.loads(data) 29 | user_id = data['id'] 30 | except Exception as e: 31 | return { 32 | 'code': 0, 33 | 'data': str(e) 34 | } 35 | 36 | 37 | @app.route('/feed/profile', methods=['POST']) 38 | def get_feed(): 39 | data = request.get_data(as_text=True) 40 | data = json.loads(data) 41 | feed_id = data['id'] 42 | except Exception as e: 43 | return { 44 | 'code': 0, 45 | 'data': str(e) 46 | } 47 | 48 | 49 | 50 | if __name__ == '__main__': 51 | app.run(host="0.0.0.0", port=6666, debug=True) 52 | -------------------------------------------------------------------------------- /OneAPI/tiktok.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import json 3 | import re 4 | 5 | import requests 6 | from flask import Flask, jsonify, request 7 | 8 | app = Flask(__name__) 9 | app.config['JSON_AS_ASCII'] = False 10 | did_ck = {} 11 | 12 | 13 | @app.route('/video', methods=['POST']) 14 | def video_list(): 15 | data = request.get_data(as_text=True) 16 | data = json.loads(data) 17 | video_id = data['id'] 18 | except Exception as e: 19 | 20 | return { 21 | 'code': 0, 22 | 'data': str(e) 23 | } 24 | 25 | 26 | @app.route('/user/profile', methods=['POST']) 27 | def get_user(): 28 | data = request.get_data(as_text=True) 29 | data = json.loads(data) 30 | user_id = data['id'] 31 | except Exception as e: 32 | return { 33 | 'code': 0, 34 | 'data': str(e) 35 | } 36 | 37 | 38 | @app.route('/feed/profile', methods=['POST']) 39 | def get_feed(): 40 | data = request.get_data(as_text=True) 41 | data = json.loads(data) 42 | feed_id = data['id'] 43 | except Exception as e: 44 | return { 45 | 'code': 0, 46 | 'data': str(e) 47 | } 48 | 49 | 50 | 51 | if __name__ == '__main__': 52 | app.run(host="0.0.0.0", port=6666, debug=True) 53 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Description/简介 2 | 3 | OneAPI,提供各种数据API,用户信息、视频列表、详情、点赞、评论数据、综合搜索等,包括:Douyin(抖音)、Xiaohongshu(小红书)、Kuaishou(快手)、Bilibili(哔哩哔哩)、Weibo(微博)、Toutiao(今日头条)、Xigua(西瓜视频)、Lemon8、Tiktok、Youtube等接口、数据、API、爬虫、采集。 4 | 5 | 我们是一家专业的数据服务提供商,提供标准的 HTTP 接口服务,并可根据您的需求定制化数据服务。 6 | 7 | [官网](https://getoneapi.com/) | [接口文档](https://doc.getoneapi.com/) 8 | 9 | ## Contact information/联系方式 10 | 11 | 可通过以下方式联系我们: 12 | 13 | - **邮箱**: support@getoneapi.com 14 | - **Telegram**: [t.me/GetOneAPI](https://t.me/GetOneAPI) 15 | 16 | 如有任何问题,欢迎联系我们。 17 | 18 | ## API list/API 列表 19 | 20 | 以下是我们目前提供的各平台接口服务。此列表可能更新不及时,可通过在线实时接口文档,查看最新 API 列表。 21 | 22 | ### Xiaohongshu/小红书 23 | 24 | - 小红书用户信息 25 | - 小红书用户信息V2 26 | - 小红书用户信息V3 27 | - 小红书用户笔记列表 28 | - 小红书用户笔记列表V3 29 | - 小红书笔记详情 30 | - 小红书笔记评论 31 | - 小红书笔记子评论 32 | - 小红书笔记搜索 33 | - 小红书用户搜索 34 | - 小红书获取搜索联想词 35 | - ... 36 | 37 | ### Douyin/抖音 38 | 39 | - 抖音用户信息 40 | - 抖音用户作品列表 41 | - 抖音视频详情 42 | - 抖音视频一级评论 43 | - 抖音视频子评论 44 | - 抖音直播间信息 45 | - 抖音直播间用户列表 46 | - 抖音检查用户是否直播 47 | - 抖音综合搜索 48 | - 抖音搜索视频 49 | - 抖音搜索用户 50 | - 抖音搜索话题 51 | - 抖音话题详情 52 | - 抖音话题下的视频 53 | - 抖音搜索音乐 54 | - 抖音音乐相关的视频 55 | - 抖音用户标签 56 | - 抖音用户合集 57 | - 抖音合集下的视频 58 | - 抖音精选 59 | - 抖音热榜 60 | - ... 61 | 62 | ### Douyin-APP/抖音APP 63 | 64 | - 抖音用户信息 65 | - 抖音用户作品列表 66 | - 抖音视频详情 67 | - 抖音批量视频详情 68 | - 抖音视频一级评论 69 | - 抖音视频子评论 70 | - 抖音作品统计数据(包含播放数) 71 | - 抖音获取作品最高画质播放链接 72 | - ... 73 | 74 | 75 | ### Kuaishou/快手 76 | 77 | - 快手用户信息 78 | - 快手用户作品列表 79 | - 快手视频详情 80 | - 快手视频评论 81 | - 快手热搜榜单 82 | - 快手视频分享短链 83 | - ... 84 | 85 | ### Bilibili/哔哩哔哩 86 | 87 | - 用户信息 88 | - 用户所有动态 89 | - 用户投稿的视频列表 90 | - 作品详情 91 | - 作品评论 92 | - 搜索数据 93 | - 综合热门 94 | - 排行榜 95 | - ... 96 | 97 | ### Weibo/微博 98 | 99 | - 用户信息 100 | - 用户发布 101 | - 用户视频列表 102 | - 作品详情 103 | - 作品评论 104 | - 作品子评论 105 | - 短视频信息 106 | - 话题数据 107 | - 话题详情 108 | - 微博热搜列表 109 | - 综合搜索 110 | - ... 111 | 112 | 113 | ### Toutiao/今日头条 114 | 115 | - 用户主页发布 116 | - 视频详情 117 | - 文章详情 118 | - 文章一级评论 119 | - 文章子评论 120 | - ... 121 | 122 | 123 | ### Xiguashipin/西瓜视频 124 | 125 | - 用户信息 126 | - 用户发布视频列表 127 | - 视频详情 128 | - ... 129 | 130 | 131 | ### Tiktok 132 | 133 | - 用户信息 134 | - 用户主页视频列表 135 | - 视频详情 136 | - 综合搜索 137 | - 搜索用户 138 | - ... 139 | 140 | ### Youtube 141 | 142 | - 获取用户channel_id 143 | - 获取用户发布列表 144 | - 获取频道播放列表 145 | - 获取播放列表视频 146 | - 获取视频信息 147 | - 获取视频评论 148 | - 综合搜索 149 | - ... 150 | 151 | ### Lemon8 152 | 153 | - 用户信息 154 | - 用户发布 155 | - 视频详情 156 | - ... 157 | 158 | 159 | ## User Guide/使用导览 160 | 161 | #### 注册账号 162 | 163 | 注册地址 [https://getoneapi.com/register](https://getoneapi.com/register) 164 | 165 | #### Authorization/鉴权 166 | 167 | 要访问我们的 API,您必须在每个请求的请求头中添加您的API秘钥进行身份验证: 168 | 169 | - 请求头 170 | ```js 171 | Authorization: Bearer 172 | ``` 173 | - 示例请求 174 | 175 | ```js 176 | curl -X POST https://api.getoneapi.com/api/douyin/user_detail 177 | -H "Content-Type: application/json" 178 | -H "Authorization: Bearer 5hlBzQDigT4GZJRTL3GeUSxIAC2W0t4gjvn8fizJCCsawhFS1I2R4T8DbhqXYV6v" 179 | -d '{"sec_user_id": "xxxxx"}' 180 | ``` 181 | 要获取API密钥,请[注册](https://getoneapi.com/register)。 182 | 183 | #### Response/响应 184 | - 所有 API 响应都返回 HTTP 状态代码 200 OK,无论业务结果如何。 185 | - 您必须依赖 JSON 响应主体中的 code 字段来确定业务级结果。 186 | 187 | 示例响应 188 | ```js 189 | { 190 | "code": 200, 191 | "message": "", 192 | "data": { ... } 193 | } 194 | ``` 195 | 业务代码参考 196 | | code | 说明 | 计费 | 197 | | --- | --- |--- | 198 | | 200 | 成功 | YES | 199 | | 0 | 失败 | NO | 200 | | 401 | 未授权,APIKey无效 | NO | 201 | | 403 | 账户不可用 | NO | 202 | | 404 | API未找到或不可用 | NO | 203 | | 301 | 余额不足 | NO | 204 | 205 | 206 | 超时建议 207 | 208 | 虽然大多数 API 请求会在几秒钟内响应,但我们建议将请求超时设置为至少 60 秒。 209 | 这并不表示我们的 API 很慢,它只是有助于避免由于临时网络问题或客户端超时而导致的意外错误或重复收费。 210 | 211 | 重试/切换策略 212 | 213 | - 虽然大多数 API 请求会在几秒钟内响应成功并返回数据,但也有部分不太稳定的接口,可以尝试多次请求(建议5次或5次以内,否则会触发风控,导致账户异常!),直到请求成功,请勿担心重复计费,只有成功的请求code=200才会计费。 214 | - 部分接口存在多版本,V1、V2... 可以加入重试切换策略,在请求失败时切换另一个版本再次重试请求(注意:不同版本之间可能存在响应数据结构不一致的情况,请自行比对)。 215 | 216 | #### Request rate/速率限制 217 | 218 | - API 使用没有通用速率限制。 219 | - 少数高流量端点可能有特定的速率限制(例如每分钟/小时),这将在各自的文档中注明。 220 | 221 | ## Support&Feedback/支持与反馈 222 | 如有任何疑问、定价详情、定制API,请随时通过我们的支持页面联系我们: 223 | 224 | [联系我们](https://getoneapi.com/contact) 225 | 226 | ⭐ 如果这个项目对您有帮助,请给我们一个Star! 227 | --------------------------------------------------------------------------------