Skip to content

Instantly share code, notes, and snippets.

@marliotto
Last active August 2, 2016 13:17
Show Gist options
  • Save marliotto/dafd041fd9dcd6dd7e5329294f674a95 to your computer and use it in GitHub Desktop.
Save marliotto/dafd041fd9dcd6dd7e5329294f674a95 to your computer and use it in GitHub Desktop.

###Важно! Необходимо перед установкой данного кода, удалить наш старый код

<!-- подключаем загрузчик -->
<script async src="http://show.octobird.com/ob.js"></script>

<!-- первый рекламный блок: 320x50, без адалта -->
<div class="octobird-block" 
    data-site-id="3510" 
    data-ad-number="1" 
    data-ad-size="320x50"
    data-ad-subs="0"
    data-ad-adult="0"></div>
<script>
    (adsoctobird = window.adsoctobird|| []).push({
        'can_show_callback': function(blockId, block, params) {
            console.log('can_show_callback', blockId, block, params);
            
            return true;
        },
        'no_ads_callback': function(blockId) {
            show_ads(0, 3510);
        }
    });
</script>


<!-- второй рекламный блок: 300x250 или 320x50, с адалтом -->
<div class="octobird-block" 
    data-site-id="3510" 
    data-ad-number="1" 
    data-ad-size="300x250,320x50"
    data-ad-subs="1"
    data-ad-adult="1"></div>
<script>
    (adsoctobird = window.adsoctobird|| []).push({
        'no_ads_callback': function(blockId) {
            show_ads(0, 3510);
        }
    });
</script>

Чтобы включать/выключать адалт через код, он должен быть включен по умолчанию в настройках сайта

can_show_callback Решает, можно показать рекламу или нет. Должен возвращать true/false

data-ad-subs Включает/выключает подписки

@nokimaro
Copy link

nokimaro commented Jun 1, 2016

Получаю ошибку при использовании данного примера.
На странице 2 блока с рекламой.
Первый без указания размеров баннеров и с data-ad-adult=0, второй с адалтом и с размерами баннеров.

http://show.octobird.com/?version=300&format=js&site_id=3508&sid=3508&blocks=no_ads_callback%3A1%2Cn%3Aobbl61974_1%2Cad_number%3A1%2Cad_adult%3A0%2Ctp%3Aall%3Bno_ads_callback%3A1%2Cn%3Aobbl8801_2%2Cad_size%3A300x250%2C320x50%2Cad_number%3A1%2Cad_adult%3A1%2Ctp%3Aall

<!--
Error
Code: 69
Desc: Parameter "blocks" has invalid value 'no_ads_callback:1,n:obbl61974_1,ad_number:1,ad_adult:0,tp:all;no_ads_callback:1,n:obbl8801_2,ad_size:300x250,320x50,ad_number:1,ad_adult:1,tp:all'
-->
<!-- fe34er3 -->

Первый

var div_0 = document.createElement('div');
    div_0.className = "octobird-block";
    div_0.setAttribute('data-site-id', '3508');
    div_0.setAttribute('data-tp', 'all');
    div_0.setAttribute('data-ad-number', '1');
    div_0.setAttribute('data-ad-adult', '0');

Второй

var div_0 = document.createElement('div');
    div_0.className = "octobird-block";
    div_0.setAttribute('data-site-id', '3508');
    div_0.setAttribute('data-tp', 'all');
    div_0.setAttribute('data-ad-number', '1');
    div_0.setAttribute('data-ad-size', '300x250,320x50');
    div_0.setAttribute('data-ad-adult', '1');

Проблема соотв-но в разделителе , которая попадая в параметр blocks ломает десериализацию, потому что при 300x250,320x50 получаете 320x50 как часть пары ключ:значение

@marliotto
Copy link
Author

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

@nokimaro
Copy link

nokimaro commented Jul 18, 2016

Как воспроизвести баг - в приватном режиме браузера открыть сайт http://picsmo.ru
Вверху будет 2 рекламных блока (в нашем случае octobird и mobiads). Второй блок подгружается потому что вызывается no_ads_callback хотя реклама octo есть.

Проблема возникает только при первом заходе пользователя на сайт где стоит код octobird (пустая кука "oid") и используется no_ads_callback

Доп инфа

Получаю такой ответ от show.octobird.com

try {
    _octobirdResponseProcess({
        "status": "success",
        "blocks": {
            "obbl15124_1": {
                "html": "<img width=\"50\" height=\"10\" src=\"http:\/\/show.octobird.com\/i\/rekl_picsmo.png\" alt=\"\" style=\"display: block; margin: 3px; padding: 0; vertical-align: top; border: none;\" \/><div align=\"center\" style=\"margin: 0 auto 5px;\"><table style=\"background-color: #FFF;margin: 2px auto;max-height: 80px;max-width: 468px;min-height: 36px;min-width: 216px;border: 1px solid #D8D9DA;cursor: pointer;border-collapse: collapse;width: 100%;\" onclick=\"window.open('http:\/\/go.octobird.com\/?v=578d08b39a91c73f6e8cbb9c&amp;s=3507&amp;b=42761','_blank');\">\n<tr>\n<td style=\"text-align:center;padding:0;border:0;width:80px;\">\n<img src=\"http:\/\/i.octobird.com\/6624\/13595\/5641f1df80a51.jpeg\" style=\"vertical-align:middle; width:80px;\" \/>\n<\/td>\n<td style=\"padding: 2px 6px;vertical-align: middle;font-size: 14px;line-height: normal;color: #464D51;font-family: Arial;text-align: left;text-decoration: none;border: 0;\">\n<strong style=\"display: block;font-size: 16px;font-weight: bold;color: #464D51;\">\u0425\u043e\u0447\u0435\u0448\u044c \u0438\u043c\u0435\u0442\u044c \u0427\u041b\u0415\u041d 25 \u0421\u041c?<\/strong>\n\u0414\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434! \u0427\u043b\u0435\u043d \u0440\u0430\u0441\u0442\u0435\u0442 \u043f\u043e 3,5 \u0441\u043c \u0432 \u043d\u0435\u0434\u0435\u043b\u044e...<\/td>\n<\/tr>\n<\/table>\n<img src=\"http:\/\/show.octobird.com\/beacon.php?v=578d08b39a91c73f6e8cbb9c&amp;s=3507&amp;b=42761\" style=\"position: absolute; left: -1000px; width: 1px; height: 1px;\" alt=\"\" \/><\/div>\r\n<img src=\"http:\/\/s.uuidksinc.net\/match\/53\/NoIYLLO6D6BUX2FZcexo\" alt=\"\" style=\"position: absolute; left: -1000px; width: 1px; height: 1px;\" \/>",
                "invisible": true
            },
            "obbl91240_2": {
                "html": "<img width=\"50\" height=\"10\" src=\"http:\/\/show.octobird.com\/i\/rekl_picsmo.png\" alt=\"\" style=\"display: block; margin: 3px; padding: 0; vertical-align: top; border: none;\" \/><div align=\"center\" style=\"margin: 0 auto 5px;\"><a id=\"octo-b-393107838\" href=\"http:\/\/go.octobird.com\/?v=578d08b39a91c73f6e8cbb9e&amp;s=3507&amp;b=51984\" style=\"display: block; padding: 0; margin: 0;\" target=\"_blank\"><img src=\"http:\/\/i.octobird.com\/2989\/15840\/577514c7c0f78.gif\" alt=\"\" style=\"max-width: 100%; border: 0; vertical-align: bottom\" \/><\/a>\n<img src=\"http:\/\/show.octobird.com\/beacon.php?v=578d08b39a91c73f6e8cbb9e&amp;s=3507&amp;b=51984\" style=\"position: absolute; left: -1000px; width: 1px; height: 1px;\" alt=\"\" \/><\/div>"
            }
        }
    });
} catch (e) {
    var script = document.createElement('script');
    script.src = 'http://show.octobird.com/jslog.php?m=' + encodeURIComponent(e.message) + '&stack=' + encodeURIComponent(e.stack);
    document.body.appendChild(script);
}

HTTP-запрос

Request URL:http://show.octobird.com/?version=300&format=js&site_id=3507&sid=3507&blocks=no_ads_callback%3A1%2Cn%3Aobbl15124_1%2Cad_adult%3A1%2Cnb%3A1%2Ctp%3Aall%3Bno_ads_callback%3A1%2Cn%3Aobbl91240_2%2Cad_size%3A300x250%2C320x50%2Cad_adult%3A1%2Cnb%3A1%2Ctp%3Aall
Request Method:GET
Status Code:200 OK
Remote Address:176.9.121.102:80

Response Headers
HTTP/1.1 200 OK
Server: nginx/1.6.2
Content-Type: text/javascript
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.4.33-1~dotdeb.1
Cache-Control: no-cache
Date: Mon, 18 Jul 2016 16:49:55 GMT
Set-Cookie: oid=NoIYLLO6D6BUX2FZcexo; expires=Tue, 19-Jan-2038 03:14:07 GMT; path=/; domain=.octobird.com; httponly

Request Headers
GET /?version=300&format=js&site_id=3507&sid=3507&blocks=no_ads_callback%3A1%2Cn%3Aobbl15124_1%2Cad_adult%3A1%2Cnb%3A1%2Ctp%3Aall%3Bno_ads_callback%3A1%2Cn%3Aobbl91240_2%2Cad_size%3A300x250%2C320x50%2Cad_adult%3A1%2Cnb%3A1%2Ctp%3Aall HTTP/1.1
Host: show.octobird.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36
Accept: */*
DNT: 1
Referer: http://picsmo.ru/
Accept-Encoding: gzip, deflate, lzma, sdch
Accept-Language: ru,en-US;q=0.8,en;q=0.6

Query String Parameters
version=300&format=js&site_id=3507&sid=3507&blocks=no_ads_callback%3A1%2Cn%3Aobbl15124_1%2Cad_adult%3A1%2Cnb%3A1%2Ctp%3Aall%3Bno_ads_callback%3A1%2Cn%3Aobbl91240_2%2Cad_size%3A300x250%2C320x50%2Cad_adult%3A1%2Cnb%3A1%2Ctp%3Aall

Проблема похоже в параметре "invisible": true
кусок из ob.js где видно что при invisible: true вызывается fireNoAdsCallback() и больше ничего.

        case "success":
            for (var t in r.blocks) {
                var s = r.blocks[t];
                if (s.html === "" || s.html === null ) {
                    l.fireNoAdsCallback(t)
                } else {
                    if (l.canShow(t, s)) {
                        m.getElementById(t).innerHTML = s.html;
                        if (s.invisible) {
                            l.fireNoAdsCallback(t)    /// <---------------------
                        }
                    } else {
                        l.fireNoAdsCallback(t)
                    }
                }
            }
            d();
            break;

В итоге мы на своей стороне ловим этот NoAdsCallback() и встраиваем другую рекламу, хотя ваша реклама показывается и invisible: true её как минимум не удаляет из DOM и не скрывает.

В итоге видим 2 рекламных блока на одной позиции octo + другая сетка.
octocallb

@nokimaro
Copy link

nokimaro commented Aug 2, 2016

Забыли убрать отладочную инфу из ответа

вот этот кусок "1" которая просто текстом идёт на страницу в конце рекламного блока

<img src=\"http:\/\/s.uuidksinc.net\/match\/53\/50aOWptcsgLWivw9BijO\" alt=\"\" style=\"position: absolute; left: -1000px; width: 1px; height: 1px;\" \/>
\r\n1",
                "invisible": true
            },
try {
    _octobirdResponseProcess({
        "status": "success",
        "blocks": {
            "obbl22467_1": {
                "html": "<div align=\"center\" style=\"margin: 0 auto 5px;\"><table style=\"background-color: #FFF;margin: 2px auto;max-height: 80px;max-width: 468px;min-height: 36px;min-width: 216px;border: 1px solid #D8D9DA;cursor: pointer;border-collapse: collapse;width: 100%;\" onclick=\"window.open('http:\/\/go.octobird.com\/?v=57a071fe9a91c7a96d92ed5f&amp;s=3507&amp;b=52846','_blank');\">\n<tr>\n<td style=\"text-align:center;padding:0;border:0;width:80px;\">\n<img src=\"http:\/\/i.octobird.com\/5463\/16004\/579c5e95a0288.jpeg\" style=\"vertical-align:middle; width:80px;\" \/>\n<\/td>\n<td style=\"padding: 2px 6px;vertical-align: middle;font-size: 14px;line-height: normal;color: #464D51;font-family: Arial;text-align: left;text-decoration: none;border: 0;\">\n<strong style=\"display: block;font-size: 16px;font-weight: bold;color: #464D51;\">\u0416\u0435\u043d\u0441\u043a\u0438\u0439 \u0432\u043e\u0437\u0431\u0443\u0434\u0438\u0442\u0435\u043b\u044c \u0432 \u043a\u0430\u043f\u043b\u044f\u0445!<\/strong>\n\u042d\u0442\u043e\u0442 \u0432\u043e\u0437\u0431\u0443\u0434\u0438\u0442\u0435\u043b\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430 5 \u043c\u0438\u043d\u0443\u0442 \u0438 \u043d\u0430 3 \u0447\u0430\u0441\u0430!<\/td>\n<\/tr>\n<\/table>\n<img src=\"http:\/\/show.octobird.com\/beacon.php?v=57a071fe9a91c7a96d92ed5f&amp;s=3507&amp;b=52846\" style=\"position: absolute; left: -1000px; width: 1px; height: 1px;\" alt=\"\" \/><\/div>\r\n<img src=\"http:\/\/s.uuidksinc.net\/match\/53\/50aOWptcsgLWivw9BijO\" alt=\"\" style=\"position: absolute; left: -1000px; width: 1px; height: 1px;\" \/>\r\n1",
                "invisible": true
            },
            "obbl55401_2": {
                "html": "<img width=\"50\" height=\"10\" src=\"http:\/\/show.octobird.com\/i\/rekl_picsmo.png\" alt=\"\" style=\"display: block; margin: 3px; padding: 0; vertical-align: top; border: none;\" \/><div align=\"center\" style=\"margin: 0 auto 5px;\"><table style=\"background-color: #FFF;margin: 2px auto;max-height: 80px;max-width: 468px;min-height: 36px;min-width: 216px;border: 1px solid #D8D9DA;cursor: pointer;border-collapse: collapse;width: 100%;\" onclick=\"window.open('http:\/\/go.octobird.com\/?v=57a071fe9a91c7a96d92ed61&amp;s=3507&amp;b=52845','_blank');\">\n<tr>\n<td style=\"text-align:center;padding:0;border:0;width:80px;\">\n<img src=\"http:\/\/i.octobird.com\/5463\/16004\/579c5e4b96ec7.jpeg\" style=\"vertical-align:middle; width:80px;\" \/>\n<\/td>\n<td style=\"padding: 2px 6px;vertical-align: middle;font-size: 14px;line-height: normal;color: #464D51;font-family: Arial;text-align: left;text-decoration: none;border: 0;\">\n<strong style=\"display: block;font-size: 16px;font-weight: bold;color: #464D51;\">\u0421\u0438\u043b\u044c\u043d\u044b\u0439 \u0436\u0435\u043d\u0441\u043a\u0438\u0439 \u0432\u043e\u0437\u0431\u0443\u0434\u0438\u0442\u0435\u043b\u044c<\/strong>\n\u042d\u0442\u043e\u0442 \u0432\u043e\u0437\u0431\u0443\u0434\u0438\u0442\u0435\u043b\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430 5 \u043c\u0438\u043d\u0443\u0442 \u0438 \u043d\u0430 3 \u0447\u0430\u0441\u0430<\/td>\n<\/tr>\n<\/table>\n<img src=\"http:\/\/show.octobird.com\/beacon.php?v=57a071fe9a91c7a96d92ed61&amp;s=3507&amp;b=52845\" style=\"position: absolute; left: -1000px; width: 1px; height: 1px;\" alt=\"\" \/><\/div>"
            }
        }
    });
} catch (e) {
    var script = document.createElement('script');
    script.src = 'http://show.octobird.com/jslog.php?m=' + encodeURIComponent(e.message) + '&stack=' + encodeURIComponent(e.stack);
    document.body.appendChild(script);
}

@nokimaro
Copy link

nokimaro commented Aug 2, 2016

Так же касательно моих предыдущих комментов, вижу что баг так и не исправлен и при invisible: true судя по коду из http://show.octobird.com/ob.js по прежнему вызывается fireNoAdsCallback но сам параметр invisible больше ни на что не влияет.
octo

@marliotto
Copy link
Author

Спасибо за подробное исследование!
Ошибки исправил.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment