前言
在这篇文章中,我们将介绍如何使用 Rust 和 Tauri 开发一个抖音短视频去水印下载工具。本项目的目的是帮助大家更好地理解 Rust 和 Tauri 的基本用法,并展示如何将它们应用于实际项目中。
项目简介
本项目的 GitHub 仓库地址为 nianyi-778/tiktok-tool。项目主要功能包括:
- 从抖音获取视频 ID
- 获取视频信息
- 下载无水印视频
- 获取用户信息
环境准备
在开始之前,请确保你已经安装了以下工具:
项目结构
项目的主要文件和文件夹包括:
.github/ISSUE_TEMPLATE: GitHub issue 模板src-tauri: Tauri 相关的 Rust 代码src: 前端源代码README.md: 项目说明文件
Rust 服务端代码
首先,让我们看看如何在 Rust 中实现视频信息和用户信息的获取,以及视频的下载功能。
获取视频 ID
#[tauri::command]
pub async fn get_url_id(addr: String) -> Result<String, String> {
let mut _addr = addr;
let mut result = "".to_string();
let reg_get_share_url = Regex::new(r#"https://v.douyin.com/[^\s ]*"#).unwrap();
let reg_get_id = Regex::new(r#"https://www.douyin.com/video/([^?&=\s]+)"#).unwrap();
match reg_get_share_url.captures(&_addr) {
Some(cap) => {
let url = cap.get(0).map_or("", |value| value.as_str());
if url.len() > 0 {
_addr = reqwest::get(url)
.await
.map_err(|_| "网络错误")?
.url()
.as_str()
.to_string();
}
}
_ => (),
}
if let Some(cap) = reg_get_id.captures(&_addr) {
result = cap
.get(1)
.map_or("".to_string(), |value| value.as_str().to_string());
}
if result.len() > 0 {
return Ok(result);
}
Err("解析失败".into())
}
获取视频信息
#[tauri::command]
pub async fn get_video_info_by_id(id: &str) -> Result<VideoInfo, String> {
let res_text = reqwest::get(
"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=".to_string() + id,
)
.await
.map_err(|_| "网络错误")?
.text()
.await
.map_err(|_| "网络错误")?;
let raw_info = serde_json::from_str::<serde_json::Value>(&res_text).map_err(|_| "解析错误")?;
let url = raw_info["item_list"][0]["video"]["play_addr"]["url_list"][0]
.as_str()
.unwrap_or("")
.replace("playwm", "play");
if url.len() == 0 {
return Err("此视频地址无效".into());
}
Ok(VideoInfo {
title: raw_info["item_list"][0]["desc"]
.as_str()
.unwrap_or("")
.to_string(),
ratio: raw_info["item_list"][0]["video"]["ratio"]
.as_str()
.unwrap_or("")
.to_string(),
cover: raw_info["item_list"][0]["video"]["cover"]["url_list"][0]
.as_str()
.unwrap_or("")
.to_string(),
id: raw_info["aweme_id"].as_str().unwrap_or("").to_string(),
url,
})
}
下载视频
#[tauri::command]
pub async fn download_video(
url: &str,
write_path: &str,
file_name: &str,
id: &str,
window: tauri::Window,
) -> Result<String, String> {
let file_path = Path::new(write_path).join(file_name.replace(
|item: char| ['\', '/', ':', '?', '*', '"', '<', '>', '|'].contains(&item),
"_",
));
结语
通过这篇文章,我们展示了如何使用 Rust 和 Tauri 开发一个功能强大的抖音短视频去水印下载工具。希望这篇文章能帮助你更好地理解 Rust 和 Tauri 的应用,并激发你在实际项目中使用这些技术的兴趣。这个项目不仅展示了 Rust 和 Tauri 的强大功能,也为你提供了一个实际的项目案例,帮助你更快地上手和掌握这些技术。
如果你对这个项目感兴趣,欢迎访问 GitHub 仓库 查看更多详细内容和源码。希望你能从中获得启发,并开发出更多有趣和实用的应用。
感谢你的阅读!如果你有任何问题或建议,欢迎在评论区与我交流。
让我们一起在技术的海洋中不断探索,不断进步!