久々に家のインフラをいじる時間ができたのでAdSenseの収益を自宅のGrafanaで表示させてみました。
そもそもGoogle AdSenseにAPIがあるなんて知らなかったのでメモとして残します。
AdSense Management API
AdSense Management APIはAdSenseの収益に関するレポート取得などを行えるAPI。
Google AdSenseのページを開いてレポートを見ることができると思いますが、あれをAPIで取得が可能です。
値さえ取れてしまえば家のInfluxdbに入れてGrafanaで表示できるので試してみます。
Google Cloudでの設定
まずはAdSense Management APIを有効にする必要があります。
APIを利用できるようにするまでいくつか設定が必要なようです。
AdSenseを利用しているアカウントでGoogle CloudのConsoleを開く
https://console.cloud.google.com/
Projectの作成
普段利用しているProjectがない場合は新規で作成します。
画面左上のプロジェクト選択画面の “新しいプロジェクト” より作成します。
Project: AdSense Project
場所: 組織なし
APIライブラリの有効化
上の検索バーで”ライブラリ”と検索してAPIとサービスの一覧を表示します。
AdSense Management APIを探して有効にするを押します。
有効になったら管理を押してAPIとサービスの詳細画面に遷移します。
OAuth 同意画面
認証するに当たりOAuthの設定が必要です。 “OAuth 同意画面”をクリックします。
下記のような画面になるので設定していきます。
User Type > 外部
アプリ名: AdSense Project (自由)
ユーザー サポートメール: Gmail (自由)
デベロッパーの連絡先: Gmail (自由)
スコープ
追加から、…/auth/adsense.readonly を選択
テストユーザー
ADD USERSより自分のGmailを入力
認証情報
左の認証情報を開き、認証情報を作成をクリック
OAuth クライアント ID の作成を選択
アプリケーションの種類: ウェブ アプリケーション
名前: Web App (自由)
承認済みのリダイレクト URI: http://localhost:8080/
以上でGoogle Cloudで必要な設定は完了
テストスクリプトの実行
Git上に公式のサンプルコードがあるためこれを活用する。
スクリプトを動かすHostでまずは必要なパッケージのインストールを行う。
pip Install
pip install google-api-python-client
pip install google_auth_oauthlib
adsense.datの作成
Gitでサンプルコードのあった階層に移動する。
https://github.com/googleads/googleads-adsense-examples/tree/main/v2/python
python adsense_util.py
実行すると、URLが表示されるためブラウザでアクセスする。
AdSenseを利用しているGoogleUserでLoginをして許可をしてあげる。
ScriptはWebサーバを8080で建ててCallbackURLに指定している。
Remote Hostで実行している場合はPort Forwarding等を利用して、
http://localhost:8080 でブラウザアクセスできるようにする。
問題なく実行ができれば、同じ階層に “adsense.dat”が生成されている。
これがあるとこれ以降はこのファイルを認証に利用するため再度OAuth2.0による認証が不要になる。
テスト実行
python generate_report.py
問題なければ、2021-03-01 ~ 2021-03-31 のデータが表示される。
毎日のデータを取得したいのでスクリプトを修正してあげる。
プログラム改造
推定収益とViewだけ取りたかったので下記のように変更。
また、前日のデータを取得するようにした。これをInfluxdbに日次で実行するようにした。
def main():
# Authenticate and construct service.
credentials = adsense_util.get_adsense_credentials()
with discovery.build('adsense', 'v2', credentials = credentials) as service:
try:
# Let the user pick account if more than one.
account_id = adsense_util.get_account_id(service)
today = datetime.datetime.today()
yesterday = today + relativedelta(days=-1)
startDateYear = yesterday.year
startDateMonth = yesterday.month
startDateDay = yesterday.day
endDateYear = yesterday.year
endDateMonth = yesterday.month
endDateDay = yesterday.day
result = service.accounts().reports().generate(
account=account_id, dateRange='CUSTOM',
startDate_year=startDateYear, startDate_month=startDateMonth, startDate_day=startDateDay,
endDate_year=endDateYear, endDate_month=endDateMonth, endDate_day=endDateDay,
metrics=['ESTIMATED_EARNINGS','PAGE_VIEWS']).execute()
estimated_earnings = result["totals"]["cells"][0]["value"]
page_views = result["totals"]["cells"][1]["value"]
print(result)
return estimated_earnings, page_views
Grafanaで見えるようになった
Influxdbに送り付けたので推定収益が見えるようになりました!
このブログは月に300円くらいの利益(2024/02/18時点)がでています
AWS維持費(S3やECRを含む)で月額2000円位かかってるので赤字ですorz
以上