一个抖音视频下载代码
2019独角兽企业重金招聘Python工程师标准>>>
<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.3.1</version></dependency></dependencies>
先加入上面的坐标到pom文件中
定义常量类
/*** 常量类*/
public interface Const {//抖音随机刷新视频列表String url = "https://aweme-eagle.snssdk.com/aweme/v1/feed/?type=0&max_cursor=0&min_cursor=0&count=6&volume=0.0&pull_type=1&need_relieve_aweme=0&filter_warn=0&req_from&is_cold_start=0&longitude=120.388862&latitude=36.090072&ts=1545468521&js_sdk_version=1.5.4&app_type=normal&manifest_version_code=380&_rticket=1545468521415&ac=wifi&device_id=53039791462&iid=54915619827&mcc_mnc=46000&os_version=8.0.0&channel=update&version_code=380&device_type=MHA-AL00&language=zh&uuid=865296034887289&resolution=1080*1808&openudid=3a6f6cdf79dc8965&update_version_code=3802&app_name=aweme&version_name=3.8.0&os_api=26&device_brand=HUAWEI&ssmix=a&device_platform=android&dpi=480&aid=1128&as=a195cfd199360cbaed8411&cp=f667cb5e91d818ade1IgQk&mas=0139d6baba15f4cc628baffe83a99fad7c8c8c2c1c26a68646c60c";//User-AgentString userAgent= "com.ss.android.ugc.aweme/380 (Linux; U; Android 8.0.0; zh_CN_#Hans; MHA-AL00; Build/HUAWEIMHA-AL00; Cronet/58.0.2991.0)";
}
核心关键代码:
package com.github.liupeng328;import cn.hutool.core.io.FileUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.db.Entity;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;import java.io.File;public class Main implements Runnable{private static String absolutePath;//视频存放路径@Overridepublic void run() {while (true) {try {down();//开始下载}catch (Exception e){e.printStackTrace();}}}public static void main(String[] args) {System.out.println("******************************************************************");System.err.println("欢迎使用抖音视频下载工具,如有问题请加QQ群交流:317896269");System.err.println("开始抓取数据……");absolutePath = FileUtil.getAbsolutePath(new File(""));absolutePath = absolutePath+File.separator+"下载到的视频"+File.separator;System.err.println("视频存放路径为: "+absolutePath);//多线程下载ThreadUtil.execute(new Main());ThreadUtil.execute(new Main());}/*** 下载视频*/private static void down() {String body = HttpRequest.get(Const.url).header("User-Agent", Const.userAgent).execute().body();JSONObject json = JSONUtil.parseObj(body);//System.out.println(JSONUtil.formatJsonStr(body));//抽取数据 响应数据详细解析见: doc/抖音视频列表接口分析.jsonJSONArray list = json.getJSONArray("aweme_list");if(list.size()>0){for(int i = 0;i<list.size();i++){JSONObject object = list.getJSONObject(i);//作者信息JSONObject authorJson = object.getJSONObject("author");if(authorJson!=null){Entity author = Entity.create().set("uid",authorJson.getStr("uid"))//id.set("short_id",authorJson.getStr("short_id"))//短id.set("nickname",authorJson.getStr("nickname"))//昵称.set("gender",authorJson.getStr("gender"))//性别.set("signature",authorJson.getStr("signature"))//个性签名//头像图片uri 唯一标示 保存最大分辨率的那个.set("avatar_larger_uri",authorJson.getJSONObject("avatar_larger")==null?null:authorJson.getJSONObject("avatar_larger").getStr("uri"))//头像图片url 主机+uri 保存最大分辨率的那个.set("avatar_larger_url_list",authorJson.getJSONObject("avatar_larger")==null?null:authorJson.getJSONObject("avatar_larger").getJSONArray("url_list")==null?null:authorJson.getJSONObject("avatar_larger").getJSONArray("url_list").getStr(0)).set("birthday",authorJson.getStr("birthday"));//生日System.out.println("作者信息: "+JSONUtil.formatJsonStr(JSONUtil.toJsonStr(author)));//考虑到抖音视频非常多,单机不可能爬取完全部,所以该爬虫天然作为分布式,每一个客户端启动,都是整个爬虫的一部分//每个爬虫互联帮助,一起下载,加快下载速度//信息分布式共享//todo}//音频信息JSONObject musicJson = object.getJSONObject("music");if(musicJson!=null){Entity music = Entity.create().set("id",musicJson.getStr("id"))//id.set("title",musicJson.getStr("title"))//标题.set("author",musicJson.getStr("author"))//作者.set("album",musicJson.getStr("album"))//专辑//音乐uri 唯一标识 只保留最大的那张.set("play_url_uri",musicJson.getJSONObject("play_url")==null?null:musicJson.getJSONObject("play_url").getStr("uri"))//音乐url.set("play_url_url_list",musicJson.getJSONObject("play_url")==null?null:musicJson.getJSONObject("play_url").getJSONArray("url_list")==null?null:musicJson.getJSONObject("play_url").getJSONArray("url_list").getStr(0))//高清图uri 唯一标识 只保留最大的那张.set("cover_hd_uri",musicJson.getJSONObject("cover_hd")==null?null:musicJson.getJSONObject("cover_hd").getStr("uri"))//高清图url 只存最大的图.set("cover_hd_url_list",musicJson.getJSONObject("cover_hd")==null?null:musicJson.getJSONObject("cover_hd").getJSONArray("url_list")==null?null:musicJson.getJSONObject("cover_hd").getJSONArray("url_list").getStr(0));System.out.println("背景音乐信息: "+JSONUtil.formatJsonStr(JSONUtil.toJsonStr(music)));//考虑到抖音视频非常多,单机不可能爬取完全部,所以该爬虫天然作为分布式,每一个客户端启动,都是整个爬虫的一部分//每个爬虫互联帮助,一起下载,加快下载速度//信息分布式共享//todo}//视频信息JSONObject videoJson = object.getJSONObject("video");if(videoJson!=null){Entity video = Entity.create()//视频uri 唯一标识 只保留最高清的那个.set("play_addr_uri",videoJson.getJSONObject("play_addr")==null?null:videoJson.getJSONObject("play_addr").getStr("uri"))//高清视频url 只存最高清那个.set("play_addr_url_list",videoJson.getJSONObject("play_addr")==null?null:videoJson.getJSONObject("play_addr").getJSONArray("url_list")==null?null:getUrl(videoJson.getJSONObject("play_addr").getJSONArray("url_list")))//动态图uri 唯一标识 只保留最高清的那个.set("dynamic_cover_uri",videoJson.getJSONObject("dynamic_cover")==null?null:videoJson.getJSONObject("dynamic_cover").getStr("uri"))//动态图uil 只存最高清那个.set("dynamic_cover_url_list",videoJson.getJSONObject("dynamic_cover")==null?null:videoJson.getJSONObject("dynamic_cover").getJSONArray("url_list")==null?null:videoJson.getJSONObject("dynamic_cover").getJSONArray("url_list").getStr(0))//视频封面图uri 唯一标识 只保留最高清的那个.set("origin_cover_uri",videoJson.getJSONObject("origin_cover")==null?null:videoJson.getJSONObject("origin_cover").getStr("uri"))//视频封面图uil 只存最高清那个.set("origin_cover_url_list",videoJson.getJSONObject("origin_cover")==null?null:videoJson.getJSONObject("origin_cover").getJSONArray("url_list")==null?null:videoJson.getJSONObject("origin_cover").getJSONArray("url_list").getStr(0));;System.out.println("视频信息: "+JSONUtil.formatJsonStr(JSONUtil.toJsonStr(video)));//考虑到抖音视频非常多,单机不可能爬取完全部,所以该爬虫天然作为分布式,每一个客户端启动,都是整个爬虫的一部分//每个爬虫互联帮助,一起下载,加快下载速度//信息分布式共享//todo//下载视频HttpResponse response = HttpRequest.get(video.getStr("play_addr_url_list")).execute();if(response.getStatus()==302){String location = response.header("location");HttpUtil.downloadFile(location,absolutePath+video.getStr("dynamic_cover_uri")+".mp4");System.err.println(absolutePath+video.getStr("dynamic_cover_uri")+".mp4"+ "下载成功!!!");}else {HttpUtil.downloadFile(video.getStr("play_addr_url_list"),absolutePath+video.getStr("dynamic_cover_uri")+".mp4");}}}}}/*** 获得url列表中可以浏览器访问的那个url* 即:包含api.amemv.com 信息的url* @param jsonArray* @return*/private static String getUrl(JSONArray jsonArray) {for(int i = 0;i<jsonArray.size();i++){if(jsonArray.getStr(i).contains("api.amemv.com")){return jsonArray.getStr(i);}}return null;}}
转载于:https://my.oschina.net/sprouting/blog/2992808
一个抖音视频下载代码相关推荐
- 1024程序员节 - 分享一个抖音视频下载程序
在网上调用别人的接口来实现的功能 import requests import execjs# 生成参数s def generateStr(a):js = '''test = function(a) ...
- 如何使用 Python 开发一个【抖音视频下载神器】
国外有个在线网站,专门帮别人下载 YouTube 上面的视频,功能很简单直接,就是把你想要的 youtube 视频地址复制进去,然后点击 start 就可以下载视频: 不过,当你点击下载的时候,会跳转 ...
- 手写一个抖音视频去水印工具,千万别刚一个程序员
百因必有果 说一下我为什么要做个抖音视频去水印工具,其实是因为我的沙雕女友,她居然刚我~ 有天晚上她在抖音看见一个非常具有 教育意义 的视频,"男人疼媳妇就该承包全部家务活",然后 ...
- 爬虫+pyqt5 打造属于自己的抖音视频下载器
前言:最近一段时间在家经常会用抖音来度过娱乐时间,经常会直接通过抖音软件向好友分享视频.自己无聊至极就花了一上午的时间做了一个PC端的抖音视频下载器. 郑重申明:该文章介绍的技术仅供用于学习,不可恶意 ...
- 手写一个抖音视频去水印Java工具,千万别刚一个程序员
关注公众号后台回复pay或mall获取实战项目资料+视频 百因必有果 说一下我为什么要做个抖音视频去水印工具,其实是因为我的沙雕女友,她居然刚我~ 有天晚上她在抖音看见一个非常具有 教育意义 的视频, ...
- 抖音视频下载改md5
抖音视频下载改md5 继续发帖:有人发布了为期三天的渔网两天,无法继续创建,因此无法通过人工审核快速通过 点击 关注祥瑞自媒体,了解更多视频 ...
- python,抖音视频下载
python和tkinter制作得抖音下载器 输入抖音分享链接,个人名片-链接形式 , 现在用抖音红人 面筋哥做测试:http://v.douyin.com/d5xrhV/点击GO 每个视频都截图了1 ...
- python3 def download_python3下载抖音视频的完整代码
python3下载抖音视频的代码如下所示: # -*- coding:utf-8 -*- from contextlib import closing import requests, json, r ...
- 《2019/04/12》java下载抖音视频
java下载抖音视频 下载抖音视频,获取到抖音视频的下载地址之后,类似: String url = "https://aweme.snssdk.com/aweme/v1/play/?vide ...
最新文章
- 如何处理SQL Server事务复制中的大事务操作
- MailScanner相关规则设置
- 单页面应用微信分享跳坑指南
- 并发集合(二)使用非阻塞线程安全的列表
- 68 SD配置-发票凭证配置-定义出具发票类型
- AndroidStudio_安卓原生开发_Android开发中界面调试很别扭? 设置应用屏宽屏高_应用大小_design_width_in_dp---Android原生开发工作笔记140
- 塘沽十三中2021年高考成绩查询,2020天津高考成绩查询
- 机器人卡纸形状图片大全图片_天水生态木天花吊顶图片大全
- 【OpenCV的cvSplit函数】
- STM32F429之DCMI 数字相机接口
- Windows XP图片查看器打不开图片的解决办法
- 湘潭大学计算机学院考研喜报,湘潭大学化学学院考研率连续七年在全校排名第一...
- 《云原生的本手、妙手和俗手》——2022全国新高考I卷作文
- Android 仿百合网超火爆社交app首页滑动效果
- 武汉芯源CW32L083系列MCU在空气净化器的应用介绍
- wincc远程服务器配置,wincc连接远程opc服务器
- 基于SpringBoot的医疗管理系统(Java毕业设计)
- 啊哈添柴挑战Java1222. 输出菱形
- SSL协议和SET协议
- 无人机云台电机用的是哪种?