基于 Rust 和 Tauri 的抖音短视频去水印工具开发指南

548 阅读3分钟

前言

在这篇文章中,我们将介绍如何使用 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 仓库 查看更多详细内容和源码。希望你能从中获得启发,并开发出更多有趣和实用的应用。

感谢你的阅读!如果你有任何问题或建议,欢迎在评论区与我交流。

让我们一起在技术的海洋中不断探索,不断进步!