Greasy Fork

Greasy Fork is available in English.

飞书妙计-下载字幕和txt

让你更加便捷地下载飞书妙计生成的字幕文件和txt文件.

当前为 2024-02-23 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         飞书妙计-下载字幕和txt
// @namespace    http://tampermonkey.net/
// @version      2024-02-22
// @description  让你更加便捷地下载飞书妙计生成的字幕文件和txt文件.
// @author       You
// @match        https://*.feishu.cn/minutes/*
// @icon         http://feishu.cn/favicon.ico
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    var forceDownload = function (blob, filename) {
        var a = document.createElement('a');
        a.download = filename;
        a.href = blob;
        a.click();
    }

    let format_map = {
        '2': '.txt',
        '3': '.srt'
    };

    var downloadRes = function (sid, filename, format) {
        fetch("https://awfxm2pi54y.feishu.cn/minutes/api/export?_t=" + new Date().getTime(), {
            "headers": {
                "accept": "application/json, text/plain, */*",
                "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
                "bv-csrf-token": "850d44eb-1a84-432b-9de1-b34f715f9d25",
                "cache-control": "no-cache",
                "content-type": "application/x-www-form-urlencoded",
                "device-id": "7338560823671504898",
                "platform": "web",
                "pragma": "no-cache",
                "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Microsoft Edge\";v=\"120\"",
                "sec-ch-ua-mobile": "?0",
                "sec-ch-ua-platform": "\"Windows\"",
                "sec-fetch-dest": "empty",
                "sec-fetch-mode": "cors",
                "sec-fetch-site": "same-origin",
                "utc-bias": "480",
                "x-lgw-os-type": "1",
                "x-lgw-terminal-type": "2",
                "cookie": `${document.cookie}`,
                "Referer": `${location.href}`,
                "Referrer-Policy": "strict-origin-when-cross-origin"
            },
            "body": `add_speaker=false&add_timestamp=false&format=${format}&is_fluent=false&language=zh_cn&object_token=${sid}&translate_lang=default`,
            "method": "POST"
        })
        .then(response => response.blob())
        .then(blob => {
            let blobUrl = window.URL.createObjectURL(blob);
            let download_name = filename + format_map[format];
            forceDownload(blobUrl, download_name);
        })
        .catch(e => console.error(e));

        // .then(response => response.text())
        //  .then(data => console.log(data));
    };

    if (location.href.includes('/me')) {
        window.onload = function () {
            // 你的代码放在这里,会在页面加载完成后执行
            console.log("页面已完全加载");
            let videos = document.querySelectorAll("#app > div > div.mm-layout > div.mm-content-outside > div.mm-content > div.list-table > div > div > a > div");

            for (var i = 0; i < videos.length; i++) {

                let parentDiv = videos[i];
                var children = parentDiv.children;
                var newDiv = document.createElement('div');

                let sid = parentDiv.parentElement.href.split('minutes/')[1];
                let filename = parentDiv.children[0].children[1].querySelector('.content').innerText;

                var button_txt = document.createElement('button');
                button_txt.style.backgroundColor = 'blue';
                button_txt.style.color = 'white'; // 设置字体颜色为白色
                button_txt.style.fontSize = '14px';
                button_txt.textContent = '下载文本';
                button_txt.onclick = function (e) {
                    e.stopPropagation();
                    e.preventDefault(); // 阻止默认行为
                    downloadRes(sid, filename, '2');
                }

                var button_srt = document.createElement('button');
                button_srt.style.backgroundColor = 'red';
                button_srt.style.color = 'white'; // 设置字体颜色为白色
                button_srt.style.fontSize = '14px';
                button_srt.textContent = '下载字幕';
                button_srt.onclick = function (e) {
                    e.stopPropagation();
                    e.preventDefault(); // 阻止默认行为
                    downloadRes(sid, filename, '3');
                }

                newDiv.appendChild(button_txt);
                newDiv.appendChild(button_srt);

                var penultimateChild = children[children.length - 2];
                // 在倒数第二个子元素之前插入新div
                parentDiv.insertBefore(newDiv, penultimateChild.nextSibling);
            }
        };

        return;
    }

    let sid = location.href.split('minutes/')[1];
    console.log(`sid:${sid}`);

    // Create a floating button
    var button_txt = document.createElement('button');
    button_txt.style.position = 'fixed';
    button_txt.style.top = '78px';
    button_txt.style.right = '20px';
    button_txt.style.backgroundColor = 'blue';
    button_txt.style.color = 'white'; // 设置字体颜色为白色
    button_txt.style.fontSize = '14px';
    button_txt.textContent = '下载文本';
    document.body.appendChild(button_txt);

    // Add click event listener to the button
    button_txt.addEventListener('click', function () {
        let filename = document.querySelector("div.larkw-web-header-caption-head-title-edit-text.larkw-web-header-caption-head-title-edit-text-allow-edit > span").innerText;
        downloadRes(sid, filename, '2');
    });

    var button_srt = document.createElement('button');
    button_srt.style.position = 'fixed';
    button_srt.style.top = '100px';
    button_srt.style.right = '20px';
    button_srt.style.backgroundColor = 'red';
    button_srt.style.color = 'white'; // 设置字体颜色为白色
    button_srt.style.fontSize = '14px';
    button_srt.textContent = '下载字幕';
    document.body.appendChild(button_srt);

    // Add click event listener to the button
    button_srt.addEventListener('click', function () {
        let filename = document.querySelector("div.larkw-web-header-caption-head-title-edit-text.larkw-web-header-caption-head-title-edit-text-allow-edit > span").innerText;
        downloadRes(sid, filename, '3');
    });

})();