BIhelper

Auto-DL

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         BIhelper
// @version      1.2
// @grant        GM_download
// @grant        GM_addStyle
// @namespace    https://greasyfork.org/users/290665
// @description  Auto-DL
// @include      https://www.berlinintim.de/*
// ==/UserScript==

$(function() {
    addstyle();

    var NAME = $('title')
        .text()
        .replace(/ +$/,'');
    var PHONE = $('.telefon_button').last().attr('href');
    PHONE = PHONE
        .replace(/^javascript:.*/i,'')
        .replace(/^#/i,'')
        .replace(/tel:/,'')
        .replace(/\+49 */,'0')
        .replace(/ \/ /,'-')
        .replace(/ +/,'-');
    NAME = NAME.replace(/(Privatmodell|(Highclass-)?Escort|Gastmodell|Transsexuelle)\s*/ig,'');
    NAME = NAME.replace(/[^\w-\(\)äöüÄÖÜß ]/g,'');
    var name = NAME + (PHONE?' - ' + PHONE:'');
    var dlArea = $('<div id="BIhelper"></div>');
    $('<button title="download '+name+'"><span class="material-icons md-18">download</span></b></button>')
        .data('name',name)
        .on('click', function(event) {
            downloadAll($(event.currentTarget).data('name'));
        }).appendTo(dlArea);
    $('<button title="copy text"><span class="material-icons md-18">content_copy</span></b></button>')
        .on('click', function(event) {
            navigator.clipboard.writeText(adData());
            $("<div>OK</div>").appendTo($(this))
                .delay(2000).fadeOut(1000, function() {
                $(this).remove();
            });
        }).appendTo(dlArea);

    $(dlArea).find("button").addClass("head_btn");

    $(dlArea).find('button');
    $('.hl_date').first().append(dlArea);
});

function downloadAll(name) {
    let downloadlist = [];
    $('img.slider_img').each(function() {
        var link = $(this).attr('src');
        if (link.length) {
            downloadlist.push(link.replace(/\?.*/,''));
        }
    });
    let listUnique = [...new Set(downloadlist)];
    startDownload(name,listUnique);
}

function startDownload(path,downloadlist) {

    var dialog = $('<div id="BIhelperdialog" title="Download to '+path+' ..."></div>').appendTo($('#BIhelper'));

    for (let URL of downloadlist) {
        var name = URL.replace(/.*\//,'');
        var file = path.replace(/[^\w-\(\)äöüÄÖÜß ]/g,'')+'/'+name;
        URL = URL.replace(/^\/\//,'https://');
        var line = $('<div class="BIDL" data-name="'+name+'">'+name+'</div>').appendTo(dialog);
        (function(url,filepath,filename,linediv) {
            var dl = GM_download({
                url: url,
                name: filepath,
                saveAs: false,
                onerror: function(err){
                    console.error(err);
                    $(linediv).append('<span class="download_error">ERROR: '+err.error+' - '+err.details+'</span>')
                        .delay(2000).fadeOut(1000, function() {
                            $(this).remove();
                        });
                },
                onload: function() {
                    $(linediv).append('<span class="download_ok">✓</span>')
                        .delay(2000).fadeOut(1000, function() {
                            $(this).remove();
                        });
            },
            });
        })(URL,file,name,line);

    }
}
function adData() {
    let name = $('h1.ellipsis').text();

    let subheader = "";
    let text = "";
    $('.sedcard_facts_modell .blocktext_hl').each(function(undefined,el) {
        let key = $(el).text().trim();
        let val = $(el).nextUntil('.blocktext_hl').find("*").addBack().contents()
         .filter(function() {
          return (this.nodeType === 3) && ($(this).text().match(/\w/i));
        })
        .map(function() {
            return $(this).text().trim().replace(/\u00A0/,' ')
        }).get().join(", ");
        if (key && val) text += $(el).text().trim() + " [B]" + val + "[/B]\n";
    });
    $('div.block_teaser .blocktext_hl').each(function(undefined,el) {
        let key = $(el).text().trim();
        let val = $(el).nextUntil('.blocktext_hl').find("*").not(".sternchentext").addBack().contents()
         .filter(function() {
          return (this.nodeType === 3) && ($(this).text().match(/\w/i));
        })
        .map(function() {
            return $(this).text().trim().replace(/\u00A0/,' ')
        }).get().join(", ");
        if (key && val) text += $(el).text().trim() + " [B]" + val + "[/B]\n";
    });
    let stbr = [];
    $("h2:contains(Mein Steckbrief)").parent().parent().parent().find('.block_teaser div.row').each(function(undefined,el) {
        let key = $(el).children("div").eq(0).text().replace(/\u00A0/,' ').trim();
        let val = $(el).children("div").eq(1).text().replace(/\u00A0/,' ').trim();
        if (key && val) stbr.push(`${key}: [B]${val}[/B]`);
    });

    text += stbr.join(", ");

    let URL = window.location.href;
    let address = $('#adress_0 > div').first().contents().filter(function() {
        return (this.nodeType === 3) && ($(this).text().match(/\w/i));
    }).map(function() {
        return $(this).text().trim().replace(/\u00A0/,' ')
    }).get().join(", ");
    let gmap_address = encodeURIComponent(address);
    let adressdetail = $('#adressdetail0').text().trim();
    // let service = $('div.tablet-info-service').html()
    //     .replace(/\n/g,'')
    //     .replace(/<(\/)?h2>/g,'[$1B]')
    //     .replace(/\[B\]/g,'\n[B]')
    //     .replace(/\[\/B\]/g,':[/B]');
    // let languages = '';
    let dataHTML = "Infoservice\n"
        +`[QUOTE][URL=${URL}][SIZE="3"][B]${name}[/B][/SIZE]\n`
        +`${subheader}[/URL]`
        +`[SIZE="1"]\n${text}\n\n`
        // +`[B]Telefon:[/B] [SIZE="3"]${phone}[/SIZE], ${phone2}, ${phone3}\n`
        +`[B]Adresse:[/B] [URL=https://www.google.de/maps/place/${gmap_address}]${address}[/URL] ${adressdetail}`
        // +`${service}\n`
        +`[/SIZE][/QUOTE]`;
    dataHTML = dataHTML.replace(/ {2,}/g,' ').replace(/\n{3,}/,'\n\n');
    //console.log(dataHTML);
    return dataHTML;
}


function addstyle() {
    $('head').append('<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">');
    GM_addStyle(`
    #BIhelper {
        max-height: 150px;
        overflow: auto;
        font-size: 10px;
        position: absolute;
        right: 10px;
        top: 11px;
        z-index: 100;
    }

    #BIhelper button {
        padding: 5px 10px;
        background-color: #980403;
        color: #fff;
        border: none;
        margin-left: 8px;
        position: relative;
        overflow: visible;
    }

    .BIDL {
        background-color: black;
    }
    .download_error {
        color: white;
        background-color: #880010;
        padding: 1px 4px;
        border-radius: 2px;
        margin: 0px 4px;
    }

    .download_ok {
        color: white;
        background-color: #10a020;
        padding: 1px 4px;
        border-radius: 2px;
        margin: 0px 4px;
    }

    `);
}