Отключение рекламы на Digitally Imported (di.fm)

Есть такое замечательное интернет-радио — Digitally Imported, по адресу https://di.fm
Всё в нём прекрасно, за исключением того, что, при использовании бесплатного аккаунта, время от времени дают послушать рекламу.
Я понимаю, что реклама нужна, как минимум для двух вещей:
1) Склонение пользователей купить платную подписку, где рекламы не будет.
2) Заработок денег на рекламодателях

Поскольку в России, откуда я слушаю радио, видимо нет желающих подавать рекламу, то в рекламных паузах можно услышать только сообщения двух видов:
а) «Пропустите эти рекламные сообщения, и наслаждайтесь музыкой с более высоким качеством, перейдя на премиум»
б) «Digitally imported ищет крутых веб-разработчиков на полный рабочий день»
Чтобы не слышать этого, я написал браузерный скрипт для GreaseMonkey/TamperMonkey

Совсем выключить рекламу нельзя, но можно сделать так, чтобы во время рекламы громкость становилась нулевой.

Установка сприпта:

1. Установить в браузере плагин для подключения пользовательских скриптов:

Для FireFox это GreaseMonkey
Для Google Chrome и основаных на нём браузерах, не имеющих своего магазина расширений (Chromium, Vivaldi) это TamperMonkey
Для Opera это собственная версия TamperMonkey

2. Скопировать код скрипта здесь: https://github.com/MihanEntalpo/DiFmAdvMute/blob/master/script.js

Или прямо здесь:

// ==UserScript==
// @name         Digitaly imported adv muter
// @namespace    https://mihanentalpo.me/
// @version      0.1
// @description  Mute sound, then adverstment is played on di.fm
// @author       Mihanentalpo
// @match        http://www.di.fm/*
// @grant        none
// ==/UserScript==
 
//Counter of checks
var advMuteCheckCount = 0;
//Is debug box need to be showed?
var displayDebugBox = true;
 
/**
* Check is volume muted
*/
function isVolumeMuted()
{
    return jQuery('a[aria-label=volume]').hasClass('icon-mute');
}
 
/**
* Emulate click on "mute" button
*/
function volumeClick()
{
    jQuery('a[aria-label=volume]').trigger('click');
}
 
/**
* Check, if adverstment playing
*/
function isAdverstmentPlaying()
{
    return $('.close-spinner').css('display') != 'none';
}
 
/**
* Display debug box
*/
function addDebugBlock() {    
    jQuery("body").append("<div id='debugBlock' style='position:fixed;"
        + " left:10px; top:10px; font-size:8px; opacity: 0.5;"
        + " background:white; border-radius:5px; z-index:9999;" 
        + " color:black; padding:4px;"
        + " box-shadow: 3px 3px 20px 3px rgba(0,0,0,0.75);'></div>");
}
 
/**
* Show debug html message
* @param string html - code to display
* @param boolean append - is need to be appended to old messages (or replace it)
*/
function debug(html, append)
{
    if (!displayDebugBox) return;
    if (!jQuery('#debugBlock').length) addDebugBlock();
    append = append || false;
    if (append) html = jQuery('#debugBlock').html() + "<br>" + html; 
    jQuery('#debugBlock').html(html);
}
 
/**
* Check for adverstment, and mute (or unmute) if needed
*/
function checkAdv()
{
    var append = true;
    var msg = "checkAdv #" + advMuteCheckCount 
                + ", display:" + $('.close-spinner').css('display') 
                + "(" + (isAdverstmentPlaying() ? "TRUE" : "FALSE") + ")";
    advMuteCheckCount +=1;
    if (advMuteCheckCount % 10 == 0) append = false;
    debug(msg, append);
    //Если реклама играет
    if (isAdverstmentPlaying())
    {
        //Если звук не выключен
        if (!isVolumeMuted())
        {
            //Выключаем
            volumeClick();
            debug("SWITCHING OFF ADV!!!", true);
        }
    }
    else
    {
        if (isVolumeMuted())
        {
            //Включаем
            volumeClick();
            debug("SWITCHING ON MUSIC!!!", true);
        }
    }
 
}
 
/**
* Run everysecond check
*/
$(function() 
{
    debug("AdvMute Init!");
 
    setInterval(checkAdv, 1000);
});

3. Создать в установленном расширении новый скрипт, и вставить туда код, скопированный из предоставленного выше скрипта.

Проверка:

1. Открываем сайт di.fm

2. Авторизуемся. Если нет аккаунта, придётся зарегистрироваться, так как без регистрации дадут слушать музыку только 30 минут.

3. В левом верхнем углу должно отображаться отладочное окошко (чтобы оно не отображалось, установите в начале скрипта displayDebugBox = false)

4. Включаем любой радио-канал, и ждём пока среди музыки будет реклама. Во время рекламы музыка должна затихнуть.

Принцип действия

Скрипт действует просто: детектирует на сайте di.fm элементы, в которых отображается информация о рекламном ролике, и при их наличии «нажимает» на кнопку отключения звука. И наоборот. Проверка производится раз в секунду.

Платный аккаунт

Данный скрипт я написал только потому, что в России всё равно никакой коммерческой рекламы на радио di.fm не транслируется, и моё игнорирование рекламы не наносит Di.fm ущерб в монетизации. Если же у вас по этому радио есть какая-то платная реклама, и вам не жалко 4$ в месяц (а при оплате за 2 года всего 2.92$ в месяц), то советую всё-же приобрести платный аккаунт для избавления от рекламы, а там, говорят, ещё и качество звука лучше (на моей дешёвой звуковой карте этого не заметно).
Поддержать создателей радио: https://www.di.fm/premium


Оставить комментарий