====== Scraping der Piktogramme von anderen Seiten ====== Mit den folgenden Javascript Snippets können die Piktogramme runtergeladen und deren zugehörigen DokuWiki formatierten Tabellen generiert werden. Auf welchen Webseiten diese Snippets ausführbar sind wird als Rätsel dem Leser überlassen. === Automatisches Runterladen aller Piktogramme === /** * Diesen Codesnippet im Debugger auf der passenden BGHM Webseite ausführen und es werden alle Piktogramme automatisch runtergeladen. */ (() => { let files = [], i = 0; document.querySelector('#theContent').querySelectorAll('.ce-image').forEach(e => { let img = e.querySelector('img'); if (img == null) return; files.push(img.src); i++; }); let downloader = window.setInterval(() => { if (files.length == 0) { window.clearInterval(downloader); return; } let file = files.pop(); let a = document.createElement('a'); a.setAttribute('href', file); a.setAttribute('download', ''); a.setAttribute('target', '_blank'); console.log(`Downloading ${i - files.length}/${i}: `, file); a.click(); }, 200); })(); === Generieren der Piktogrammtabellen === /** * Diesen Codesnippet im Debugger auf der passenden BGHM Webseite ausführen und es wird ein String mit der generierten Tabelle im DokuWiki Format zurückgegeben. * * @param {string} domain - Der Namespace der zugehörigen Piktogramme auf dem Media-Server (':werkstatt:piktogramme:' wird vorangehangen) * @param {number} res - Die maximale Höhe der Piktogramme in der Tabelle in Pixeln * @param {number} cols - Die Anzahl der Spalten der Tabelle */ ((domain, res, cols) => { let entries = [], total = 0; document.querySelector('#theContent').querySelectorAll('.ce-image').forEach(e => { let img = e.querySelector('img'); if (img == null) return; let desc = e.querySelector('.description').textContent.replaceAll(/\s+/g, ' ').replaceAll(/^\s+|\s+$/g, ''); let file = decodeURIComponent(img.src.substr(img.src.lastIndexOf('/') + 1)).replaceAll(' ', '_').toLowerCase(); entries.push(` {{ :werkstatt:piktogramme:${domain}:${file}?x${res} |${desc}}}**${desc}** `); total++; }); let table = ''; entries.forEach((entry, i) => { table += '|' + entry; if ((i + 1) % cols === 0) { table += '|\n'; } }); if (total % cols !== 0) { table += '| '.repeat(cols - (total % cols)); table += '|\n'; } return table; })('verbote', 150, 4);