読者です 読者をやめる 読者になる 読者になる

アニマネ開発日誌

アニメアプリのアニマネの開発日誌です。

GoogleAnalytics APIで作るアプリコンテンツの人気ランキング

アプリで計測しているデータを使って下記のようなページを作ってみました。

app.animane.net

好評なら定期的にやろうかなと思います。

こういうアプリの人気コンテンツのランキングを真面目に実装しようとすると意外と面倒なものですが、
今回はGoogle Analytics APIを使って簡単に作れたので、その方法を紹介してみます。

前提条件

用意するもの

Google Analyticsのアカウントは無料の通常アカウントで問題ありません。 また、APIを使うGoogleのアカウントと別でも問題ありません。

Google AnalyticsAPIは1日50,000リクエストまでなら無料です。(2015年10月現在)

アプリ側の用意

それでは実際の作成手順。 まずはアプリ側から。

Google Analytics SDKの導入

アプリ側には事前にGoogle Analyticsが導入されている必要があります。

iOSでもAndroidでも無料で導入できるので、これを機会にぜひ導入してみてください。

導入方法は簡単で、検索すればいくらでも出てくるので特に解説はしませんが、cocoapods経由で入れると楽です。

あと、Objective-Cの場合はMethod Swizzlingを使うと簡単に組み込めます。

UIViewControllerのCategoryにするとこんな感じ。

#import <UIKit/UIKit.h>

@interface UIViewController (GAInject)

@property (nonatomic, retain) NSString *pageName;

+ (void)exchangeMethod;

@end

#import <objc/runtime.h>
#import "AppDelegate.h"
#import "UIViewController+GAInject.h"
#import "GAITracker.h"

@implementation UIViewController (GAInject)


-(NSNumber*) pageName {
    return objc_getAssociatedObject(self, @selector(setPageName:));
}
-(void)setPageName:(NSString*)val {
    objc_setAssociatedObject(self, _cmd, val, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

/**
 置き換えるメソッドの指定
 */
+ (void)exchangeMethod
{
    [self exchangeInstanceMethodFrom:@selector(viewDidAppear:) to:@selector(replacedViewDidAppear:)];
}

/**
 メソッドの入れ替え
 */
+ (void)exchangeInstanceMethodFrom:(SEL)from to:(SEL)to
{
    Method fromMethod = class_getInstanceMethod(self, from);
    Method toMethod   = class_getInstanceMethod(self, to);
    method_exchangeImplementations(fromMethod, toMethod);
}

/**
 置き換えたメソッド
 */
- (void)replacedViewDidAppear:(BOOL)animated
{
    //元のメソッドを呼び出し
    [self replacedViewDidAppear:animated];

    //GAのインスタンス
    id <GAITracker>tracker = [[GAI sharedInstance] defaultTracker];
    id view = [GAIDictionaryBuilder createScreenView];
    tracker.allowIDFACollection = YES;
    
    //クラス名を取得してスクリーンネームにする
    [tracker set:kGAIScreenName value:NSStringFromClass([self class])];
    //ページ名が設定されていれば追加
    [tracker set:kGAIPage value:self.pageName];
    
    //トラッキングコードの送信
    [tracker send:[view build]];
}

@end

Swiftも下記を見る限りでは同様のことができそうなので、UIViewControllerにMethod Swizzlingを使って入れてあげると、全画面に組み込む手間が省ける。

SwiftでMethod Swizzling - Qiita

Swiftの方が簡単そう。

アニマネも早く移行しないとなぁ。

ランキングの指標の用意

SDKが導入できたら、今度は計測対象の用意です。

Google Analyticsのスクリーンビューやイベントなどを設定する必要があります。

前項のような形でMethod Swizzlingを使っているなら、スクリービューのページ名にクラス名が入っているので、これをそのまま計測すれば楽ちん。

アニマネでは番組表から見たいアニメを毎週通知するという機能があるので、これをイベントでトラッキングしています。

Google Analytics APIでデータを取得する。

アプリ側の導入が終わったあとは、実際にデータを取得してみます。

APIの利用準備

https://syncer.jp/google-analytics-api-tutorial

上記がとても分かりやすいので、特に解説はしません。 現在の画面とは所々違う箇所があるけど、読めば大体分かると思う。

プログラミング環境の用意

https://developers.google.com/api-client-library/

主要な言語のSDKは揃ってるので、上記からお好きな言語を選んでください。

実際にデータを取得してみる

PHPの場合、要点だけをコードにすると下記のような感じ

<?php
require_once YOUR_LIBRARY_PATH.'/google-api-php-client/autoload.php' ;

$client = new Google_Client();
$client->setApplicationName("Google Analytics PHP Starter Application");
$client->setClientId( YOUR_CLIENT_ID );
$client->setAssertionCredentials(new Google_Auth_AssertionCredentials(
    YOUR_CLIENT_MAIL,
    array(
        Google_Service_Analytics::ANALYTICS_READONLY,
        Google_Service_Webmasters::WEBMASTERS_READONLY
    ),
    file_get_contents( YOUR_P12_PATH )
));
$service = new Google_Service_Analytics( $client );
$result = $service->data_ga->get(
    'ga:'.$view_id,
    '2015-09-20',
    '2015-09-30',
    'ga:users,ga:avgEventValue',
    array(
        'dimensions' => 'ga:eventLabel',
        'max-results' => '100',
        'filters' => 'ga:eventCategory==your_event_category;ga:eventAction==your_event_action',
        'sort' => '-ga:users',
    )
);
$rows = $result->getRows();
foreach( $rows as $i => $row ){
    //取得したデータを加工
    //アニマネの場合はイベントラベルが作品のIDなので、DBに接続して作品情報を取得したりしました。
}

オプションとかは下記のリファレンスを見れば問題ないはず。

Core Reporting API - Reference Guide  |  Analytics Core Reporting API  |  Google Developers

Dimensions & Metrics Explorer  |  Analytics Core Reporting API  |  Google Developers

これだけでデータの取得はできるので、あとはそれを加工してアプリのコンテンツにしたり、 Webサイトのコンテンツにしたり、自由に加工してみてください。

あと、大規模サイトなどでアクセスが多いケースだとデータが間引かれている可能性あるため、正確な計測には向きません。

今回紹介した方法はWebサイトで取得したデータでも可能なので、Google Analyticsを導入済みのサイトであれば気軽にランキングが作れます。 アプリでもWebサイトでもぜひやってみてください。