ilpost.it - extract MP3 URLs from podcast pages

Extracts MP3 URLs and provides options to open or download them

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         ilpost.it - extract MP3 URLs from podcast pages
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  Extracts MP3 URLs and provides options to open or download them
// @author       Ovinomaster
// @match        https://www.ilpost.it/podcasts/*
// @icon         https://static-prod.cdnilpost.com/wp-content/uploads/favicon/favicon.ico
// @grant        none
// @license      CC-BY-NC-SA-4.0; https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
// ==/UserScript==

(function() {
'use strict';

// Function to extract MP3 URLs from <script> tags
function extractMP3Urls() {
const scriptTags = document.getElementsByTagName('script');
const mp3Urls = [];
const currentUrl = window.location.href.replace(/\/$/, ''); // Strip the last '/'
//const pattern = new RegExp(`"url":"${currentUrl}","episode_raw_url":"(https://www\\.ilpost\\.it/wp-content/uploads/.*\\.mp3)"`, 'g');
const pattern = new RegExp(`"url":"${currentUrl}","episode_raw_url":"(https://static-prod\\.cdnilpost\\.com/wp-content/uploads/.*\\.mp3)"`, 'g');

for (let script of scriptTags) {
const matches = script.textContent.match(pattern);
if (matches) {
for (let match of matches) {
//const url = match.match(/https:\/\/www\.ilpost\.it\/wp-content\/uploads\/.*\.mp3/)[0];
const url = match.match(/https:\/\/static-prod\.cdnilpost\.com\/wp-content\/uploads\/.*\.mp3/)[0];
mp3Urls.push(url);
}
}
}
return mp3Urls;
}

// Create a button to open the extracted MP3 URL in a new tab
const openButton = document.createElement('button');
openButton.innerText = 'Apri file MP3';
openButton.style.height = '36.7333px';
openButton.style.padding = '5px 10px';
openButton.style.marginLeft = '10px';
openButton.style.backgroundColor = '#ffe000';
openButton.style.color = 'black';
openButton.style.border = '0.975px solid #b4b5b6';
openButton.style.borderRadius = '7.5px';
openButton.style.cursor = 'pointer';
// openButton.style.boxShadow = '0 4px 6px rgba(0, 0, 0, 0.1)';
openButton.style.fontFamily = 'Red Hat Text, sans-serif';
openButton.style.fontSize = '.688rem';
openButton.style.fontWeight = '500';
openButton.addEventListener('mouseover', () => {
openButton.style.backgroundColor = '#ffd700';
});
openButton.addEventListener('mouseout', () => {
openButton.style.backgroundColor = '#ffe000';
});
openButton.addEventListener('click', () => {
const mp3Urls = extractMP3Urls();
if (mp3Urls.length > 0) {
const truncatedUrl = mp3Urls[0].split('.mp3')[0] + '.mp3';
window.open(truncatedUrl, '_blank');
} else {
alert('No MP3 URLs found.');
}
});

// Create a button to download the extracted MP3 URL
const downloadButton = document.createElement('button');
downloadButton.innerText = 'Scarica file MP3';
downloadButton.style.height = '36.7333px';
downloadButton.style.padding = '5px 10px';
downloadButton.style.marginLeft = '10px';
downloadButton.style.backgroundColor = '#ffe000';
downloadButton.style.color = 'black';
downloadButton.style.border = '0.975px solid #b4b5b6';
downloadButton.style.borderRadius = '7.5px';
downloadButton.style.cursor = 'pointer';
// downloadButton.style.boxShadow = '0 4px 6px rgba(0, 0, 0, 0.1)';
downloadButton.style.fontFamily = 'Red Hat Text, sans-serif';
downloadButton.style.fontSize = '.688rem';
downloadButton.style.fontWeight = '500';
downloadButton.addEventListener('mouseover', () => {
downloadButton.style.backgroundColor = '#ffd700';
});
downloadButton.addEventListener('mouseout', () => {
downloadButton.style.backgroundColor = '#ffe000';
});
downloadButton.addEventListener('click', () => {
const mp3Urls = extractMP3Urls();
if (mp3Urls.length > 0) {
const truncatedUrl = mp3Urls[0].split('.mp3')[0] + '.mp3';
const link = document.createElement('a');
link.href = truncatedUrl;
link.download = '';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
} else {
alert('No MP3 URLs found.');
}
});

// Function to place the buttons inside the target div
function placeButtons() {
const divPattern = /episode_episode-buttons__/;
const actionDivPattern = /episode_episode-actions__/;
const divs = document.querySelectorAll('div');
for (let div of divs) {
if (divPattern.test(div.className)) {
const actionDiv = Array.from(div.children).find(child => actionDivPattern.test(child.className));
if (actionDiv) {
div.insertBefore(openButton, actionDiv);
div.insertBefore(downloadButton, actionDiv);
} else {
div.appendChild(openButton);
div.appendChild(downloadButton);
}
break;
}
}
}

// Wait for the page to load completely before placing the buttons
window.addEventListener('load', placeButtons);
})();