Obecnie 230 forumowiczów jest online
Obecnie 230 forumowiczów jest online
Dla pytań związanych z funkcjami remarketingu, strategii stawek, Edytor AdWords i skryptów AdWords.
Poprowadź mnie
star_border
Odpowiedz

Skrypty Adwords - błąd „illegal character”

Student ✭ ✭

chciałem przetestować skrypty dostępne na http://k2search.pl/skrypty-adwords-kontrola-stron/, dokładnie ten do generowania alertów w przypadku wystąpienia błędu 404. Niestety przy próbie przetestowania skryptu pojawia się błąd „illegal character”. 

Czy macie pomysł co może być przyczyną?

Odpowiedź eksperta 3verified_user
1 ZAAKCEPTOWANE ROZWIĄZANIE

Zaakceptowane rozwiązania
Zaakceptowane rozwiązanie.
Rozwiązanie
Zaakceptowane przez autora tematu: Łukasz M
lutego 2016

Dot.: Skrypty Adwords - błąd „illegal character”

Wschodząca Gwiazda
Pozamieniaj wszystkie cudzysłowie tego typu „ ” na " . Adaśko

Wyświetl rozwiązanie w oryginalnym poście

Zaakceptowane rozwiązanie.
Rozwiązanie
Zaakceptowane przez autora tematu: Łukasz M
lutego 2016

Dot.: Skrypty Adwords - błąd „illegal character”

Wschodząca Gwiazda
Pozamieniaj wszystkie cudzysłowie tego typu „ ” na " . Adaśko

Dot.: Skrypty Adwords - błąd „illegal character”

Wschodząca Gwiazda

Tam jest jeszcze jeden błąd. Musisz dodać tzw. klamrę zamykającą.

zamień 

if (UrlFetchApp.fetch(url, {muteHttpExceptions: true}).getResponseCode() == 404) output += url+"\n";

}

na

 

if (UrlFetchApp.fetch(url, {muteHttpExceptions: true}).getResponseCode() == 404) output += url+"\n";

}}

Pozdrawiam Adaśko

Dot.: Skrypty Adwords - błąd „illegal character”

Student ✭ ✭
z klamrą poradziłem sobie samemu. Pojawił się jednak kolejny błąd:

Attribute provided with no value: url (line 19)

Dot.: Skrypty Adwords - błąd „illegal character”

Wschodząca Gwiazda
Funcja ad.getDestinationUrl() została wycofana . Pokombinuj z tym https://goo.gl/ZCq95Z . Adaśko

Dot.: Skrypty Adwords - błąd „illegal character”

Wschodząca Gwiazda
Łukasz - tu masz też gotowy skrypt w bibliotece gotowych rozwiązań na stronach pomocy skryptów:
https://developers.google.com/adwords/scripts/docs/solutions/link-checker

Skrypt jest dużo świeższy i myślę, że wszystkie funkcje ma aktualne więc może z tym Ci szybciej pójdzie.
Tomasz Ciepłucha

Dot.: Skrypty Adwords - błąd „illegal character”

Najlepszy Współtwórca

Osobiście używam tego kodu...   pamiętam, że Paulina musiała mi podpowiedzieć, bo też miałem problemy z "

Po zapisaniu skryptu należy ustawić harmonogram na "co godzinę".

 

//-----------------------------------
// Find Broken Urls In Your Account
// Created By: Russ Savage
// FreeAdWordsScripts.com
//-----------------------------------
function main() {
  // You can add more if you want: http://goo.gl/VhIX
  var BAD_CODES = [404,500];
  var TO = ['Twój 1 mail'/*,'Twój 2 mail'*/];
  var SUBJECT = 'Nazwa raportu - warto tu wpisać nazwę kampanii by wiedzieć, czego dotyczy raport' + _getDateString();
  var HTTP_OPTIONS = {
    muteHttpExceptions:true
  };
    
  //Let's look at ads and keywords for urls
  var iters = [
    //For Ad Level Urls
    AdWordsApp.ads()
      .withCondition("Status = 'ENABLED'")
      .withCondition("AdGroupStatus = 'ENABLED'")
      .withCondition("CampaignStatus = 'ENABLED'")
      .get(),
    //For Keyword Level Urls
    AdWordsApp.keywords()
      .withCondition("Status = 'ENABLED'")
      .withCondition("DestinationUrl != ''")
      .withCondition("AdGroupStatus = 'ENABLED'")
      .withCondition("CampaignStatus = 'ENABLED'")
      .get()
    ];
   
  var already_checked = {};
  var bad_entities = [];
  for(var x in iters) {
    var iter = iters[x];
    while(iter.hasNext()) {
      var entity = iter.next();
      if(entity.getDestinationUrl() == null) { continue; }
      var url = entity.getDestinationUrl();
      if(url.indexOf('{') >= 0) {
        //Let's remove the value track parameters
        url = url.replace(/\{[0-9a-zA-Z]+\}/g,'');
      }
      if(already_checked[url]) { continue; }
      var response_code;
      try {
        Logger.log("Testing url: "+url);
        response_code = UrlFetchApp.fetch(url, HTTP_OPTIONS).getResponseCode();
      } catch(e) {
        //Something is wrong here, we should know about it.
        bad_entities.push({e : entity, code : -1});
      }
      if(BAD_CODES.indexOf(response_code) >= 0) {
        //This entity has an issue.  Save it for later.
        bad_entities.push({e : entity, code : response_code});
      }
      already_checked[url] = true;
    }
  }
  var column_names = ['Type','CampaignName','AdGroupName','Id','Headline/KeywordText','ResponseCode','DestUrl'];
  var attachment = column_names.join(",")+"\n";
  for(var i in bad_entities) {
    attachment += _formatResults(bad_entities[i],",");
  }
  if(bad_entities.length > 0) {
    var options = { attachments: [Utilities.newBlob(attachment, 'text/csv', 'bad_urls_'+_getDateString()+'.csv')] };
    var email_body = "There are " + bad_entities.length + " urls that are broken. See attachment for details.";
      
    for(var i in TO) {
      MailApp.sendEmail(TO[i], SUBJECT, email_body, options);
    }
  } 
}
  
//Formats a row of results separated by SEP
function _formatResults(entity,SEP) {
  var e = entity.e;
  if(typeof(e['getHeadline']) != "undefined") {
    //this is an ad entity
    return ["Ad",
            e.getCampaign().getName(),
            e.getAdGroup().getName(),
            e.getId(),
            e.getHeadline(),
            entity.code,
            e.getDestinationUrl()
           ].join(SEP)+"\n";
  } else {
    // and this is a keyword
    return ["Keyword",
            e.getCampaign().getName(),
            e.getAdGroup().getName(),
            e.getId(),
            e.getText(),
            entity.code,
            e.getDestinationUrl()
           ].join(SEP)+"\n";
  }
}
  
//Helper function to format todays date
function _getDateString() {
  return Utilities.formatDate((new Date()), AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd");
}

 

Dominik Myślak

Dot.: Skrypty Adwords - błąd „illegal character”

Wschodząca Gwiazda
Dominik - ten skrypt również używa funkcji getDestinatioURL, która ze względu na zmianę na ulepszone adresy URL może zwracać puste wartości jeśli ktoś dokonał aktualizacji.

Jeśli dalej używasz tego skryptu na kontach na których na których są ulepszone adresu URL skrypt nie działa tak, jak byś tego oczekiwał.

Musisz dokonać aktualizacji w skrypcie i zamiast:
getDestinationUrl()
użyć
urls().getFinalUrl()

Ale poza tym powyższy skrypt wymaga kilku innych zmian, gdyż po wprowadzeniu ulepszonych adresów URL w adresach nie są już używane parametry value track więc nie ma konieczności ich usuwania z adresów.

W związku z tym skorzystałbym z rozwiązania udostępnionego przez Google na stronach pomocy.
Tomasz Ciepłucha

Dot.: Skrypty Adwords - błąd „illegal character”

Najlepszy Współtwórca
Dzięki. Dobrze wiedzieć. Nie jestem programistą. Brak mi tej wiedzy.
Dominik Myślak

Dot.: Skrypty Adwords - błąd „illegal character”

Wschodząca Gwiazda
Ze skryptami to niestety jest tak, że trzeba śledzić wprowadzane zmiany i koniecznie przeglądać dzienniki.
Czasem gdy jakaś funkcja zostaje wycofana skrypt po prostu w ogóle przestaje działać i pojawiają się błędy, a niekiedy - tak jak w przypadku funkcji getDestinationURL() - skrypt może dalej działać, ale nic kompletnie nie robić i w takich przypadkach najtrudniej to wyłapać.
Aczkolwiek pewnie i ta funkcja zostanie niedługo całkowicie usunięta i wówczas tym, którzy jej jeszcze używają, skrypty zaczną produkować błędy w dzienniku.
Tomasz Ciepłucha

Dot.: Skrypty Adwords - błąd „illegal character”

Najlepszy Współtwórca
Tomasz a Ty z jakiego skryptu korzystasz do wyłapywania 404 i 500?
Dominik Myślak

Dot.: Skrypty Adwords - błąd „illegal character”

[ Edytowane ]
Wschodząca Gwiazda

Z własnego. Napisałem skrypt, który działa z poziomu MCK. Tylko mój skrypt sprawdza czy status odpowiedzi serwera to 200 więc wyłapuje też wszelkie przekierowania itp.
Zamiast wysyłać maila, albo zapisywać rezultat w arkuszu Google skrypt dodaje odpowiednią etykietę do reklam (podobnie jak ten skrypt, do którego podesłałem link), które są podejrzane i potem można je wszystkie szybko odfiltrować i sprawdzić ręcznie i poprawić lub wstrzymać.

 

Ale mój skrypt jest bardzo uproszczony i nie sprawdza np. URLi na poziomie słów kluczowych i URLi rozszerzeń linków do podstron.

 

Poza tym nie sprawdziłby się na koncie, które ma bardzo dużo różnych URL'i, gdyż mogło by się okazać, że skończy się czas na wykonanie skryptu więc zalecam naprawdę skorzystanie ze skryptu udostępnionego przez Google. Sam chyba też tak zrobię Emotikon: Szczęśliwy

Tomasz Ciepłucha

Dot.: Skrypty Adwords - błąd „illegal character”

Student ✭ ✭
Zaimplementowałem rozwiązanie z bazy skryptów Google. Wskazało jeden link. Zawsze coś Emotikon: Szczęśliwy

Czy znacie może miejsce gdzie można znaleźć skrypt, który pozwoli na przesłanie raportu/dodanie etykiety w sytuacji gdy na stronie docelowej znajduje się określony tekst? Chcę wyłapać sytuacje gdy produkt będzie wyprzedany.

Dot.: Skrypty Adwords - błąd „illegal character”

Wschodząca Gwiazda

Skoro tylko jeden to chyba dobrze - cieszyłbyś się, gdyby było więcej? Emotikon: Szczęśliwy

 

Co do skryptu, o który pytasz, to nie wiem, czy jest jakieś gotowe rozwiązanie.

Poniżej masz skrypt, który szuka na stronie o adresie "url" tekstu zdefiniowanego w zmiennej "str".

Jeśli znajdzie to wypisuje to do dziennika.

Oczywiście warunkiem zadziałania musi być poprawny adres i odpowiedź serwera ze statusem 200.

Możesz to wykorzystać i zmodyfikować skrypt Google do szukania nieprawidłowych adresów i będziesz miał skrypt, którego szukasz.

 

Kluczowy fragment kodu odpowiedzialny za szukanie tekstu jest zaznaczony na czerwono.

 

var url = "http://example.com/";
var str = "Example";

function main() {
  var response = UrlFetchApp.fetch(url,{muteHttpExceptions: true});  
  if(response.getResponseCode()==200 && response.getContentText().search(str)!=-1){
    Logger.log("Znaleziono tekst: '"+str+"' na stronie: "+url);
  }
}
Tomasz Ciepłucha