2017-02-16 4 views
0

XML(Google Merchant XML)のAVAILABILITYフィールドに基づいて広告グループを一時停止するスクリプトを作成しようとしています。スクリプトとXMLフィードを使用してGoogle Adwordsの広告グループを一時停止する

私は商用のXMLを持っており、XMLのID(IDは広告グループ名に使用されている)とAVAILABILITY(在庫なし、プレオーダー)がキャンペーンの広告グループを一時停止するのに使用します。

キャンペーンの代わりに広告グループを使用してI had found hereの例を修正しようとしましたが、スクリプトがXMLを読み込もうとしたときにエラーが発生していると思います。 "TypeError例外:メソッドを呼び出すことはできません "私はエラーが表示されるライン怒鳴るラインで のgetValue"。ヌルのは、(ライン16)"

var id = entries[i].getChild('g:id').getValue(); 
var availability = entries[i].getChild('g:availability').getValue(); 

私のXMLは、このようなものです:

<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0"> 
    <channel> 
     <item> 
      <title> 
       <![CDATA[ Far Cry 4: Overrun ]]> 
      </title> 
      <link>https://www.nuuvem.com/item/far-cry-4-overrun</link> 
      <description> 
       <![CDATA[ 
Neste novo conteúdo para Far Cry 4, enquanto a guerra sem trégua por Kyrat continua, os jogadores assumirão o papel dos Rakshasa e do Caminho Dourado para manter locais que dão pontos no mapa da batalha. 
]]> 
      </description> 
      <g:availability>in stock</g:availability> 
      <g:price currency="BRL">8.99</g:price> 
      <g:image_link> http://dskhvldhwok3h.cloudfront.net/image/upload/t_boxshot_big/v1/products/557dbcb269702d0a9c490801/boxshots/ynhjodwlnmur0crkiaxp.jpg </g:image_link> 
      <g:product_type> 
       <![CDATA[ Ação ]]> 
      </g:product_type> 
      <g:google_product_category>Software > Video Game Software > Computer Games</g:google_product_category> 
      <g:condition>new</g:condition> 
      <g:identifier_exists>FALSE</g:identifier_exists> 
      <g:id>2668</g:id> 
     </item> 

私のスクリプトは次のようになります。

function main() { 
    // Load an XML file: 
    var xmlURL = "XML URL HERE"; 
    var xmlFile = UrlFetchApp.fetch(xmlURL); 
    // Parse the XML file: 
    var document = XmlService.parse(xmlFile); 
    var root = document.getRootElement(); 
    // Go through all children of <deepdive_pages>: 
    var entries = document.getRootElement().getChildren(); 
    for (var i = 0; i < entries.length; i++) { 
     //for (var i = 0; i < 10; i++) { 
     var id = entries[i].getChild('g:id').getValue(); 
     var availability = entries[i].getChild('g:availability').getValue(); 
     // If company_root_id has 0 jobs 
     if (availability == "out of stock") { 
      var adGroupIterator = AdWordsApp.adGroups().withCondition('Name CONTAINS "| ' + id + ' |"').get(); // Find all campaigns with the company name 
      while (adGroupIterator.hasNext()) { // Go over all campaings with company id in the name 
       var adgroup = adGroupIterator.next(); 
       if (adgroup.isEnabled()) { // If campaign is enables, pause it 
        adgroup.pause(); 
        Logger.log("adgroup " + adgroup.getName() + " was paused."); 
       } 
      } 
     } 
     // If company_root_id has MORE than 0 jobs 
     else { 
      var adGroupIterator = AdWordsApp.adGroups().withCondition('Name CONTAINS "| ' + id + ' |"').get(); // Find all campaigns with the company name 
      while (adGroupIterator.hasNext()) { // Go over all campaings with company id in the name 
       var adgroup = adGroupIterator.next(); 
       if (adgroup.isPaused()) { // If campaign is paused, enable it 
        adgroup.enable(); 
        Logger.log("adgroup " + adgroup.getName() + " was enabled."); 
       } 
      } 
     } // End If Else 
    } 
} 

任意の助けに感謝を!この記事でCALINの助けを借りて

答えて

0

https://www.en.advertisercommunity.com/t5/Advanced-Features/Script-to-pause-Adggroups-based-in-information-from-a-Merchant/m-p/1024590#

私は私の問題を解決しました。

正しくXMLを読むために、私が使用:

// Load an XML file: 
var xmlURL = "XML_MERCHANT_URL_HERE"; 
var xmlFile = UrlFetchApp.fetch(xmlURL); 

// Parse the XML file: 
var document = XmlService.parse(xmlFile); 
var ns = XmlService.getNamespace("http://base.google.com/ns/1.0"); 
var rss = document.getRootElement().getChildren(); //root element is <rss>; it's children are actually only one, <channel> 
var entries = rss[0].getChildren('item'); //getting all 'item' children of the first rss element, <channel> 

// Go through all children of <deepdive_pages>: 
Logger.log(entries.length); 

for (var i = 0; i < entries.length; i++) { 

var id = entries[i].getChild('id',ns).getText(); 

var availability = entries[i].getChild('availability',ns).getText(); 

//Logger.log("ID: "+id+", Availability: "+availability); 

私はXML名前空間を宣言did'ntと私はgetchildを使用していたが、この場合には、私はgetChildrenを使用する必要があります前に。

関連する問題