0

複数のサイト用に DFP を設定しています。一連の広告申込情報があり、それぞれのクリエイティブについて、現在のクリックスルーはexample.com(自社の.comサイト) に行きますが、複数の TLD を実行しているため、クリックも必要です。それに応じて変更する URL を介して。たとえば、広告が に表示されている.jp場合、クリックスルーは に移動する必要があります.jp

DFP API リファレンスには、リンク先 URL を変更する機能があります: http://support.google.com/dfp_premium/bin/answer.py?hl=en&answer=1650154&expand=adslot_details#setClickUrl

しかし、クリックスルー URL を変更するには、現在の URL を知る必要もあります。例:に変更するにhttp://www.example.com/products/1は、DFPから取得する必要があります。adSlothttp://www.example.jp/products/1

Chrome Web JS コンソールを使用して試行錯誤しgetClickUrl()、クラスで関数を見つけましたadSlotが、次のように空の文字列を返し続けます。

googletag.defineSlot("/1234/Test_300x250", [300, 250], 'div-1').getClickUrl();
googletag.defineSlot("/1234/Test_300x250", [300, 250], 'div-1').addService(googletag.pubads()).getClickUrl();

誰でもこれを経験したことがありますか?

4

2 に答える 2

2

クリエイティブを制御できる場合は、カスタム変数を渡す方がはるかに簡単だと思います。setTargetingメソッドを使用して、カスタム変数を渡します。したがって、広告を表示するクライアント側のコードは次のようになります。

googletag.defineSlot("/1234/Test_300x250", [300, 250], 'div-1').setTargeting('region','jp');

次に、HTMLクリエイティブで、パターンマクロを使用してクリックスルーURLの一部を置き換えます。

<a href="http://www.example.%%PATTERN:region%%">
<img src="http://www.example.%%PATTERN:region%%/image.jpeg">
</a>

また、DFPは、マクロをsetTargetingを介して渡した値に置き換えます。

于 2012-10-02T20:44:31.957 に答える
0

これを行うための非常に簡単な方法は見つかりませんでしたが、可能です。

基本的に、DFP の内部関数をオーバーライドして、iframe の DOM にアクセスすることで、広告のコンテンツ (および URL) を取得できます。

広告の URL を警告する例を次に示します (これは chrome でのみテストしたので、複数のブラウザーで動作させるには微調整が必​​要になる場合があります)。

<html>
<head>
    <title>DFP test</title>

    <script type='text/javascript'>
        var googletag = googletag || {};
        googletag.cmd = googletag.cmd || [];
        (function() {
            var gads = document.createElement('script');
            gads.async = true;
            gads.type = 'text/javascript';
            var useSSL = 'https:' == document.location.protocol;
            gads.src = (useSSL ? 'https:' : 'http:') +
            '//www.googletagservices.com/tag/js/gpt.js';
            var node = document.getElementsByTagName('script')[0];
            node.parentNode.insertBefore(gads, node);
        })();
    </script>


    <script type="text/javascript">
        googletag.cmd.push(function() {
            var slot1 = googletag.defineSlot('/12345678/Test_300x250', [300, 250], 'div-gpt-ad-1340819095858-0').addService(googletag.pubads());

            slot1.oldRenderEnded = slot1.renderEnded;
            slot1.renderEnded = function(){
                alert(document.getElementById('div-gpt-ad-1340819095858-0').getElementsByTagName('iframe')[0].contentWindow.document.getElementsByTagName('a')[0].href.replace(/^.*&adurl=/,''));
                slot1.oldRenderEnded();
            };

            googletag.pubads().enableSingleRequest();
            googletag.enableServices();
        });
    </script>

</head>
<body>

    <div id='div-gpt-ad-1340819095858-0' style='width:266px; height:115px;'>
        <script type='text/javascript'>
            googletag.cmd.push(function() {
                googletag.display('div-gpt-ad-1340819095858-0');
            });
        </script>
    </div>

</body>
</html>

jQueryを使用している場合は、次のようなものを使用する方が少し良いです:

$(adUnit).find('iframe:first').contents().find('a')

ご不明な点がございましたら、お知らせください。

于 2012-09-12T08:28:30.683 に答える