![見出し画像](https://assets.st-note.com/production/uploads/images/98025692/rectangle_large_type_2_aeef026cea6570ecd3ddd2f80d535d52.jpeg?width=1200)
Yahoo!広告にてGoogleカレンダーAPIを使い祝日のオン・オフを自動化する方法を解説
※注:2023年2月追記
なんと執筆途中で、Yahoo!広告において『Yahoo!広告 スクリプト』の提供開始がアナウンスされました。
Yahoo!広告 スクリプトの提供開始について - Yahoo!広告
どのようなことが出来るのか詳細はわかりませんが、Google Ads Scriptと同じようなことが可能なら、Yahoo!広告APIを使う必要がなくなるかもしれません。
が、せっかく書いているのでこの記事自体は世に出したいと思います。
Yahoo!広告 スクリプトの活用ができたら別途記事を出すかもしれません。
==============================================
前回、『Google広告にてGoogleカレンダーAPIを使い祝日のオン・オフを自動化する方法』というnoteを書きました。
今回はそのYahoo!広告バージョンになります。
GoogleカレンダーAPIの概要などは上記の記事に譲りますので、Googleバージョンをまだ見ていない方はそちらから御覧ください。
さて、Yahoo!ではそのように実装していくかというと、
GoogleカレンダーAPIを使うのは当然同様ですが
Yahoo!には「Google Ads Script」のようなものはないため
Yahoo!広告APIとGoogle Apps Script(以下GAS)を活用していきます。
※念のためですが、Google Ads Script と Google Apps Scriptは別物です。
Yahoo!広告APIを使う準備
それではYahoo!広告APIを使えるようにするため、諸々進めていきましょう。
まずは、↓↓Developer Center↓↓へ行きましょう。
気になる方は「Yahoo!広告APIについて」なども読んでいただくとよいかと思いますが、一旦そこは割愛して「スタートアップガイド」をクリックします。
![](https://assets.st-note.com/img/1675240338153-d2N3Nz6ofi.png?width=1200)
基本的にはここの順番通りに進めていけば All OKです。
1つ1つ見ていきましょう。
Yahoo!広告APIを使用するための申込
そもそもYahoo!広告のアカウントを持っていない場合は、
Yahoo!広告 お申し込みフォーム からお申し込みください。入力で困ることはないと思います。
※Yahoo!広告アカウントを持っていなくても、Yahoo!広告APIに申し込むこと自体は可能です。
さて、広告アカウントを開設したら、
Yahoo!広告 API お申し込みフォーム からAPI利用を申込みします。
![](https://assets.st-note.com/img/1675240949396-PNmWZGOBYQ.png?width=1200)
お申し込みが完了して、Yahoo!広告APIが利用可能になったら
ビジネスIDのメールアドレス宛てに「【Yahoo!広告 API】登録完了のお知らせ」というタイトルでメールが届きます。
※最大で1営業日ほどかかることもあるとのこと。
申込みは完了なので、次のステップにいきます。
アプリケーションの登録
次にアプリケーションを登録です!
Yahoo!広告 API管理ツールから実施します。
Yahoo!ビジネスセンターへいきます。
普段から広告管理ツールを利用されてる方ならお馴染みですね。
広告管理ツールの下に API管理ツールが現れているかと思います。
なおアプリケーション登録にはAPI管理ツールの「ツール管理権限」を持っている必要がありますので、その点だけご注意ください。
![](https://assets.st-note.com/img/1675311332316-TVrE5leqcL.png?width=1200)
管理画面のTOPで、「登録アプリケーション」をクリックします。
![](https://assets.st-note.com/img/1675311387698-EbNwwHz1tS.png?width=1200)
「登録」ボタンをクリック。
![](https://assets.st-note.com/img/1675311411679-YcDs3EILrN.png)
アプリケーション登録画面で各項目入力します。
アプリケーション名やアプリケーションの説明は自由でOKです。
今回は管理画面のオンオフ機能をGASで設定していくだけで、
何か世の中にアプリをローンチするわけでもないですし、
第三者にアプリを利用してもらうわけでもないので、わりと適当で大丈夫です。
リダイレクトURIについては、第三者にアプリを利用してもらう場合に、認証完了ページなどへリダイレクトさせるためのURIなので、今回の利用目的では必要ないです。
その場合は「oob」と入力します。
入力が終わったら、確認して登録でOKです。
登録が終わったら、一覧が表示され
クライアントIDや、クライアントシークレットが見れるようになります。
こちらは後ほど使う重要なものですし、
第三者には絶対教えないようにしましょう。
![](https://assets.st-note.com/img/1675312137528-3b47YGDhg7.png?width=1200)
以上で、アプリケーションの登録も完了。
APIコールを実施する
ここでの目標はアクセストークン(access_token)とリフレッシュトークン(refresh_token)をゲットすることです。
まずはブラウザで以下URLにアクセスします。
https://biz-oauth.yahoo.co.jp/oauth/v1/authorize?response_type=code
&client_id=CLIENT_ID
&redirect_uri=REDIRECT_URI
&scope=yahooads
&state=THIS_VALUE_SHOULD_BE_UNIQUE_PER_REQUEST
CLIENT_IDには先程手に入れた「クライアントID」を
REDIRECT_URIには「oob」と記載します。
stateは任意なので「&state」以降はなくても大丈夫です。
が、一応付与するのが推奨ですので、適当な文字列をいれておきましょう。
(「&state=xyz」とかでもOKです)
認可画面が表示されたら、「承認」しましょう。
![](https://assets.st-note.com/img/1675313059606-sq0K9NgBAK.png?width=1200)
すると、リダイレクトしてブラウザのURLに
code=「hogehoge」などと出てくると思います。
その「hogehoge」の部分をコピーしておきましょう。
画面自体はエラーっぽく表示されることもあるかもしれませんが、
大事なのは画面ではなくて「URLバー」です。
下の例でいうと「code」と「&state」の間の「123」をコピーやメモっておくということです。
![](https://assets.st-note.com/img/1675313387314-rfijTrDnSj.png)
この認可コード(code)の有効期限は10分ですので、
10分以内に次の処理(リクエスト)を実行する必要があります。
ということで以下URLにアクセスします。
ブラウザでもOKですし、他にAPIリクエストできる手段がある方は
GETメソッドでリクエストすれば大丈夫です。
https://biz-oauth.yahoo.co.jp/oauth/v1/token?grant_type=authorization_code
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&redirect_uri=REDIRECT_URI
&code=AUTH_CODE
CLIENT_ID: Yahoo!広告 API管理画面の「クライアントID」
CLIENT_SECRET:同上の「クライアントシークレット」
REDIRECT_URI: oob
AUTH_CODE: 上でゲットした「code」
になります。URLに入力してEnterすれば「access_token」と「refresh_token」がゲットできると思います。
ちなみに、パラメータ部分をpayloadとして記載して、POSTメソッドでリクエストすることも可能です。GASで書くなら例えば以下のようにします。
上部の「実行」をクリックすればレスポンスが見れますので、
そこで「access_token」と「refresh_token」が得られます。
※clientID、clientSecret、authCodeは上記同様、各々記載してください。
![](https://assets.st-note.com/img/1677320695935-EnRACFBBPZ.png?width=1200)
function myFunction() {
const options = {
"method": "POST",
"payload": {
"grant_type": "authorization_code",
"client_id": clientId,
"client_secret": clientSecret,
"redirect_uri": "oob",
"code": authCode
}
}
const res = UrlFetchApp.fetch("https://biz-oauth.yahoo.co.jp/oauth/v1/token", options);
console.log(res.getContentText());
}
レスポンスは以下のような形で得られます。
{"access_token":"ACCESS_TOKEN",
"expires_in":3600,
"token_type":"Bearer",
"refresh_token":"REFRESH_TOKEN"}
アクセストークンは1時間経過すると無効化されます。
そのため毎日「祝日か否か」を判定してYahoo!広告へAPI叩くためには、
毎回リフレッシュトークンからアクセストークンを生成する必要があります。
その方法を次に説明します。
またブラウザでもGASでもなんでもよいですがGETリクエストを送ります。
https://biz-oauth.yahoo.co.jp/oauth/v1/token?grant_type=refresh_token
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&refresh_token=REFRESH_TOKEN
そろそろ改めて書く必要もないと思いますが
CLIENT_ID: クライアントID
CLIENT_SECRET: クライアントシークレット
REFRESH_TOKEN: 先で得たリフレッシュトークン
をいれます。
こちらも同様にpayloadにパラメータ部分を記載してPOSTメソッドでリクエストすることも可能。
GASで記載するなら以下のような形。
![](https://assets.st-note.com/img/1677321157416-mAdePNrtTw.png?width=1200)
function myTest2Function() {
const options = {
"method": "post",
"payload": {
"grant_type": "refresh_token",
"client_id": clientId,
"client_secret": secretId,
"refresh_token": refreshToken
}
}
const res = UrlFetchApp.fetch("https://biz-oauth.yahoo.co.jp/oauth/v1/token", options);
const r = res.getContentText();
console.log(r);
const accessToken = JSON.parse(r).access_token;
}
clientId, clientSecret, refreshTokenの説明は割愛しますが、上記と同様です。
レスポンスは以下のようになります。
{"access_token":"ACCESS_TOKEN",
"expires_in":3600,
"token_type":"Bearer"}
GASのログ画面での表示はこんな感じ。
![](https://assets.st-note.com/img/1675315157591-SlPZsoZwmj.png?width=1200)
「POSTメソッドでリクエストすることも可能」と書きましたが、
GASで普通にGETメソッド送ることも当然可能です。
↓↓こんな感じでパラメータとしてURLにくっつけてリクエストする感じですね。
![](https://assets.st-note.com/img/1677321300409-kis4USlWGK.png?width=1200)
これで、リフレッシュトークンから、毎回アクセストークンを入手するわけですね。具体的な使い方は実際にAPI叩くシーンでまた説明します!
ここまでで、「Yahoo!広告API を使う準備」が終了です!
Google Apps Script (GAS)でコードを書く
やることを主に2つです。
①Yahoo!広告へ、API経由でキャンペーンのオン・オフの指示を出す。
②GoogleカレンダーAPIで祝日判定をする
一気に書くと大変なので、順番に見ていきます。まずは①です。
一旦、この章は「さらっと見てもらう」感じでOKです。
次の章で「GASスクリプトの作り方」とかも説明します。
API経由でキャンペーンのオン・オフの指示を出す
※アカウントごとにオンオフする方法もありますが、ここではキャンペーン単位での実施を想定しています。
最初にGASのコードを記載しますね。
function onCampaign() {
const tokenURL = "https://biz-oauth.yahoo.co.jp/oauth/v1/token";
const clientId = "hogehoge";
const secretId = "fugafuga";
const refreshToken = "foobarbaz";
const option1 = {
"method": "POST",
"payload": {
"grant_type": "refresh_token",
"client_id": clientId,
"client_secret": secretId,
"refresh_token": refreshToken
}
}
const res = UrlFetchApp.fetch(tokenURL, option1);
const r = res.getContentText();
const accessToken = JSON.parse(r).access_token;
console.log(accessToken);
const url = "https://ads-search.yahooapis.jp/api/v9/CampaignService/set";
const payload = {
"accountId": 1000000,
"operand": [
{
"campaignId": 22222,
"userStatus": "PAUSED"
},{
"campaignId": 33333,
"userStatus": "ACTIVE"
}
]
};
// const url = "https://ads-display.yahooapis.jp/api/v9/CampaignService/set";
// const payload = {
// "accountId": 100000000,
// "operand": [
// {
// "campaignId": 44444444,
// "userStatus": "PAUSED"
// }
// ]
// };
const option2 = {
"method": "POST",
"payload":JSON.stringify(payload),
"headers": {
"Authorization": "Bearer " + accessToken,
"Content-Type": "application/json"
},
"muteHttpExceptions": true
}
const response = UrlFetchApp.fetch(url, option2);
console.log(response.getContentText());
console.log(response.getResponseCode())
}
はい、キャンペーンのオンオフについてはこれだけです。
順番に説明していきます。
流れとしては、
①リフレッシュトークンを使ってアクセストークンを取得。
②その後、そのアクセストークンを利用してYahoo! 広告APIにアクセスしてキャンペーンのオンオフを操作する
になります。
まずはこちら。
const tokenURL = "https://biz-oauth.yahoo.co.jp/oauth/v1/token";
const clientId = "hogehoge";
const secretId = "fugafuga";
const refreshToken = "foobarbaz";
clientIdはクライアントID、
secretIdはクライアントシークレット
refreshTokenはリフレッシュトークン
をそれぞれ入力してください。
GASを利用する場合は直接入力ではなく
スクリプトプロパティを利用するのがベターかとは思います。
スクリプトプロパティについては端折りますが、興味ある方は調べてみたください。
const option1 = {
"method": "POST",
"payload": {
"grant_type": "refresh_token",
"client_id": clientId,
"client_secret": secretId,
"refresh_token": refreshToken
}
}
ここでは、アクセストークンをゲットするために必要な情報をオブジェクト形式で記載しています。
const res = UrlFetchApp.fetch(tokenURL, option1);
const r = res.getContentText();
const accessToken = JSON.parse(r).access_token;
console.log(accessToken);
実際にリクエストを投げます。
(ここではPOSTメソッドのリクエスト投げてますが、前述のようにGETでもOKです。)
返ってきたレスポンスから、アクセストークンを取り出して変数に入れています。
※確認のためconsole.logで表示していますが、この1行はなくてもOK。
そしていよいよYahoo!広告APIへリクエスト送る準備です。
↓↓こちらは「検索広告」の場合です。urlが「ads-search.~」となっています。
const url = "https://ads-search.yahooapis.jp/api/v9/CampaignService/set";
const payload = {
"accountId": 1000000,
"operand": [
{
"campaignId": 22222,
"userStatus": "PAUSED"
},{
"campaignId": 33333,
"userStatus": "ACTIVE"
}
]
};
accountIdやcampaignIdは該当のアカウントIDやキャンペーンIDになります。これは広告管理画面から確認しておきましょう。
もう1つ大事なのが「userStatus」です。ここでオンオフを指定します。
オンにする場合は「"userStatus": "ACTIVE"」で、オフにする場合は「"userStatus": "PAUSED"」になります。
また、コメントアウトしている箇所がディスプレイ広告の場合です。
こちらを使いたい場合は、各行先頭の「//(コメントアウト)」は削除してください。
(全部選択して「Ctrl + /」でコメントアウトできます。)
さらに、検索広告の部分は削除(or コメントアウト)してください。
// const url = "https://ads-display.yahooapis.jp/api/v9/CampaignService/set";
// const payload = {
// "accountId": 100000000,
// "operand": [
// {
// "campaignId": 44444444,
// "userStatus": "PAUSED"
// }
// ]
// };
そしてYahoo!広告APIへリクエスト送る内容です。
const option2 = {
"method": "POST",
"payload":JSON.stringify(payload),
"headers": {
"Authorization": "Bearer " + accessToken,
"Content-Type": "application/json"
},
"muteHttpExceptions": true
}
json形式で送る必要あるため、
payloadを改めて、「JSON.stringify(payload)」でjson文字列にしています。
headersの Authorizationは「"Bearer hogehoge"」というように
アクセストークンの前に「Bearer」と「半角スペース」が必要です。
※半角スペースを忘れないように
const response = UrlFetchApp.fetch(url, option2);
console.log(response.getContentText());
console.log(response.getResponseCode())
で、最後にUrlFetchAppでリクエストを送っています。
一応レスポンスをconsole.logで見ていますが、特になくてもOK。
以上になります!
次は ②GoogleカレンダーAPIで祝日判定をする です。
GoogleカレンダーAPIで祝日判定をする
ここも非常にシンプルです。前準備などもいりません。
GAS以外でGoogleカレンダーAPIを使おうとすると、GCP(Google Cloud Platform)まわりで諸々準備したりする必要がありますが、GASだとそれがなくサクッといけます。(裏側では色々やってます)
Google同様に、
「翌日が祝日なので停止」のパターンと
「前日が祝日 かつ 当日が祝日ではない ので再開」のパターンを見ていきます。
翌日が祝日なので停止
例えばこんな感じです。
function myOffFunction2() {
const calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
const calendar = CalendarApp.getCalendarById(calendarId);
const now = new Date();
const tomorrow = new Date(now.setDate(now.getDate()+1));
const flagTomorrow = calendar.getEventsForDay(tomorrow);
if(flagTomorrow.length > 0){
console.log('停止');
}
}
前提としてこちらもGoogleと同様に「定期実行」する想定ですので、
毎日22:00-23:00頃にこのスクリプトが動いて
「翌日が祝日なら停止」という動きになります。
最初に、日本の祝日のカレンダーIDからカレンダーオブジェクトを生成しています。
tomorrowには翌日の日付をセットします。
const flagTomorrow = calendar.getEventsForDay(tomorrow);
この一文で、「翌日の祝日イベントをflagTomorrowにいれてくれー」と言っています。
これは配列になりまして、翌日が祝日なら色々な情報が入っており、
祝日でなければ「空の配列」になります。
今回のコードには不要ですが例えば、todayに「5月3日」をセットして
以下のようにgetTitle()すると「こどもの日」という情報を取得できます。
console.log(calendar.getEventsForDay(today)[0].getTitle());
↓↓console.logの結果
![](https://assets.st-note.com/img/1675668021704-oM4c6ReaaL.png?width=1200)
この時、単純に以下のようにgetEventsforDay(today)だけした場合は、色々な情報が詰まってますね。配列の最初([0])に getTitle()することで、祝日名が得られたわけです。
console.log(calendar.getEventsForDay(today));
![](https://assets.st-note.com/img/1675668102232-wOR7sc8qIm.png?width=1200)
逆に、例えば todayに「5月6日」という平日を入れたらどうなるでしょう?
console.log(calendar.getEventsForDay(today));
の結果は以下のように「空の配列」になるわけです。
祝日じゃないのでなんの情報もないわけですね。
![](https://assets.st-note.com/img/1675668284730-NOrF8GJvLD.png?width=1200)
余談ですが、new Date() の月の指定は「0-11」で指定するため、
5月が欲しい場合は「4」を入れます。
話を戻しましょう。
最後の部分です。
if(flagTomorrow.length > 0){
console.log('停止');
}
今見てきたように、
「calendar.getEventsForday(○○)」で取得して来た際に
祝日なら色々情報入っていて、祝日でなければ「空」なわけです。
よって、length > 0であれば「明日は祝日だ!」となりますし、
length == 0(空の配列)であれば「明日は平日」と判断します。
console.log('停止')の部分に、先のYahoo!広告 APIのリクエスト文を書けばいいわけです。この話はまた最後にします。
前日が祝日 かつ 当日が祝日ではない ので再開
次は再開のパターンです。
Google広告の記事の「おまけ」でも記載しましたが、
こちらは「当日が祝日ではない」だけの条件でも大丈夫ではあります。
(既にオンの状態で再開のスクリプトが動いても問題ないので)
ただ、「祝日ではない = 平日」って『ほとんど』になりますので、
なるべく余計な(必要ない)リクエストはなしにしようって考えです。
そのため、「前日が祝日」という条件も入れています。
function myOnFunction() {
const calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
const calendar = CalendarApp.getCalendarById(calendarId);
const now = new Date();
const today = new Date(now.setDate(now.getDate()));
const yesterday = new Date(now.setDate(now.getDate()-1));
const flagYesterday = calendar.getEventsForDay(yesterday);
const flagToday = calendar.getEventsForDay(today);
if((flagToday.length == 0) && (flagYesterday.length > 0)){
console.log('再開');
}
}
コードとしては上記のような形です。
先程と異なるのは today と yesterday を用意しているところです。
そして、
flagToday.length == 0 が 「当日が祝日ではない」という条件ですね。
かつ
flatYesterday.length >0 が「前日が祝日」という条件になります。
これらを同時に満たしたら「再開」になるわけです。
コードを完成させる
では実際にコードを書いていきましょう。
まずは GoogleAppsScriptのサイトにいきます。
「新しいプロジェクト」をクリック。
![](https://assets.st-note.com/img/1675671363886-IJYRIo64Bq.png)
すると以下のような画面に遷移すると思います。
![](https://assets.st-note.com/img/1675671381713-JLF5klrPBn.png?width=1200)
上部の「無題のプロジェクト」の箇所をクリックすると、名前を変更できます。
![](https://assets.st-note.com/img/1675671447060-wswTnkGtZZ.png?width=1200)
デフォルトで「コード.gs」というファイルがありますが、
「ファイルを追加(+ボタン)」から新しく作成しましょう。
「スクリプト」を選択します。
![](https://assets.st-note.com/img/1675671517506-68kcypGU11.png)
名前をつけます。ここでは「offFunction.gs」にしました。
また、コードの function名も「offFunction」にしました。
![](https://assets.st-note.com/img/1675671605159-mGgPUepW3N.png?width=1200)
そして、完成版のコードがこちらです。
function offFunction() {
const calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
const calendar = CalendarApp.getCalendarById(calendarId);
const now = new Date();
const tomorrow = new Date(now.setDate(now.getDate()+1));
const flagTomorrow = calendar.getEventsForDay(tomorrow);
if(flagTomorrow.length > 0){
const tokenURL = "https://biz-oauth.yahoo.co.jp/oauth/v1/token";
const clientId = "hogehoge"
const secretId = "fugafuga"
const refreshToken = "foobarbas"
const option1 = {
"method": "POST",
"payload": {
"grant_type": "refresh_token",
"client_id": clientId,
"client_secret": secretId,
"refresh_token": refreshToken
}
}
const res = UrlFetchApp.fetch(tokenURL, option1);
const r = res.getContentText();
const accessToken = JSON.parse(r).access_token;
const url = "https://ads-search.yahooapis.jp/api/v9/CampaignService/set";
const payload = {
"accountId": 1000000,
"operand": [
{
"campaignId": 22222,
"userStatus": "PAUSED"
},
{
"campaignId": 33333,
"userStatus": "PAUSED"
}
]
};
const option2 = {
"method": "POST",
"payload":JSON.stringify(payload),
"headers": {
"Authorization": "Bearer " + accessToken,
"Content-Type": "application/json"
},
"muteHttpExceptions": true
}
const response = UrlFetchApp.fetch(url, option2);
console.log(response.getContentText());
console.log(response.getResponseCode())
}
}
翌日が祝日のとき( if(flagTomorrow.length > 0) のとき)に
Yahoo!広告 APIを叩いてリクエストが飛ぶようになっています。
そしたら保存して、左のナビゲーションの時計マーク(トリガー)をクリックします。
![](https://assets.st-note.com/img/1675671820773-eryEUgDVD6.png)
最初はまっさらだと思いますので、
「新しいトリガーを作成」or「トリガーを追加」をクリックします。
![](https://assets.st-note.com/img/1675671867153-UDtpVl7G3D.png?width=1200)
関数を選択(この場合は offFunction)して、
あとは以下の画像のように設定します。
時刻はギリギリすぎると怖いので 午後10時~11時にしています。
![](https://assets.st-note.com/img/1675671943373-22KFFv3a2X.png?width=1200)
そしたら「保存」でOKです。
色々と承認を求められたりするかもしれませんが、許可していきましょう。最終的に一覧に出れば問題ないです。
![](https://assets.st-note.com/img/1675672044147-ChW3DqpQuV.png?width=1200)
次に「再開」のコードを作りましょう。
左のナビゲーションから「エディタ」に戻ります。
![](https://assets.st-note.com/img/1675672322951-QLVuXh2zjp.png)
「onFunction.gs」という名前の新しいファイルを作成します。
(名前はなんでもOKではあります)
![](https://assets.st-note.com/img/1675672368378-ZPSfl755Z1.png?width=1200)
コードがこちらです。
function onFunction() {
const calendarId = "ja.japanese#holiday@group.v.calendar.google.com";
const calendar = CalendarApp.getCalendarById(calendarId);
const now = new Date();
const today = new Date(now.setDate(now.getDate()));
const yesterday = new Date(now.setDate(now.getDate()-1));
const flagToday = calendar.getEventsForDay(today);
const flagYesterday = calendar.getEventsForDay(yesterday);
if((flagYesterday.length > 0) && (flagToday.length == 0)){
const tokenURL = "https://biz-oauth.yahoo.co.jp/oauth/v1/token";
const clientId = "hogehoge"
const secretId = "fugafuga"
const refreshToken = "foobarbaz"
const option1 = {
"method": "POST",
"payload": {
"grant_type": "refresh_token",
"client_id": clientId,
"client_secret": secretId,
"refresh_token": refreshToken
}
}
const res = UrlFetchApp.fetch(tokenURL, option1);
const r = res.getContentText();
const accessToken = JSON.parse(r).access_token;
const url = "https://ads-search.yahooapis.jp/api/v9/CampaignService/set";
const payload = {
"accountId": 10000000,
"operand": [
{
"campaignId": 22222,
"userStatus": "ACTIVE"
}
]
};
const option2 = {
"method": "POST",
"payload":JSON.stringify(payload),
"headers": {
"Authorization": "Bearer " + accessToken,
"Content-Type": "application/json"
},
"muteHttpExceptions": true
}
const response = UrlFetchApp.fetch(url, option2);
console.log(response.getContentText());
console.log(response.getResponseCode())
}
}
「前日が祝日」 かつ 「当日が祝日ではない」
(flagYesterday.length > 0) && (flagToday.length == 0)
ときに Yahoo!広告へのリクエストが動きます。
念のため、今更もう一度記載しますが
clientIdやsecretId、refreshToken、accountId、campaignIdなどは
皆様それぞれ異なります。上記をコピペしただけでは動きませんのでご注意ください。
また、検索広告か ディスプレイ広告かで、以下のurlも変わりますので、忘れてしまった人は読み返してみてください。
const url = "https://ads-search.yahooapis.jp/api/v9/CampaignService/set";
さて、では保存して、先程と同じように「トリガー」をクリックします。
![](https://assets.st-note.com/img/1675672695455-YsNhaDRiWX.png)
「トリガーを追加」から再開用のトリガーを作っていきます。
関数名(今回は onFunction)を選択して、あとは画像を参考に。
![](https://assets.st-note.com/img/1675672754964-VMhfmQALQW.png?width=1200)
再開の場合は「午前0時~1時」にスクリプトが動くトリガーにします。
で、「当日が祝日ではない」かつ「前日が祝日」なら
キャンペーン再開のリクエストが走るわけですね。
設定したら保存します。
停止の場合に加えて、今作った再開のトリガーが一覧に現れていたらOKです!
![](https://assets.st-note.com/img/1675672874643-cEqBkk2EUq.png?width=1200)
以上で、『Yahoo!広告において祝日にキャンペーンのオンオフ』の自動化が完成しました。
今回は以上になります。
最初に記載していた「Yahoo!広告スクリプト」も気になるので、どこかでそちらも書けたらなぁと思います。
Bye, bye.
今回の記事内容について詳しくお話を聞きたいという企業様がいらっしゃいましたら、こちらからお問い合わせをお願い致します。
もし、私たちの会社で働く事に少しでも興味を持っていただけたら、ぜひ応募フォームよりご連絡ください。
この記事が気に入ったらサポートをしてみませんか?