Discussions » Demandes de création de scripts

Can someone make a script to download video attachments from forums?

§
Posté le: 2020-04-06
Édité le: 2020-04-06

Can someone make a script to download video attachments from forums?

I already have a script for downloading images and exporting as zip from forum posts but can some help me do the same for videos too?

Thanks in advance

Here's the script for image downloads

// ==UserScript==
// @name         Gallery Downloader - Sep 1, 2019
// @namespace    ThotDev
// @description  Download galleries from posts on example.com
// @version      1.1.2
// @icon         https://i.imgur.com/5xpgAny.jpg
// @license      WTFPL; http://www.wtfpl.net/txt/copying/
// @match        https://example.com/*
// @require      https://code.jquery.com/jquery-3.3.1.min.js
// @require      https://unpkg.com/[email protected]/dist/jszip.min.js
// @require      https://unpkg.com/[email protected]/dist/FileSaver.min.js
// @require      https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js?v=a834d46
// @noframes
// @connect      self
// @run-at       document-start
// @grant        GM.xmlHttpRequest
// @grant        GM_xmlhttpRequest
// ==/UserScript==

/* globals jQuery JSZip saveAs */

jQuery(function ($) {
    $('.message-attribution-opposite')
        .map(function () { return $(this).children('li:first'); })
        .each(function () {
                var downloadLink = $('<li><a href="#">⬇️ Download</a><li>');
                var $text = downloadLink.children('a');
                downloadLink.insertBefore($(this));
                downloadLink.click(function (e) {
                    e.preventDefault();

                    var urls = $(this)
                        .parents('.message-main')
                        .first()
                        .find('a.js-lbImage,.lbContainer-zoomer')
                        .map(function () { return $(this).is('[href]') ? $(this).attr('href') : $(this).data('src'); })
                        .get();

                    var zip = new JSZip(),
                        current = 0,
                        total = urls.length;

                    $text.text('Downloading...');

                    function next () {
                        if (current < total) {
                            $text.text('Downloading ' + (current+1) + '/' + total);

                            GM.xmlHttpRequest({
                                method: 'GET',
                                url: urls[current++],
                                responseType: 'arraybuffer',
                                onload: function (response) {
                                    try {
                                        debugger;
                                        var name = response.responseHeaders.match(/^content-disposition.+(?:filename=)(.+)$/mi)[1].replace(/\"/g, '');
                                        var data = response.response;
                                        zip.file(name, data);
                                    }
                                    catch (err) {

                                    }

                                    next();
                                },
                                onerror: function (response) {
                                    next();
                                }
                            });
                        }
                        else {
                            const fileName = $(".p-title-value")[0].textContent
                            const timeStamp = $.now()
                            $text.text('Generating zip...');
                            zip.generateAsync({ type: 'blob' })
                                .then(function (blob) {
                                    $text.text('Download complete!');
                                    saveAs(blob, `${fileName}-${timeStamp}.zip`);
                                });

                        }
                    }
                    next();
                });
            }
        );
});

Poster une réponse

Connectez-vous pour poster une réponse.

长期地址
遇到问题?请前往 GitHub 提 Issues。