node.js: Google Ads API v2でデータを取得する方法

access_tokenは取得できているという前提です。
node.js: Google API OAuth2のアクセストークンを取得する方法

2019年Google Ads APIはいったんバージョン2正式版をリリースしたのですが、パフォーマンスが悪いとの指摘を受けてBETA版に戻りました。
Adwords APIの時に比べてレスポンスが重くなったそうです。

Adwords APIの時はREST APIだったのですが、Google Ads APIはgRPCになっているので中の構造は根本的に違います。
でも普通にPOSTすればレスポンスは返ってきます。

Google側が用意しているライブラリも使ってみたのですが、リクエストする度にaccess_tokenを取得しようとするので、バッチ処理には向きません。
バッチ用の公式ライブラリは現時点でまだリリースされていません。

access_tokenをバッチで取得しまくるとアカウントそのものを止められるので現実的ではないです。

オフィシャルのドキュメント
https://developers.google.com/google-ads/api/docs/start?hl=ja
developer-tokenはあらかじめ取得しておいてください。

とりあえず取得のほうだけです。
アップデートのほうはまたいつか。

以下、広告に関する情報を取得する場合。

'use strict';

const rp = require('request-promise-native');

const ACCESS_TOKEN = 'ya21.Gl12Bwsxu97PbXz2s-ZVKxxxxxxxxxxxxxxxx';
const DEVELOPER_TOKEN = '自分のdeveloper-token';
const CUSTOMER_ID = '取得したいcustomer-id';
const LOGIN_CUSTOMER_ID = '自分の(親)customer-id';
const URL = `https://googleads.googleapis.com/v1/customers/${CUSTOMER_ID}/googleAds:search`;

const main = async () => {
  try {
    // Google Ads Query Language
    const gaql = `SELECT
      ad_group.resource_name,
      ad_group_ad.resource_name,
      ad_group_ad.status,
      metrics.impressions,
      metrics.clicks,
      metrics.conversions,
      metrics.conversions_value,
      metrics.cost_micros,
      metrics.average_cpm,
      metrics.average_cpc,
      metrics.cost_per_conversion,
      metrics.ctr,
      metrics.conversions_from_interactions_rate
    FROM ad_group_ad
    WHERE segments.date BETWEEN '2019-08-01' AND '2019-08-31'
    ORDER BY metrics.cost_micros DESC`;

    const options = {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + ACCESS_TOKEN,
        'developer-token': DEVELOPER_TOKEN,
        'login-customer-id': LOGIN_CUSTOMER_ID
      },
      form: { 'query': gaql },
      json: true,
      resolveWithFullResponse: true
    };

    const res = await rp(URL, options); // リクエスト実行
    if (res.statusCode === 200) console.log(res);
  } catch (err) { console.log(err); }
};

main();

アップデートする場合はGAQLは使いません。

node.js: Google Analytics API v4でデータを取得する方法

access_tokenは取得できているという前提です。
node.js: Google API OAuth2のアクセストークンを取得する方法

公式にあるようにJSONをPOSTすればいいだけです。

Google アナリティクス API Reporting API v4
https://developers.google.com/analytics/devguides/reporting/core/v4/basics?hl=ja

Dimensions & Metrics Explorer
https://developers.google.com/analytics/devguides/reporting/core/dimsmets
metricsとdemensionsの組み合わせで使えるもの、使えないものを調べるツールです。

'use strict';

const rp = require('request-promise-native');

const ACCESS_TOKEN = 'ya21.Gl12Bwsxu97PbXz2sxxxxxxxxxxxxxxxxx';
const URL = 'https://analyticsreporting.googleapis.com/v4/reports:batchGet';

const main = async () => {
  try {
    const reportRequests = [
      {
        'viewId': '取得したいview_id',
        'samplingLevel': 'LARGE',
        'dateRanges': [{ 'startDate': '2019-08-01', 'endDate': '2019-08-31' }],
        'metrics': [{ 'expression': 'ga:users' }]
      }
    ];

    const options = {
      method: 'POST',
      headers: {
        'Accept-Charset': 'utf-8',
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + ACCESS_TOKEN
      },
      body: { 'reportRequests': reportRequests },
      json: true,
      resolveWithFullResponse: true // statusCodeが欲しいのでfullにする
    };

    const res = await rp(URL, options); // リクエスト送信
    if (res.statusCode === 200) console.log(res.body);
  } catch (err) { console.log(err); }
};

main();

totalsの値がソレです。

Googleのペナルティ解除

書くといろいろ影響するからと記事を引っ込めたのですが、このブログは2014年2月13日にGoogleから軽いペナルティにあってました。

おかげさまでPVもUUも10分の1に減りましたよw
最初は原因を探りたくて、いろいろいじりました。

一番最初に疑ったのは、ヒットマンガ・ネットがバリバリのアフィリエイトサイトなのでリンクを外したり、上部にあったバナーを下に降ろしたりしてみましたが、まったく意味がなかったです。

意味がないのでリンクやら、バナーの位置は元に戻しちゃいました。

だいたい3ヶ月で解除されるようなので、そのまま放ったらかしにしておいたのですが、4月18日付で解除されたようです。

約2ヶ月間のペナルティでした。
本当に何もしていないのに、突然数字が元に戻ってました(- -“)凸チッ

またやられるんだろうな〜(遠い目。

あと疑わしいのは、同じサーバーにのっけていたヒットマンガ・ネットで転送量制限されたのでサーバーを別にしました。
もしかしたら転送量(=重くなっていたの)かもしれません。

 
このブログはもうネタ切れなので諦めていますが、軽いペナルティなら更新だけは諦めずに続けると良いです。
更新を止めるとそれだけでランクが落ちてしまうので。。。
 

Googleからの流入激減とその対処法

10年以上ずっと話には聞いていたのでとくに驚きもせず、「とうとう自分にもキタか」くらいの気持ちなのですが、それにしても流入が10分の1に減るとはずいぶんだなと思います。

2014年2月12日辺りにアナリティクスがデザインのマイナーチェンジをしました。
流入激減はそれと関係あるのかなと思ったら自分だけみたいなので、どうやらペナルティのようです。

な〜んにもしてないから原因がわかりません。
とりあえず3ヶ月待つことにします。。。

 
激減したときに一応確認することは、

(1)マスターツールでメッセージが届いていないかチェック(手動によるインデックス削除ならメッセージが届いているはず)
(2)Googleで「site:hogehogehogehoge.com」と叩いてインデックス削除されていないかチェック
(3)Googleが提供しているセーフブラウジングでチェック
 http://www.google.com/safebrowsing/diagnostic?site=hogehogehogehoge.com
(4)激減する直前にGoogle先生が嫌がる変更をしなかったか頭の中をチェック
(5)ペンギンやらパンダやらのアップデート日程をチェック
 namaz.jp SEO関連ニュース一覧

よく言われますが、それで何もなければ何もしなくても突然元に戻ります。
元に戻るまでに3ヶ月かかっている人もいたので、それまでじっと待つしかないです。

損害賠償請求をしたくなる人の気持ちが少しわかりましたw
 

Googleアラートが復活している件

なんと、今頃気づいたのですが、Googleアラートが復活していました。
なぜ気づいたかと言いますと、ヒットマンガ・ネットで使おうかなと思って、Googleアラートの代わりになるサービスを探していたのです。

ところがどうも「コレッ!」と思うものが見つからず、何となくGoogleアラートの管理画面を触っていたら、いきなり動き出したのでびっくりしました。

調べてみると、自動メール送信の機能は7月に終了したのですが、9月中旬くらいにRSS配信だけ再開していたみたいですね。

終了アナウンスのメールがきた時に、Googleがとても濁した言い方をしていたので、ちょっとひっかかっていたのです。
それもあって画面を覗いたらRSSがゾンビになっていたと(゚д゚)!

実験サイトのほうではコメントアウトしたままコードを残していたので、そのまますぐに再開できました。

ですので以前の記事も死なずに生きています。

PHP:Google検索結果をRSSで取得し自動で表示 その1
PHP:Google検索結果をRSSで取得し自動で表示 その2

さすがにメール配信は重いので止めるのはわかりますが、RSSまでやめることはないですよね。

しかし別のサービスに移行してしまったディベロッパーがかわいそすぎる。。。

追記(2013/11/1)
取れたり、取れなかったり、全部消えたり、Googleのほうでまだ裏側をゴニョゴニョいじっているようです。
調整が終わるまでもう少し待ったほうがよいみたいです。

さらなる追記(2014/4/20)
毎日ローカルで確認できているもので、ずっと様子を伺っているのですが、ほぼ動作確認できています。
もう完全復活したと宣言してもいいのではないでしょうか。

またしても追記(2015/6/27)
詳しい使い方はわからないのですが、今見たらメール送信機能も復活していました!
サービス終了時、ニュース記事にもなっていたくらい人気のサービスだったので、ちょっと驚きです。