[PYTHON] Obtenez une liste des comptes GA, des propriétés et des vues sous forme de données verticales à l'aide de l'API

Ceci est le premier article de l'article Qiita. Je pense qu'il y a certains points qui ne peuvent pas être atteints, y compris la première utilisation de l'API, mais merci.

Présentation / Ce que vous voulez faire

Mon entreprise utilise Google Analytics (GA) pour mesurer les chiffres sur le site. Il y avait des employés et je l'utilisais depuis plus de quelques années, mais je ne pouvais pas gérer correctement l'opération et la maintenance. Divers comptes et propriétés sont devenus encombrés.

Sur l'écran de gestion GA, il est possible d'afficher la liste des comptes et des propriétés en défilant. L'objectif de cette fois est de rendre les résultats disponibles pour affichage sur des feuilles de calcul.

Essayez cette API (pour les non-ingénieurs)

En utilisant l'API suivante, vous pouvez obtenir les données de compte GA associées au compte Chrome connecté au format JSON. API de gestion> Référence> Compte: liste

Même si vous formatez le résultat de l'exécution, vous pourrez faire ce que vous voulez faire dans une certaine mesure. Convertir le fichier JSON en Excel Je souhaite convertir un fichier JSON en fichier CSV

La première méthode n'a pas pu être exécutée en raison de la version d'Excel, et lorsque j'ai essayé la deuxième méthode, un problème est survenu.

  1. Le format de la sortie n'est pas comme prévu La structure de GA est Compte> Propriétés> Affichage. Les fichiers après la conversion csv sont générés pour le nombre de lignes du compte. En outre, comme le nombre de propriétés varie d'un compte à l'autre, des données personnellement non souhaitées ont été générées.
Compte Propriété_1 Vue_1_1 Vue_1_2 ・ ・ ・ Propriété_2 ・ ・ ・
A Propriété 1 associée à A Vue 1 associée à la propriété 1 Vue 2 associée à la propriété 1 ・ ・ ・ Propriété 2 associée à A ・ ・ ・

Ce que je voulais à l'origine, c'était les données verticales suivantes.

Compte Propriété Vue
A Propriété 1 associée à A Vue 1 associée à la propriété 1
A Propriété 1 associée à A Vue 2 associée à la propriété 1
A ・ ・ ・ ・ ・ ・
A Une propriété associée 2 Vue 1 associée à la propriété 2
A ・ ・ ・ ・ ・ ・
B Propriété 1 associée à B Vue 1 associée à la propriété 1
  1. Y a-t-il une limite au nombre de comptes pouvant être acquis? Il y avait 59 comptes au moment de l'exécution dans l'entreprise, mais seuls 49 ont été acquis. J'ai joué avec les valeurs numériques des paramètres, mais j'ai essayé d'écrire du code pour obtenir les données, donc je n'ai pas étudié la cause en profondeur. Si vous avez une idée, je vous serais reconnaissant si vous pouviez commenter.

Environnement de développement / version du module

Contenu de travail à l'avance

Je travaille après avoir ajouté le compte de service émis au compte GA que je souhaite acquérir. À l'origine, je souhaitais associer un compte GA à un compte administrateur interne, mais je ne sais pas comment y faire face. ..

J'avais beaucoup de comptes et c'était dur, alors j'ai travaillé d'une seule main en chantant et j'ai survécu. Lol

Code d'implémentation

Vous trouverez ci-dessous le code d'implémentation du sujet principal.

La plupart du code d'implémentation est tiré du dessous. First Analytics API: Python Quickstart for Service Accounts

Nous utilisons l'API pour créer un df pour chaque compte, propriété et vue, et laissons un df vide s'ajouter. API de gestion> Référence> Propriétés Web: liste API de gestion> Référence> Affichage (ancien profil): liste

qiita.python


from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
import pandas as pd
import numpy as np

def get_service(api_name, api_version, scopes, key_file_location):

    credentials = ServiceAccountCredentials.from_json_keyfile_name(
            key_file_location, scopes=scopes)
    service = build(api_name, api_version, credentials=credentials)
    return service

def get_account_propaty_view_info(service):
    accounts = service.management().accounts().list().execute()

    #Stocker la liste des comptes dans df
    account_df = pd.DataFrame(columns=['account_name', 'account_id'])

    for account in accounts.get('items', []):  
        account_array = np.array([[account.get('name'), account.get('id')]])
        df_account = pd.DataFrame(data=account_array,columns=account_df.columns)
        account_df = account_df.append(df_account, ignore_index=False)

    #Stocker une liste de propriétés dans df
    property_df = pd.DataFrame(columns=['account_number','account_id', 'property_name', 'property_id'])

    #Obtenez la liste des propriétés cibles à partir du df du compte
    for i in range(len(account_df)):
        properties = service.management().webproperties().list(accountId=account_df['account_id'].iloc[i]).execute()
        for property in properties.get('items', []):
            property_array = np.array([[i, account_df['account_id'].iloc[i], property.get('name'), property.get('id')]])
            df_property = pd.DataFrame(data=property_array,columns=property_df.columns)
            property_df = property_df.append(df_property, ignore_index=False)
        
    #Stocker la liste des vues dans df
    view_df = pd.DataFrame(columns=['account_id', 'property_id', 'view_name', 'view_id'])

    #Obtenir la liste des vues cibles à partir de la propriété df
    for i in range(len(property_df)):
        views  = service.management().profiles().list(accountId=property_df['account_id'].iloc[i],
        webPropertyId=property_df['property_id'].iloc[i] ).execute()
        for view in views.get('items', []):
            view_array = np.array([[property_df['account_id'].iloc[i], property_df['property_id'].iloc[i], view.get('name'), view.get('id')]])
            df_view = pd.DataFrame(data=view_array,columns=view_df.columns)

            view_df = view_df.append(df_view, ignore_index=False)
            
    #Essayez de combiner la liste des comptes, la liste des propriétés et la liste des vues en un seul df
    #Compte en raison de la commodité du traitement au moment de l'adhésion_Si vous êtes préoccupé par la position du nombre, modifiez l'ordre des colonnes.
    ga_account_list = pd.merge(pd.merge(account_df, property_df, on='account_id', how='inner'), view_df, on=['account_id', 'property_id'], how='inner')
    ga_account_list.to_csv('Nom du fichier csv à créer', encoding='utf_8_sig')

def main():
    scope = 'https://www.googleapis.com/auth/analytics.readonly'
    key_file_location = 'Fichier de clé JSON pour le compte de service émis'

    service = get_service(
            api_name='analytics',
            api_version='v3',
            scopes=[scope],
            key_file_location=key_file_location)

    get_account_propaty_view_info(service)

if __name__ == '__main__':
    main()

Exemple de sortie courant Les identifiants des comptes ne sont pas bien organisés, j'ai donc un numéro de compte à la place.

account_name account_id account_number property_name property_id view_name view_id
A 10 0 property_1 100 view_1 1000
A 10 0 property_1 100 view_2 1001
A ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・
A 10 0 property_2 101 view_1 1100
A ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・
B 20 1 property_1 200 view_1 2000

Perspectives d'avenir

Tout d'abord, nous prévoyons d'utiliser ce résultat pour trier les comptes et propriétés inutiles.

Sur cette base, je souhaite créer un groupe pour chaque département de l'entreprise. Actuellement, l'autorité de l'AG est accordée aux individus, mais il est possible d'accorder une autorité pour chaque groupe.

M. A, qui vient de rejoindre l'entreprise, est dans le département XX, donc l'image est qu'il devrait élever l'autorité de □□. Je veux viser un avenir automatisé d'une simple pression sur un bouton.

J'espère que cela sera utile pour ceux qui ont des problèmes similaires.

Recommended Posts

Obtenez une liste des comptes GA, des propriétés et des vues sous forme de données verticales à l'aide de l'API
Obtenez des données à l'aide de l'API du ministère des Affaires intérieures et des Communications
API Twitter: obtenez une liste des comptes que vous suivez mais qui ne sont pas suivis
Obtenir des données Salesforce à l'aide de l'API REST
Automatisation d'une recherche sur des informations géographiques telles que le réseau de magasins à l'aide de Python et de l'API Web
Obtenez des données Amazon à l'aide de Keep API # 1 Obtenez des données
J'ai essayé d'obtenir une liste de noms AMI en utilisant Boto3
Obtenez la liste des colonnes et la liste des données de CASTable
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
[python] Obtenir une liste de variables d'instance
[Python] Obtenir une liste de dossiers uniquement
Connaissance de l'utilisation de l'API de données Aurora Severless
Obtenez une liste d'articles publiés par les utilisateurs avec Python 3 Qiita API v2
[Python] Obtenez tous les commentaires à l'aide de Youtube Data Api
Comment obtenir des données d'article à l'aide de l'API Qiita
Obtenir une liste d'utilisateurs IAM avec Boto3
Obtenez la liste "J'aime" de Qiita en grattant
Obtenez une grande quantité de données Twitter de Starba avec python et essayez l'analyse de données Partie 1
J'ai créé un site de liste de Kindle Prime Reading en utilisant Scrapy et GitHub Actions
Je souhaite obtenir des attributs de données personnalisés de HTML sous forme d'éléments à l'aide de Python Selenium
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
Utilisez l'API Spotify pour obtenir toutes les chansons des informations sur les chansons d'Arashi et vérifier l'index
Obtenez le nom de la variable sous forme de chaîne de caractères.
Liste des bibliothèques Python pour les data scientists et les data ingénieurs
Générer une image verticale d'un roman à partir de données textuelles
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
[Python] Obtenez des données insight à l'aide de l'API Google My Business
Obtenez des commentaires et des abonnés avec l'API de données YouTube
J'ai essayé d'utiliser l'API de Sakenowa Data Project
Python: obtenir une liste de méthodes pour un objet
Obtenez une liste des métriques CloudWatch et une table de correspondance des unités unitaires avec Python boto
Obtenez le prix d'achat et de vente de la monnaie virtuelle avec l'API de l'échange Zaif et créez un graphique