文中介绍的方法仅限学习使用,切勿做非法用途

结合上一篇说了一个通过在手机上面搭建Http服务去破解App的密钥,如何真正的实现一个批量下载视频的功能呢?
我们用Python3简单的写了一个脚本,可以搜索特定用户,选择用户后,下载这个用户所有的视频。
项目地址:https://github.com/tbruceyu/AppCaller , 欢迎Star

关键接口

  1. 搜索用户的接口:http://api.ksapisrv.com/rest/n/search/user
  2. 查找用户视频接口:http://api.ksapisrv.com/rest/n/feed/profile2
  3. 用AppCaller搭建的破解密钥接口

有了这些接口后,我们就可以开始写代码了,代码很简单,我直接贴出来了:

# -*- coding: utf-8 -*-
import json
import os
from urllib import request
import requests__KEY_SERVER_HOST = 'http://172.16.70.147:8889/api'def search_user(keyword, pcursor=None):key_req_json = {'url': 'http://api.ksapisrv.com/rest/n/search/user?app=0&kpf=ANDROID_PHONE&ver=6.4&c=BAIDU','commonParams': 'mod=huawei%28MI%208%29&appver=6.4.0.9003&ftt=K-F-T&isp=CTCC&kpn=KUAISHOU&''lon=33.337841&language=zh-cn&sys=ANDROID_9&max_memory=512&ud=0&country_code=cn&''pm_tag=11694575470&oc=BAIDU&hotfix_ver=&did_gt=1539073091012&iuid=&net=WIFI&''did=ANDROID_2ec0f9e99f32fb16&lat=33.979012','field': {'keyword': keyword,'client_key': '3c2cd3f3','os': 'android',},'header': {'User-Agent': ['kwai-android'],'Accept-Language': ['zh-cn'],'X-REQUESTID': ['193601906'],'Host': ['api.ksapisrv.com']},'method': 'post'}if pcursor is not None:key_req_json['field'] = {'keyword': keyword,'pcursor': str(pcursor),'client_key': '3c2cd3f3','os': 'android',}res_json = requests.post(url=__KEY_SERVER_HOST, data=json.dumps(key_req_json), headers={'Content-Type': 'application/json'})request_data = json.loads(res_json.text)url = request_data['url']field_data = request_data['field']header_data = {}for k in request_data['header'].keys():header_data[k] = request_data['header'][k][0]search_data = json.loads(requests.post(url=url, data=field_data, headers=header_data).text)if len(search_data['users']) <= 0:return []return search_data['pcursor'], search_data['users']def get_video(uid, pcursor=None):key_req_json = {'url': 'http://api.ksapisrv.com/rest/n/feed/profile2?app=0&kpf=ANDROID_PHONE&ver=6.4&c=BAIDU','commonParams': 'mod=huawei%28MI%208%29&appver=6.4.0.9003&ftt=K-F-T&isp=CTCC&kpn=KUAISHOU&''lon=33.337841&language=zh-cn&sys=ANDROID_9&max_memory=512&ud=0&country_code=cn&''pm_tag=11694575470&oc=BAIDU&hotfix_ver=&did_gt=1539073091012&iuid=&net=WIFI&''did=ANDROID_2ec0f9e99f32fb16&lat=33.979012','field': {"token": "", "user_id": str(uid), "lang": "zh", "count": "30", "privacy": "public","referer": "ks://profile/133107719/5202502011931030729/1_i/1648554269758459910_h139/8","browseType": "1", "client_key": "3c2cd3f3", "os": "android"},'header': {'User-Agent': ['kwai-android'],'Accept-Language': ['zh-cn'],'X-REQUESTID': ['193601906'],'Host': ['api.ksapisrv.com']},'method': 'post'}if pcursor is not None:key_req_json['field'] = {"token": "", "pcursor": str(pcursor), "user_id": str(uid), "lang": "zh", "count": "30", "privacy": "public","referer": "ks://profile/133107719/5202502011931030729/1_i/1648554269758459910_h139/8","browseType": "1", "client_key": "3c2cd3f3", "os": "android"}res_json = requests.post(url=__KEY_SERVER_HOST, data=json.dumps(key_req_json), headers={'Content-Type': 'application/json'})request_data = json.loads(res_json.text)url = request_data['url']field_data = request_data['field']header_data = {}for k in request_data['header'].keys():header_data[k] = request_data['header'][k][0]user_data = json.loads(requests.post(url=url, data=field_data, headers=header_data).text)return user_data['pcursor'], user_data['feeds']if __name__ == "__main__":keyword = input("输入关键字:")user_count = 0pcursor, search_res = search_user(keyword)if len(search_res) == 0:print("没有找到用户")exit(1)users = search_restarget_user = Nonewhile True:for user in users:print("{0}. {1}".format(user_count, user['user_name']))user_count += 1print("请输入用户编号(翻页请直接按回车键):")choose = input("输入关键字:")if choose.isnumeric():target_user = users[int(choose)]breakelse:pcursor, new_users = search_user(keyword, pcursor)users += new_usersprint(target_user)pcursor = Noneif not os.path.exists("output"):os.mkdir("output")feed_count = 0while True:pcursor, feeds = get_video(target_user['user_id'], pcursor)if len(feeds) == 0:print("已经全部下载完成!")breakfor feed in feeds:video_url = feed['main_mv_url']if video_url is None:video_url = feed['main_mv_urls'][0]target_file = "./output/{0}.mp4".format(feed_count)if not os.path.exists(target_file):try:request.urlretrieve(video_url, target_file)except Exception as e:print("下载失败:" + video_url)feed_count += 1

操作步骤

废话不多说,开始行动吧:

  1. 首先把项目clone下来,然后./gradlew assembleDebug编译我们的App。
  2. 编译成功后安装AppCaller:adb install -r app/build/outputs/apk/debug/app-debug.apk
  3. 然后安装slave程序:adb install -r clients/kuaishou.apk
  4. 在手机上打开AppCaller,添加快手App,然后点击开启
  5. 查看手机的IP地址:ifconfig ,查看wlan0的IP地址
  6. 把tools/download.py的__KEY_SERVER_HOST = ‘http://172.16.70.147:8889/api’ IP地址改为手机上面的IP地址
  7. 运行脚本,然后输入用户名,选择一个用户,就可以开始下载啦。输出如下:
xxx@bogon:~/Projects/AppCaller/tools$ python3.7 download.py
输入关键字:手工耿
0. V手工~耿
1. 手工耿弟
2. 陌路離腸(耿湾手工鞋垫)
3. 耿哥手工玫瑰
4. 手工耿
5. 手工耿 非物质文化遗产
6. 耿湾?手工?豆腐
7. 手工编制耿梅
8. 耿耿?DIY手工制作
9. 耿姐的手工针线43387
10. 耿氏手工豆腐
11. 耿记手工辣条
12. 耿青春的手工传奇
13. 耿马勐永宋永芳传统手工傣
14. 耿大妮~全国手工活外放
15. 耿姐手工编织手链脚链腰链
16. 五棵树手工干豆腐耿丽娜
17. 机械加工耿师
18. 东宿村粉面粉条加工耿保忠
19. 招缝纫机工!耿文龙177362
20. 数控车床对外加工耿增旺
21. 精众化工耿常见
22. 昭通架子工耿华
23. 外架工耿国
24. ,建筑电工耿振勇138338914
25. 数控车工,耿哥
26. 农民工耿哥
27. 御通花园财源建工耿洪泉
28. 我是机修工耿涛
29. 羊毛衫加工,耿利东
请输入用户编号(翻页请直接按回车键):
输入关键字:0
下载视频成功:http://jsmov2.a.yximgs.com/upic/2019/10/22/20/BMjAxOTEwMjIyMDAxNDhfMzMyODQyMTExXzE4Nzc4OTc3ODI1XzFfMw==_b_B3f60bcff9bbda1a56505e434f59966bb.mp4?tag=1-1572264843-p-0-z65nxxy1b6-8a39387debd35122&type=hot
下载视频成功:http://jsmov2.a.yximgs.com/upic/2019/10/16/11/BMjAxOTEwMTYxMTM1NDhfMzMyODQyMTExXzE4NTY2MzY5MjAyXzFfMw==_b_Bded1516bcf28343539c26b3cc2e9a469.mp4?tag=1-1572264843-p-0-8mrzya9pw3-4db9ce8b186a3901&type=hot
下载视频成功:http://jsmov2.a.yximgs.com/upic/2019/10/10/20/BMjAxOTEwMTAyMDM2NDdfMzMyODQyMTExXzE4NDAxNzkyMzAwXzFfMw==_b_B2d039e11c3263491d8c3001ac7a844fc.mp4?tag=1-1572264843-p-0-oeziowhxdt-5b5f7260c44b14b2&type=hot
下载视频成功:http://jsmov2.a.yximgs.com/upic/2019/10/03/08/BMjAxOTEwMDMwODAyMTZfMzMyODQyMTExXzE4MTIwOTQ3MjExXzFfMw==_b_Bca3c27612dc62ea907887edd48ac6ccf.mp4?tag=1-1572264843-p-0-wjycc4zqsi-045d9b68d9f8a7fb&type=hot
下载视频成功:http://jsmov2.a.yximgs.com/upic/2019/10/01/10/BMjAxOTEwMDExMDM4MjRfMzMyODQyMTExXzE4MDI4MzgzODk2XzFfMw==_b_B072a824dbf29fbabeddff896d671ebcd.mp4?tag=1-1572264843-p-0-kwqvozhrff-039073ab5a551e15&type=hot
......
``

用Python实现一个简单的批量无水印快手抖音批量下载器相关推荐

  1. 如何导出无水印_抖音视频怎么去水印 抖音怎么导出无水印视频

    去水印神速 去水印去水印短视频去水印小工具去水印解析去水印免费版去水印助手去水印软件去水印视频一键去水印快手去水印 随着短视频越来越火爆,玩抖音的人也越来越多.有人发就有人下载,有人下载就需要考虑水印 ...

  2. python批量下载文件只有1kb_详解如何用python实现一个简单下载器的服务端和客户端...

    话不多说,先看代码: 客户端: import socket def main(): #creat: download_client=socket.socket(socket.AF_INET,socke ...

  3. 国外大牛教你,如何用Python开发一个简单的区块链数据结构| 建议收藏

    来源 | Medium 作者 | arjuna sky kok 整理 / Aholiab 出品 | 区块链大本营(blockchain_camp) 根据IEEE此前的一项调查,Python已成为最受开 ...

  4. python界面设计-手把手教你用Python设计一个简单的命令行界面

    原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...

  5. python游戏最简单代码-如何利用Python开发一个简单的猜数字游戏

    前言 本文介绍如何使用Python制作一个简单的猜数字游戏. 游戏规则 玩家将猜测一个数字.如果猜测是正确的,玩家赢.如果不正确,程序会提示玩家所猜的数字与实际数字相比是"大(high)&q ...

  6. python推荐系统-利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  7. 怎么用python编简单游戏_用Python实现一个简单的算术游戏详解

    用Python实现一个简单的算术游戏 #!/usr/bin/env python from operator import add, sub from random import randint, c ...

  8. 【Python】如何用python做一个简单的输入输出交互界面?

    看到知乎上有人在问,如何使用Python做一个简单的输入输出交互界面? 交互界面就涉及到GUI编程. Python有很多GUI框架,功能大同小异. 其中比较出名的有「PyQT」.**wxPython. ...

  9. 基于python的系统构建_利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  10. java调python 监控_利用Python实现一个简单的系统监控图表

    作为运维人员,想必大家肯定都做过这样的事情:为了监控系统资源使用情况,开了若干个窗口,来回切换看输出: 只要我切得够快,性能异常点就逃不过我的眼睛! 这个时候你要是有个监控工具自然是很好的,例如我们美 ...

最新文章

  1. 大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践
  2. linux 命令 —-— vi编辑器
  3. python猜单词游戏_磁盘空间不足。
  4. 深度学习笔记 第四门课 卷积神经网络 第二周 深度卷积网络:实例探究
  5. 用idea插件将一个spring boot项目部署到docker容器里运行
  6. Cisco 交换机密码重置步骤
  7. Springboot项目修改html后不需要重启---springboot项目的热部署
  8. Linux中su和sudo的用法整理
  9. html走马观花效果,走马观花台湾行 用EF-S 10-18来记录风景
  10. 网页里面的下拉框与数据库交互
  11. LeetCode题库整理【Java】—— 1两数之和
  12. Oracle CoherenceWebLogic反序列化远程代码执行漏洞安全风险通告
  13. ThinkPHP开发博客系统笔记之二
  14. window10系统ie设置代理,保存不了的问题
  15. 深度学习基础知识题库大全
  16. 使用Hexo 在本地搭建博客(一)
  17. 论文阅读《Characterizing BDS signal-in-space performance from integrity perspective》3
  18. Unity读取项目文件夹图片,PC端
  19. Karl Guttag:谈MicroLED AR光学难点,Mojo Vision还有很多问题
  20. hdu 2086 A1 = ?(递推)

热门文章

  1. 机器学习 - 贝叶斯网络
  2. flash+xml 制作电子相册教程
  3. 升级IE11时,失败报错如何解决
  4. 某度文库付费文档下载,实测可用~
  5. HTML+CSS零基础学习笔记(二)
  6. PCL中3D点云特征描述与提取(一)
  7. 13届蓝桥杯c++组日常练习问题记录
  8. resize2fs调整ext2\ext3\ext4文件系统的大小
  9. 苹果分屏软件_Mac软件推荐
  10. gba模拟器html5源码,酷!用 JS 做的 GBA 模拟器