ページ本文へ移動
炭火ブログ

MENU

ねこ ねこ

WordPressでGA4 APIを使ったアクセスランキング作成法

PHPの知識はWordPressのテーマを少し触るくらいしかありません。そこで、もう少し難しいことに挑戦したいと思います。現在では無料範囲の生成AIでプログラミングが可能です。AIを先生に学習できたらと思っています。第1弾はGoogle AnalyticsのAPIを使ってアクセスランキングを作ります。

ランキング表示の目標

試しに30日間のデータを取得したところ、表示されるランキングにはほとんど変化がなく、同じ様に見えるので、少し短めの1週間分を集計します。ページのデザインを考慮し、上位6ページ分のデータを取得します。1日1回サーバーのCronを使ってAPIによりデータを取得し、データをキャッシュしてページに表示します。

ローカル環境で動くものを作る

Google Analytics Data API (GA4)

Google社のサイトを頼りに作業を進めます。Google Analyticsの情報はUAとGA4が混在しておりUAの情報はビューIDを使うものでした。現在使用できるGA4にはビューIDは現在存在しないので、上記のページを元に作業を進めます。

APIを使えるようにする

最初に、Analytics APIを使えるようにします。上記のリンクからたどることもできますが、UAの説明が混ざって分かりにくいので、https://console.cloud.google.com/からの作業のほうが良いかもしれません。

  1. プロダクトIDの作成
  2. サービスアカウントの作成
  3. credentials.jsonの取得
  4. メールアドレスを作成しAnalyticsとの紐付け

この段階では、APIを使えるようにする事と、credentials.jsonを保存します。

クライアントライブラリをダウンロードする

調べた中ではcomposerを使わずにダウンロードしても使えるとの記載があったので試したところ、ローカルの環境とサーバー環境のどちらもエラーが出て動かなかったので、composerを使ってダウンロードします。今回はpopular_postsフォルダを作ってそこにクライアントライブラリをインストールします。

$ composer require google/analytics-data

上のコードを実行するとエラーがたくさん出ます。composerがインストールされていないようです。同じくbcmathという機能拡張も必要なことから、同じくインストールします。LinuxだとPCに簡単にインストールできますが、それ以外の場合はお使いの環境に合わせて下さい。

コードを変更してデータをキャッシュさせる

例として挙げられているPHPのコードを元にキャッシュできるように変更します。キャッシュする方法はjsonファイルに書き出す方法とデータベースに書き込む方法を考えて作成したのですが、データベースの方はセキュリティを考えてボツとしました。データーベースをWordPress以外のファイルから触る場合のセキュリティに自信がなく、それに比べてファイルの場合はより安全だと考えました。

popular_posts/ga_analytics_api.php

<?php
require 'vendor/autoload.php';

use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient;
use Google\Analytics\Data\V1beta\DateRange;
use Google\Analytics\Data\V1beta\Dimension;
use Google\Analytics\Data\V1beta\Metric;
use Google\Analytics\Data\V1beta\RunReportRequest;

// プロパティIDを設定
$property_id = '**********';

// このスクリプトの絶対パスを取得
$scriptPath = __DIR__;

// 認証情報のJSONファイルの絶対パスを指定
$credentialsPath = $scriptPath . '/credentials.json';

// 認証情報を設定
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $credentialsPath);

// Analytics Data APIクライアントのインスタンスを作成
$client = new BetaAnalyticsDataClient();

// API呼び出しを行うためのリクエストを作成
$request = (new RunReportRequest())
    ->setProperty('properties/' . $property_id)
    ->setDateRanges([
        new DateRange([
            'start_date' => '7daysAgo',
            'end_date' => 'yesterday',
        ]),
    ])
    ->setDimensions([new Dimension([
        'name' => 'pagePath',
    ])])
    ->setMetrics([new Metric([
        'name' => 'screenPageViews',
    ])])
    ->setLimit(6); // 結果の数を6に制限

// レポートを実行
$response = $client->runReport($request);

$data = [];
foreach ($response->getRows() as $row) {
    $url = $row->getDimensionValues()[0]->getValue();
    $pageViews = $row->getMetricValues()[0]->getValue();

    $data[] = [
        'url' => $url,
        'page_views' => $pageViews,
    ];
}

// 結果をJSONファイルに保存
$json_data = json_encode($data, JSON_PRETTY_PRINT);
file_put_contents(__DIR__.'/ranking_data.json', $json_data);

お使いのGoogle AnalyticsのプロパティIDとcredentials.jsonを設定すると、このga_analytics_api.phpをcronで実行することでranking_data.jsonが保存されます。

ランキングを表示させる

<?php
$ranking_data = home_url('/popular_posts/$ranking_data.json');
$opts = [
    'http' => [
        'method' => 'GET',
        'header' => 'Authorization: Basic ' . base64_encode('idididididid:passpasspass')
    ]
];
$json_data = file_get_contents($ranking_data , false, stream_context_create($opts));
$data = json_decode($json_data, true);

if ($data === null) {
    return;
} else {

    $rank = 1;
    foreach ($data as $item) {
        $url = $item['url'];
        $accessCount = $item['page_views'];
        $post_id = url_to_postid($url);
        $thumbnail = get_the_post_thumbnail($post_id, 'thumbnail');
        $title = get_the_title($post_id);
        ?>
        <a href='<?php echo $url; ?>'>
            <div><?php echo $title; ?></div>
            <p><?php echo $accessCount; ?> views</p>
            <div><?php echo $thumbnail; ?></div>
            <p><?php echo $rank; ?></p>
        </a>
        <?php
        $rank++;
    }
}
?>

ドメイン外のディレクトリにインストールすると、クライアントライブラリが動きませんでした。なにか理由があるのか調べても分からず、試行を繰り返したのですが、結局よく分からずでした。

セキュリティ対策

こうなると外部からのアクセスが可能になってしまうので対策が必要になります。

$opts = [
    'http' => [
        'method' => 'GET',
        'header' => 'Authorization: Basic ' . base64_encode('idididididid:passpasspass')
    ]
];

popular_postsのベーシック認証のIDをididididididに、passpasspassはパスワードを記入します。私の環境ではベーシック認証でcronが作動しなかったので、サーバーのIPを指定してcronが動くようにします。

Satisfy Any
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx

popular_postsフォルダにある.htaccessに追記することでcronが動くようになりました。

検索botに覗かないでもらう

Disallow: /popular_posts/

robots.txtにpopular_postsディレクトリを無視するよう記述を加えました。これでローカル環境での行う事前の用意が終了します。次に実際のレンタルサーバーでコードが動くようにします。

レンタルサーバーで動かす

composerを使わずにクライアントライブラリをアップロードしても、正常には動作しませんでした。composerを使うためにはレンタルサーバーとssh通信でつなぐ必要があります。Windowsだとアプリケーションで繋げられるようですがLinuxではコマンドラインを使いました。初めてのことで手間取り、なかなか繋がりませんでした。

レンタルサーバーとのssh通信

私の使っているレンタルサーバーではsshを使うために公開認証用鍵ペアの生成をし、鍵をダウンロードします。おそらく殆どのレンタルサーバーでも同じだと思います。鍵をダウンロードして

ssh -p aa -i bbbbb.key -l cccccc dddd.ne.jp
aaポート
bbbbb.keyダウンロードした公開認証用鍵
ccccccサーバーID
dddd.ne.jpサーバーアドレス

上のように入力してもパーミッション関連のエラーがでて繋がりません。調べると公開鍵を新たに作った.sshディレクトリへ移動し、.sshフォルダのパーミッションを700、bbbbb.keyのパーミッションを600に設定すれば繋がりました。

ssh -p aa -i .ssh/bbbbb.key -l cccccc dddd.ne.jp

composerを動かすための準備

やっとのことでcomposerを動かせる段階まで来たら、またもや山盛りのエラーがでました。

  1. Composerを使おうとするとエラーが出る
  2. Composerのバージョンが低いのが原因
  3. Composerのバージョンアップができない
  4. PHPのバージョンが低いことが原因
  5. シンボリックリンクを使ってSSH用のPHPのバージョンを上げる
  6. Composerをアップデート
  7. Analyticsクライアントライブラリのインストール

上のリストを調べながら進めてやっとクライアントライブラリがインストールされました。ここまで行けば後はローカル環境で作成したファイルをアップロードします。ローカルの環境で動作していれば実際の環境でも動くと思います。

「やりたいこと」からパッと引ける Googleアナリティクス4 設定・分析のすべ…
「やりたいこと」からパッと引ける Googleアナリティクス4 設定・分析のすべてがわかる本
小川 卓 著
Amazon.co.jp

最後までお読みいただき、誠にありがとうございます。

自作テーマ関連

Amazonと楽天APIの併記は規約違反?楽天で商品リンクを自作する Rakuten Ichiba-related APIs Amazon PA APIからCreators APIへ移行|Offers V1終了の対策と方法 Amazon Creators API iframeからHTMLへ・Turnstileで強化する問い合わせフォーム Cloudflare Turnstile Contact Form Amazon Creators APIのセール情報と表示方法を徹底的に考察する Amazon API Badge Endtime Percentage Amazon PAAPI廃止とCreators API完全移行への対策|5月15日 PAAPI 5.0 Deprecation

Google関連

タグマネージャーと連携するAmazonアソシエイト計測設定の手順解説 analytics tag manager associates Antigravity IDEからVSCodiumとAntigravity CLIの併用へ Antigravity CLI 日本語ウェブフォントのサブセット化と最適化・容量削減とCLS対策 pagespeed insights web fonts Google AdSense広告をH2上に遅延挿入するWordPress実装法 google adsense before h2 自作テーマで発生する誤ったURLをGSCから消し去る方法 google-search-console

総合ランキング

U字溝と耐火レンガで作る格安の焼鳥台の作り方と使い方 U字溝と耐火レンガで炭火を使う キャビティプロ導入で水槽管理はどう変わる?3ヶ月使用レポート キャビティプロ TOPPING Mini 300を測定値で見る!最高級の音質を誇る低価格アンプ Topping Mini 300 低価格で高音質!中華アンプとDACのASRの評価とその選び方 Fosi Audio V3 鉄久で焼鳥を焼く・焼鳥台の工夫と鉄の棒の購入と使い方 U字溝と鉄久
管理者
ほんだ

当サイトの管理者 : 炭火で美味しいものを作ることを中心に、日々の趣味についてを文章にすることで、WordPressを使ってのWebページ作成を忘れないようにするブログです。熱帯魚の世話や野菜の栽培、Linuxについて、音楽を聴くための機材やアイデアなど、興味のあることを書いています。兵庫県在住。