AdWords to teraz Google Ads. Nowa nazwa oddaje pełny zakres usług reklamowych, jakie oferujemy m.in. w wyszukiwarce, sieci reklamowej i YouTube.. Więcej informacji

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

Skrypty API Adwords - funkcja UrlFetchApp - dwa pytania

Student ✭ ✭ ✭

Witam,

 

Mam pytanie, mam kod do zrzucania danych na swój serwer UrlFetchApp. Uruchamiam go na koncie Klienta jest ok, na koncie MCK nie uruchamia się. Mam też pytanie, są chyba limity wywoływania w/w funkcji - jak to wygląda w praktyce - jakie sa limity na poszczególnych poziomach kont?

 

 

function main(){
  
  // Account Report
  var report = AdWordsApp.report(
      'SELECT ... ' +
      'FROM   ACCOUNT_PERFORMANCE_REPORT ' +
      'DURING LAST_MONTH');

  var rows = report.rows();
  
  while (rows.hasNext()) {
    var row = rows.next();

	var ActiveViewCpm = row['ActiveViewCpm'];
	...

  var payload =
   {
     "ActiveViewCpm" : ActiveViewCpm,
     ...
   };

    var options =
   {
     "method" : "post",
     "payload" : payload
   };

	UrlFetchApp.fetch("moj_serwer", options);

  }

 

Odpowiedź eksperta 1verified_user

Dot.: Skrypty API Adwords - funkcja UrlFetchApp - dwa pytania

Wschodząca Gwiazda

Skrypt nie działa Ci na koncie MCK bo wykonując skrypt na koncie MCK musisz najpierw w skrypcie wybrać konto klienta, na którym będziesz operować.

W zależności, czy chcesz przetwarzać konta jedno po drugim, czy jednocześnie używasz do tego odpowiednich funkcji.

 

W najprostszym przypadku, gdy chcesz wykonać skrypt na konkretnym koncie wybierasz to konto po ID. Poniżej przykładowy kod:

 

function main() {
  var accountSelector = MccApp.accounts().withIds(['ID-KONTA-KLIENTA']);
  var accounts = accountSelector.get();
  if(accounts.hasNext()){  
    var account = accounts.next();
    MccApp.select(account);
    //poniżej wstawiasz kod, który przetwarza dane na wybranym koncie
    var report = AdWordsApp.report(......);
  }
}

Jeżeli chcesz przetwarzać wiele kont zamiast warunku if dajesz pętlę while.

 

Szczegóły wraz z przykładami są w dokumentacji:

https://developers.google.com/adwords/scripts/docs/features/mcc

 

Co do limitów to są limity ilościowe dotyczące ilości zwracanych danych oraz limity czasu wykonywania skryptu. Szczegóły pod poniższym adresem:

https://developers.google.com/adwords/scripts/docs/limits

Tomasz Ciepłucha

Skrypty API Adwords - funkcja UrlFetchApp - dwa pytania

Student ✭ ✭ ✭

Tomek,

 

Dziękuję Ci za informacje. Czy dobrze rozumiem, że gdybym chciał to wykonywać z MCC dla wszystkich kont to parametr withIds pomijam? Mój skrypt ma ok. 1500 linii kodu, zrzuca mi wszystkie dane z raportów słów kluczowych, reklam, kampanii, konwersji, wideo. Razem średnio przerzuca mi do mojego mysqla ok. 500 rekordów. Mam ok. 200 kont Adwords. Czy sądzisz, że mogę uruchamiać skrypt dla mcc mając na uwadze wzrost liczby kont, czy lepiej to robić na poszczególnych kontach w różnych dniach? Obawiam się, że będę miał problem z limitami - już niestety mi się on pojawił przy okazji testów (np. zrzucania wszystkich aktywnych reklam bez innych warunków)

Skrypty API Adwords - funkcja UrlFetchApp - dwa pytania

Wschodząca Gwiazda

Jak masz 200 kont to wykonywanie skryptu na wszystkich na raz jest kiepskim pomysłem bo przy przetwarzaniu jedno po drugim na pewno dosięgnie Cię limit czasu. 

Lepsze więc jest przetwarzanie równoległe, ale tam z kolei jest limit 50 jednocześnie przetwarzanych kont.

W jednym i drugim przypadku musisz pomyśleć nad jakimś sposobem kolejkowania.

Czyli np najpierw wszystkim kontom nadajesz jakąś etykietę, np. "do-zrobienia".

Następnie pobierasz konta z tą etykietą z limitem np. 50 i je przetwarzasz.

Każdorazowo po poprawnym przetworzeniu danego konta zmieniasz mu etykietę na inną - np. "zrobione", żeby było wiadomo, że to konto zostało przetworzone.

Skrypt uruchamiasz dotąd, aż wszystkie konta zostaną przetworzone (czyli nie ma konta, które ma etykietę "do-zrobienia").

 

Ze skryptami to niestety jest taki problem, że raz się zmieści w limicie czasu, a raz nie, a niekiedy to w ogóle z niewiadomego powodu następuje przekroczenie limitu i nic się nie wykonuje.

 

Z tego też powodu próbuję sił w API AdWords. Niedawno udało mi się uzyskać podstawowy token programisty i powoli rezygnuję ze skryptów do raportowania na rzecz API.

Ogólnie procedura uzyskania tokenu wydaje się dość skomplikowana, ale poszło dość gładko i szybko.

W tym wątku pisałem o tym co nieco:

https://www.pl.advertisercommunity.com/t5/Zaawansowane-funkcje-AdWords/adwords-api/m-p/33136#M2250

Tomasz Ciepłucha

Skrypty API Adwords - funkcja UrlFetchApp - dwa pytania

Student ✭ ✭ ✭

Tomek,

 

Dziękuję za informacje. Na razie Adwords API odpada, w sumie dzięki Tobie poznałem możliwość eksportu poprze urfetch na własny serwer co mi w zupełności wystarczyło, w trakcie prac zaobserwowałem limity co z kolei zaniepokoiło. Czy możesz mi pomóc odpowiadając na 2 pytania:

1) Czy dobrze kombinuję jeśli zrobię sobie dodatkowe konta do obsługi raportowania np. raporty1@firma.pl, raporty2 itp. i będę do nich przydzielał np. po 20 kont z uruchamianym cyklicznie skryptem w pierwszych dniach miesiąca?

2) Czy jeśli mam w MCK spięte konta Adwords, to dodając skrypt z poziomu Adwords to to konto przejmuje sprawy limitów? Zastanawia mnie bo robiąc tak mam dostęp ze swojego MCK do tych skryptów i mogę je edytować.?

3) Czy powinienem uwzględnić przy liczeniu limitów inne skrypty które mam na kontach do wyłapywania urli, reklam z niskim ctr itp. - drobiazgi, których trochę się nazbierało?

Skrypty API Adwords - funkcja UrlFetchApp - dwa pytania

Wschodząca Gwiazda

Ja tu widzę trzy pytania Emotikon: Szczęśliwy

Ad.1

Jest to jakiś sposób, ale moim zdaniem skomplikujesz sobie tym życie. Najlepiej jest to zrobić za pomocą np. etykietowania kont i wykonywania skryptu co godzinę, aż wszystkie konta zostaną przetworzone i zostanie im przypięta odpowiednia etykieta. Skrypt będzie się wykonywał co godzinę i sprawdzał, czy są jakieś konta do przetworzenia i jeśli nie ma to po prostu nic nie będzie robił.

1-go dnia każdego miesiąca oddzielny skrypt może tą etykietę usuwać ze wszystkich kont i procedura zaczyna się od nowa.

Ad. 2

Limity masz w obrębie działania danego skryptu. Więc ilość skryptów na koncie MCK i kontach klientów nie ma znaczenia. Dany skrypt podczas uruchomienia nie może działać dłużej niż 30 minut itd.

Ad. 3

Nie. Tak jak napisałem powyżej, limity mają zastosowanie do działania danego skryptu, a nie wszystkich skryptów, które masz na koncie MCK czy kontach klientów.

Tomasz Ciepłucha

Skrypty API Adwords - funkcja UrlFetchApp - dwa pytania

Student ✭ ✭ ✭

Dziękuję za informacje. To rozwinę Ad2.:

W którymś momencie na testach wyrzuciło mi błąd (nie pamiętam dokładnie) dotyczący limitu użycia dziennego funkcji urlfetch (chyba 50000). Skrypt przez cały dzień wyrzucał błąd, na drugi dzień już działał. Z drugiej strony zalogowałem się jednak bezpośrednio na konto Adwords podpięte pod MCK które dosięgnął limit i skrypt już działał bez problemu. Jednoczesnie z MCK go widzę. Dostęp bezpośredni mam jednak tylko do części kont.

 

A jak zachowa się system jeśli podczas wykonywania harmonogramu napotka na błąd związany z jakimś limitem (czasu, liczby użyć urlfetch itp.) - czy wykona skrypt ponownie dnia następnego?

Skrypty API Adwords - funkcja UrlFetchApp - dwa pytania

Student ✭ ✭ ✭

3-krotnie przy testach złapał mnie błąd limitu urlfetch calls - nie bardzo wiem o której kategorii zalicza się w ogóle MCK - 20 000 / dzień?

URL Fetch calls 20,000 / day 50,000 / day 100,000 / day

Flexible

 

Skrypty API Adwords - funkcja UrlFetchApp - dwa pytania

Wschodząca Gwiazda

Funkcja UrlFetchApp.fetch() nie jest związana z AdWords i ma swoje odrębne limity - w tym przypadku dzienne na konto Google.

Nawet o tym nie wiedziałem bo nigdy nie wykonywałem dziennie tylu operacji i mnie taki limit nie dopadł.

Coś mi się wydaje, że przesyłasz wszystkie elementy pojedynczo (każdą kampanię, grupę, reklamę, słowo kluczowe, itd.) i stąd masz ten problem.

Jeżeli jest tak w rzeczywistości to powinieneś koniecznie pomyśleć nad poprawieniem skryptów by wysyłać dane łączone w grupy np. po 100 elementów. Wysyłając dane w paczkach po 100 mając limit 50 000 operacji na dzień teoretycznie możesz zrzucić nawet 5 milionów rekordów.

 

Tomasz Ciepłucha