UPDATE 2016-01-26:为响应一些常见问题,此脚本已更新为包含一些增强功能。请参阅v1.2的更改日志说明。
作为我的后续行动 有关黑色星期五/网络星期一酷脚本的问题,今天,我整理了一个脚本来遍历您的网址,并检查网站上该商品是否缺货。如果是这样,我们将暂停广告组。
该脚本具有与我相同的一些元素 有关检查帐户中断开链接的脚本,但实际上会提取每个页面的html源,并搜索可配置的字符串,让其知道何时缺货。
让我们来看一个例子。我喜欢一些我发现的古怪礼物 ModCloth.com。但是,像任何在线商店一样,有些商品也无货。这是我在测试此脚本时发现的。
为了使该脚本正常工作,我需要找出页面缺货时的区别。如果我右键单击并查看页面源,然后搜索作品“库存”,则可以看到使用它的几个不同地方。其中之一是以下内容,内容为“ in_stock”:false。
这看起来很有希望。我检查了一个库存项目,并且确定该页面上确实有“ in_stock”:true。
好了,现在我知道在代码中需要使用什么文本来填充OUT_OF_STOCK_TEXT变量。现在每个站点都将有所不同,因此我有一个简单的脚本,该脚本使用与可用于测试的完整脚本相同的url逻辑。
一旦您在着陆页的源中找到一些HTML文本来标识某件商品是否缺货,那么最好使用完整的脚本。脚本中还有一些其他选项,可让您启用或禁用脚本中的各种url操作。请记住,这只会暂停链接到页面且缺货的广告或关键字。
谢谢,
拉斯
2013年10月30日,星期三
2013年3月30日,星期六
根据您的棒球队的日程安排自动化广告
我知道现在每个人都将注意力集中在疯狂三月,但是棒球赛季的开幕日指日可待。我想知道是否可以根据您当地的MLB团队的时间表启用和禁用特定广告。
事实证明,美国职业棒球大联盟以易于解析的CSV格式提供了每个团队的完整时间表。您需要做的就是在Google中搜索“ 可下载的时间表”,然后找到以“ downloadable.jsp”结尾的页面。看起来像这样:
您需要的链接在上图中被圈出。您可以从网址中看到以下代码中的team_id值。而且,如果右键单击并下载该.csv文件,您还将能够看到用于home_field的值。在下面的示例中,我使用了家乡的小熊队和白袜队,但是您可以使用任何想要的球队。
脚本本身将运行并为您的团队寻找主场比赛。如果团队今天在比赛并且是主场比赛,它将启用所有在TEAM_INFO中配置的带有标签的广告。如果团队今天不参加主场比赛,它将暂停这些相同的广告。
在下面的示例中,我仅使用了csv文件中的一部分数据。也可能仅在实际游戏中启用广告,或者在所有游戏日中启用广告,而不仅仅是家用游戏。
我鼓励您尝试使用数据,看看可以做什么。如果发现有用的东西,请发表评论。
谢谢,
拉斯
事实证明,美国职业棒球大联盟以易于解析的CSV格式提供了每个团队的完整时间表。您需要做的就是在Google中搜索“
您需要的链接在上图中被圈出。您可以从网址中看到以下代码中的team_id值。而且,如果右键单击并下载该.csv文件,您还将能够看到用于home_field的值。在下面的示例中,我使用了家乡的小熊队和白袜队,但是您可以使用任何想要的球队。
脚本本身将运行并为您的团队寻找主场比赛。如果团队今天在比赛并且是主场比赛,它将启用所有在TEAM_INFO中配置的带有标签的广告。如果团队今天不参加主场比赛,它将暂停这些相同的广告。
在下面的示例中,我仅使用了csv文件中的一部分数据。也可能仅在实际游戏中启用广告,或者在所有游戏日中启用广告,而不仅仅是家用游戏。
我鼓励您尝试使用数据,看看可以做什么。如果发现有用的东西,请发表评论。
谢谢,
拉斯
//----------------------------------- // Enable/Disable Ads Based on the MLB Schedule // Created By: 拉斯 Savage // FreeAdWordsScripts.com //----------------------------------- function main() { var TEAM_INFO = [ { team_id : 112, home_field : 'Wrigley Field', 标签 : 'cubs' }, // Cubs { team_id : 145, home_field : 'U.S. Cellular Field', 标签 : 'whitesox' } // White Sox ]; //hopefully you've already 创造d and tagged some 广告 with these 标签 //but just in case... 创造LabelsIfNeeded(TEAM_INFO); var SEASON = (new Date()).getFullYear(); var is_home = false, is_game_day = false; for(var t in TEAM_INFO) { var team = TEAM_INFO[t]; var url = "http://mlb.mlb.com/soa/ical/schedule.csv?team_id="+team.team_id+"&season="+SEASON; var html = UrlFetchApp.fetch(url).getContentText(); var date_list = html.split("\r\n"); for(var i in date_list) { if(i == 0) {continue;} var [start_date,start_time,start_time_et, subject,location,description, end_date,end_date_et,end_time,end_time_et] = date_list[i].split(","); var today = new Date(); var game_day = new Date(); game_day.setFullYear(SEASON,parseInt(start_date.split("/")[0])-1,parseInt(start_date.split("/")[1])); is_home = (location == team.home_field); is_game_day = (diffDays(game_day,today) == 0); if(is_home && is_game_day) { enableBaseballAds(team.label); break; } } if(!(is_home && is_game_day)) { disableBaseballAds(team.label); } } } function enableBaseballAds(label) { Logger.log("Enabling all 广告 with the "+label+" 标签."); var 广告 = AdWordsApp.ads().withCondition("LabelNames CONTAINS_ALL ['"+label+"']").get(); while(ads.hasNext()) { 广告.next().enable(); } } function disableBaseballAds(label) { Logger.log("Disabling all 广告 with the "+label+" 标签."); var 广告 = AdWordsApp.ads().withCondition("LabelNames CONTAINS_ALL ['"+label+"']").get(); while(ads.hasNext()) { 广告.next().pause(); } } function 创造LabelsIfNeeded(team_info) { var 标签_iter = AdWordsApp.labels().get(); var 标签_list = []; while(label_iter.hasNext()) { 标签_list.push(label_iter.next().getName()); } for(var i in team_info) { if(label_list.indexOf(team_info[i].label) == -1) { AdWordsApp.createLabel(team_info[i].label); 标签_list.push(team_info[i].label); } } } //A helper function to compare 日期. //Copied from: http://goo.gl/uW48a function diffDays(firstDate,secondDate) { var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds return Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay))); }
2013年3月10日,星期日
根据机场延误管理广告
如今,互联网上有大量的API。这些中的任何一个都可以合并到您的AdWords脚本中,以自动化一些帐户管理。
以下脚本使用 FAA.gov提供的机场状态服务 在主要机场出现延误时启用和暂停广告。这对于机场附近可能从航班延误中受益的任何企业(例如餐厅,酒吧或酒店)很有用。您的广告可能会说:
您可以从顶部的列表中添加或删除机场代码。您需要做的只是用[airport_code] _delay标签(“ ORD_delay”,“ ATL_delay”)标记广告。
您还可以使用其他哪些动态数据来优化广告?电影时间?体育游戏?在下面的评论中让我知道,然后我会提出我的建议。
谢谢,
拉斯
以下脚本使用 FAA.gov提供的机场状态服务 在主要机场出现延误时启用和暂停广告。这对于机场附近可能从航班延误中受益的任何企业(例如餐厅,酒吧或酒店)很有用。您的广告可能会说:

您可以从顶部的列表中添加或删除机场代码。您需要做的只是用[airport_code] _delay标签(“ ORD_delay”,“ ATL_delay”)标记广告。
您还可以使用其他哪些动态数据来优化广告?电影时间?体育游戏?在下面的评论中让我知道,然后我会提出我的建议。
谢谢,
拉斯
/********************************************* * Pause/Enable Ads Based On Airport Delays * Version 1.1 * ChangeLog v1.1 * - Added ability to completely 暂停 non-delay 广告 * Created By: 拉斯 Savage * FreeAdWordsScripts.com *********************************************/ // For this to work, you need to 广告 d a 标签 to all // the 广告 for each 飞机场. For example, PIT_normal // or SFO_normal var PAUSE_NORMAL_ADS_DURING_DELAY = false; var DELAY_SUFFIX = '_delay'; //the suffix on the 标签 for delayed 广告 var NORMAL_SUFFIX = '_normal'; //the suffix on the 标签 for normal 广告 var AIR_CODES = ["ATL","ANC","AUS","BWI","BOS","CLT","MDW","ORD","CVG","CLE", "CMH","DFW","DEN","DTW","FLL","RSW","BDL","HNL","IAH","HOU", "IND","MCI","LAS","LAX","MEM","MIA","MSP","BNA","MSY","JFK", "LGA","EWR","OAK","ONT","MCO","PHL","PHX","PIT","PDX","RDU", "SMF","SLC","SAT","SAN","SFO","SJC","SNA","SEA","STL","TPA", "IAD","DCA"]; function main() { var faaUrl = "http://services.faa.gov/airport/status/"; var args = "?format=application/json"; for(var i in AIR_CODES) { try{ var resp = UrlFetchApp.fetch(faaUrl + AIR_CODES[i] + args); if( resp.getResponseCode() == 200 ) { var json = Utilities.jsonParse(resp.getContentText()); if(json.delay == "false") { Logger.log("No 延误 在 "+json.IATA+". Pausing delay 广告 if any are running."); turnOffDelayAds(json.IATA); if(PAUSE_NORMAL_ADS_DURING_DELAY) { turnOnNonDelayAds(json.IATA); } } else { Logger.log("Delays in "+json.IATA+" Reason: "+json.status.reason); Logger.log("Turning on delay 广告 if there are any."); turnOnDelayAds(json.IATA); if(PAUSE_NORMAL_ADS_DURING_DELAY) { turnOffNonDelayAds(json.IATA); } } } } catch(e) { Logger.log("Error: " + e.message); } } } function turnOffDelayAds(airportCode) { var 标签Name = 飞机场Code + DELAY_SUFFIX; var 广告 Iter = AdWordsApp.ads() .withCondition("LabelNames CONTAINS_ANY ['"+labelName+"']") .withCondition("CampaignStatus = ENABLED") .withCondition("AdGroupStatus = ENABLED") .withCondition("Status = ENABLED") .get(); while(adIter.hasNext()) { 广告 Iter.next().pause(); } } function turnOffNonDelayAds(airportCode) { var 标签Name = 飞机场Code + NORMAL_SUFFIX; var 广告 Iter = AdWordsApp.ads() .withCondition("LabelNames CONTAINS_ANY ['"+labelName+"']") .withCondition("CampaignStatus = ENABLED") .withCondition("AdGroupStatus = ENABLED") .withCondition("Status = ENABLED") .get(); while(adIter.hasNext()) { 广告 Iter.next().pause(); } } function turnOnDelayAds(airportCode) { var 标签Name = 飞机场Code + DELAY_SUFFIX; var 广告 Iter = AdWordsApp.ads() .withCondition("LabelNames CONTAINS_ANY ['"+labelName+"']") .withCondition("CampaignStatus = ENABLED") .withCondition("AdGroupStatus = ENABLED") .withCondition("Status = PAUSED") .get(); while(adIter.hasNext()) { 广告 Iter.next().enable(); } } function turnOnNonDelayAds(airportCode) { var 标签Name = 飞机场Code + NORMAL_SUFFIX; var 广告 Iter = AdWordsApp.ads() .withCondition("LabelNames CONTAINS_ANY ['"+labelName+"']") .withCondition("CampaignStatus = ENABLED") .withCondition("AdGroupStatus = ENABLED") .withCondition("Status = PAUSED") .get(); while(adIter.hasNext()) { 广告 Iter.next().enable(); } }
2012年11月26日,星期一
新年广告更新
这是我先前有关以下内容之一的同伴 更新新年的关键字. 您可以轻松浏览所有广告,并使用以下脚本在新的一年中全部更新它们。 它还会暂停旧广告,以确保您与客户保持联系。 如果您的广告严重依赖过时的流量,则应安排在每年的1月1日投放。
谢谢,
拉斯
谢谢,
拉斯
//----------------------------------- // Update Ads for 2012 // Created By: 拉斯 Savage // FreeAdWordsScripts.com //----------------------------------- function main() { var OLD_YEAR = "2011"; var NEW_YEAR = "2012"; //You probably shouldn't 更新 目标网址 unless you know what you are doing. var FIELDS_CONTAINING_YEAR = ["Headline","Description1", "Description2","DisplayUrl" /*,"DestinationUrl"*/ ]; for(i in FIELDS_CONTAINING_YEAR) { var field_iter = AdWordsApp.ads() .withCondition(FIELDS_CONTAINING_YEAR[i] + " CONTAINS " + OLD_YEAR) .withCondition("Status = ENABLED") .get(); _iterateThroughAds(field_iter); } //--------------- // Private Helper Functions //--------------- function _iterateThroughAds(ad_iter) { while (ad_iter.hasNext()) { var 广告 = 广告 _iter.next(); var ag = 广告 .getAdGroup(); _createNewAdFromOldAd(ag,ad); } } function _createNewAdFromOldAd(adgroup, old_ad) { //get the 更新d 广告 texts replacing all the old years with the 新年s var new_headline = old_ad.getHeadline().replace(OLD_YEAR,NEW_YEAR); var new_desc1 = old_ad.getDescription1().replace(OLD_YEAR,NEW_YEAR); var new_desc2 = old_ad.getDescription2().replace(OLD_YEAR,NEW_YEAR); var new_display_url = old_ad.getDisplayUrl().replace(OLD_YEAR,NEW_YEAR); var new_dest_url = old_ad.getDestinationUrl();/*.replace(OLD_YEAR,NEW_YEAR);*/ //now 创造 the new 广告 and 暂停 the old one. 广告群组.createTextAd(new_headline,new_desc1,new_desc2,new_display_url,new_dest_url); old_ad.pause(); } }
订阅:
帖子(原子)