2016-07-12 10 views
0

Google AdWordsキャンペーンでは、商品の在庫を確認するスクリプトを使用しています。商品が在庫切れの場合、キャンパーを一時停止します。 teスクリプトを実行した後、次のエラーが発生します。Google AdWords在庫切れスクリプト

次のエラーが表示されます。TypeError:nullの "indexOf"のメソッドを呼び出すことはできません。 (ライン54)。

エラーの一部は次のとおりです。

if(STRIP_QUERY_STRING) { 
 
    if(url.indexOf('?')>=0) { 
 
     url = url.split('?')[0]; 
 
    } 
 
    } 
 
    if(url.indexOf('{') >= 0) { 
 
    //Let's remove the value track parameters 
 
    url = url.replace(/\{[0-9a-zA-Z]+\}/g,''); 
 
    } 
 
    return url; 
 
}

いっぱいスクリプトは次のとおりです。

あなたが使用

/************************************ 
 
Script aan/uit advertenties 
 
***********************************/ 
 
var URL_LEVEL = 'Ad'; // or Keyword 
 
var ONLY_ACTIVE = false; // set to false for all ads or keywords 
 
var CAMPAIGN_LABEL = 'automatisch'; // set this if you want to only check campaigns with this label 
 
var STRIP_QUERY_STRING = true; // set this to false if the stuff that comes after the question mark is important 
 
var WRAPPED_URLS = false; // set this to true if you use a 3rd party like Marin or Kenshoo for managing you account 
 
// This is the specific text to search for 
 
// on the page that indicates the item 
 
// is out of stock. 
 
var OUT_OF_STOCK_TEXT = 'adwords-niet-op-voorraad'; 
 
    
 
function main() { 
 
    var alreadyCheckedUrls = {}; 
 
    var iter = buildSelector().get(); 
 
    while(iter.hasNext()) { 
 
    var entity = iter.next(); 
 
    var url = cleanUrl(entity.getDestinationUrl()); 
 
    if(alreadyCheckedUrls[url]) { 
 
     if(alreadyCheckedUrls[url] === 'out of stock') { 
 
     entity.pause(); 
 
     } else { 
 
     entity.enable(); 
 
     } 
 
    } else { 
 
     var htmlCode; 
 
     try { 
 
     htmlCode = UrlFetchApp.fetch(url).getContentText(); 
 
     } catch(e) { 
 
     Logger.log('There was an issue checking:'+url+', Skipping.'); 
 
     continue; 
 
     } 
 
     if(htmlCode.indexOf(OUT_OF_STOCK_TEXT) >= 0) { 
 
     alreadyCheckedUrls[url] = 'out of stock'; 
 
     entity.pause(); 
 
     } else { 
 
     alreadyCheckedUrls[url] = 'in stock'; 
 
     entity.enable(); 
 
     } 
 
    } 
 
    Logger.log('Url: '+url+' is '+alreadyCheckedUrls[url]); 
 
    } 
 
} 
 
    
 
function cleanUrl(url) { 
 
    if(WRAPPED_URLS) { 
 
    url = url.substr(url.lastIndexOf('https')); 
 
    if(decodeURIComponent(url) !== url) { 
 
     url = decodeURIComponent(url); 
 
    } 
 
    } 
 
    if(STRIP_QUERY_STRING) { 
 
    if(url.indexOf('?')>=0) { 
 
     url = url.split('?')[0]; 
 
    } 
 
    } 
 
    if(url.indexOf('{') >= 0) { 
 
    //Let's remove the value track parameters 
 
    url = url.replace(/\{[0-9a-zA-Z]+\}/g,''); 
 
    } 
 
    return url; 
 
} 
 
    
 
function buildSelector() { 
 
    var selector = (URL_LEVEL === 'Ad') ? AdWordsApp.ads() : AdWordsApp.keywords(); 
 
    selector = selector.withCondition('CampaignStatus != DELETED').withCondition('AdGroupStatus != DELETED'); 
 
    if(ONLY_ACTIVE) { 
 
    selector = selector.withCondition('CampaignStatus = ENABLED').withCondition('Status = ENABLED'); 
 
    if(URL_LEVEL !== 'Ad') { 
 
     selector = selector.withCondition('AdGroupStatus = ENABLED'); 
 
    } 
 
    } 
 
    if(CAMPAIGN_LABEL) { 
 
    var label = AdWordsApp.labels().withCondition("Name = '"+CAMPAIGN_LABEL+"'").get().next(); 
 
    var campIter = label.campaigns().get(); 
 
    var campaignNames = []; 
 
    while(campIter.hasNext()) { 
 
     campaignNames.push(campIter.next().getName()); 
 
    } 
 
    selector = selector.withCondition("CampaignName IN ['"+campaignNames.join("','")+"']"); 
 
    } 
 
    return selector; 
 
    }

答えて

0

getDestinationUrl()を使用して広告の/キーワードのURLを取得していますが、約1年後にAdWordsでリンク先URLが非推奨になりました。そのため、このメソッドはnullを返すため、nullと表示されたエラーの原因となるのはcleanUrl()です。

スクリプトを動作させるためには、getDestinationUrl()の代わりに.urls().getFinalUrl()を使用する必要があります。

+0

このソリューションに感謝します。約1年後に廃止されましたか?それは私にちょっとばかげた気分にさせる。私にとってラッキーなのは、私はちょうど昨日これを調べるように求められました。とにかく、ありがとう。このような機能のGoogleライブラリへのリンクはありますか?私は良いものを見つけることができません。 – Tristan

+0

ええ、元のリンク先URLは、2015年7月などに最終URLに移行されたと思います。ドキュメントについては、こちらをご覧ください:https://developers.google.com/adwords/scripts/docs/reference/adwordsapp/adwordsapp_ad – dorian

関連する問題