[PYTHON] Rufen Sie mithilfe der API eine Liste der GA-Konten, -Eigenschaften und -Ansichten als vertikale Daten ab

Dies ist der erste Beitrag des Qiita-Artikels. Ich denke, es gibt einige Punkte, die nicht erreicht werden können, einschließlich der ersten Verwendung der API, aber danke.

Übersicht / Was Sie tun möchten

Mein Unternehmen verwendet Google Analytics (GA), um die Zahlen auf der Website zu messen. Es gab einige Mitarbeiter und ich hatte es seit mehr als ein paar Jahren benutzt, aber ich konnte den Betrieb und die Wartung nicht richtig handhaben. Verschiedene Konten und Immobilien sind überfüllt.

Auf dem GA-Verwaltungsbildschirm ist es möglich, die Liste der Konten und Eigenschaften während des Bildlaufs anzuzeigen. Ziel dieser Zeit ist es, die Ergebnisse für die Anzeige in Tabellenkalkulationen verfügbar zu machen.

Probieren Sie diese API aus (für Nicht-Ingenieure)

Mithilfe der folgenden API können Sie die GA-Kontodaten des angemeldeten Chrome-Kontos im JSON-Format abrufen. Verwaltungs-API> Referenz> Konto: Liste

Selbst wenn Sie das Ausführungsergebnis formatieren, können Sie bis zu einem gewissen Grad das tun, was Sie möchten. JSON-Datei in Excel konvertieren Ich möchte eine JSON-Datei in eine CSV-Datei konvertieren

Die erste Methode konnte aufgrund der Excel-Version nicht ausgeführt werden, und als ich die zweite Methode tatsächlich ausprobierte, trat ein Problem auf.

  1. Das Format der Ausgabe ist nicht wie vorgesehen Die Struktur von GA lautet Konto> Eigenschaften> Ansicht. Die Dateien nach der CSV-Konvertierung werden für die Anzahl der Zeilen im Konto ausgegeben. Da die Anzahl der Eigenschaften von Konto zu Konto unterschiedlich ist, wurden auch persönliche unbeabsichtigte Daten generiert.
Konto Eigentum_1 Aussicht_1_1 Aussicht_1_2 ・ ・ ・ Eigentum_2 ・ ・ ・
A Eigenschaft 1 in Verbindung mit A. Ansicht 1, die der Eigenschaft 1 zugeordnet ist Ansicht 2, die der Eigenschaft 1 zugeordnet ist ・ ・ ・ Eigenschaft 2 in Verbindung mit A. ・ ・ ・

Was ich ursprünglich wollte, waren die folgenden vertikalen Daten.

Konto Eigentum Aussicht
A Eigenschaft 1 in Verbindung mit A. Ansicht 1, die der Eigenschaft 1 zugeordnet ist
A Eigenschaft 1 in Verbindung mit A. Ansicht 2, die der Eigenschaft 1 zugeordnet ist
A ・ ・ ・ ・ ・ ・
A Eine zugehörige Eigenschaft 2 Ansicht 1 in Verbindung mit Eigenschaft 2
A ・ ・ ・ ・ ・ ・
B Eigenschaft 1 in Verbindung mit B. Ansicht 1, die der Eigenschaft 1 zugeordnet ist
  1. Gibt es eine Begrenzung für die Anzahl der Konten, die erworben werden können? Zur Laufzeit gab es im Unternehmen 59 Konten, aber nur 49 wurden erworben. Ich habe mit den numerischen Werten der Parameter herumgespielt, aber ich habe versucht, Code zu schreiben, um die Daten zu erhalten, deshalb habe ich die Ursache nicht gründlich untersucht. Wenn Sie eine Idee haben, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.

Entwicklungsumgebung / Modulversion

Arbeitsinhalt im Voraus

Ich arbeite, nachdem ich das ausgestellte Dienstkonto dem GA-Konto hinzugefügt habe, das ich erwerben möchte. Ursprünglich wollte ich ein GA-Konto mit einem internen Administratorkonto verknüpfen, aber ich weiß nicht, wie ich damit umgehen soll. ..

Ich hatte viele Berichte und es war schwer, also arbeitete ich mit einer Hand beim Singen und überlebte. Lol

Implementierungscode

Unten finden Sie den Implementierungscode für das Hauptthema.

Der größte Teil des Implementierungscodes stammt von unten. Erste Analytics-API: Python-Schnellstart für Dienstkonten

Wir verwenden die API, um für jedes Konto, jede Eigenschaft und jede Ansicht eine df zu erstellen und eine leere df anhängen zu lassen. Verwaltungs-API> Referenz> Web-Eigenschaften: Liste Verwaltungs-API> Referenz> Ansicht (altes 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()

    #Speichern Sie die Liste der Konten in 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)

    #Speichern Sie eine Liste der Eigenschaften in df
    property_df = pd.DataFrame(columns=['account_number','account_id', 'property_name', 'property_id'])

    #Rufen Sie die Zieleigenschaftsliste aus der Datenbank des Kontos ab
    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)
        
    #Speichern Sie die Liste der Ansichten in df
    view_df = pd.DataFrame(columns=['account_id', 'property_id', 'view_name', 'view_id'])

    #Rufen Sie die Zielansichtsliste aus der Eigenschaft df ab
    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)
            
    #Versuchen Sie, die Liste der Konten, die Liste der Eigenschaften und die Liste der Ansichten in einem df zu kombinieren
    #Konto aufgrund der Bequemlichkeit der Verarbeitung zum Zeitpunkt des Beitritts_Wenn Sie über die Position der Nummer besorgt sind, ändern Sie die Reihenfolge der Spalten.
    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('Name der zu erstellenden CSV-Datei', encoding='utf_8_sig')

def main():
    scope = 'https://www.googleapis.com/auth/analytics.readonly'
    key_file_location = 'JSON-Schlüsseldatei für das ausgestellte Dienstkonto'

    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()

Beispiel für die aktuelle Ausgabe Die IDs der Konten sind nicht ordentlich angeordnet, daher habe ich stattdessen eine Kontonummer.

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

Zukunftsaussichten

Zunächst möchten wir dieses Ergebnis verwenden, um unnötige Konten und Eigenschaften zu sortieren.

Auf dieser Grundlage möchte ich für jede Abteilung im Unternehmen eine Gruppe erstellen. Derzeit wird die GA-Berechtigung Einzelpersonen erteilt, es ist jedoch möglich, die Berechtigung für jede Gruppe zu erteilen.

Herr A, der neu in das Unternehmen eintritt, ist in der XX-Abteilung, daher ist das Bild, dass er die Autorität von □□ erhöhen sollte. Ich möchte eine Zukunft anstreben, die per Knopfdruck automatisiert wird.

Ich hoffe, es wird für diejenigen hilfreich sein, die ähnliche Probleme haben.

Recommended Posts

Rufen Sie mithilfe der API eine Liste der GA-Konten, -Eigenschaften und -Ansichten als vertikale Daten ab
Erhalten Sie Daten mithilfe der API des Ministeriums für innere Angelegenheiten und Kommunikation
Twitter-API: Rufen Sie eine Liste der Konten ab, denen Sie folgen, die jedoch nicht zurückverfolgt werden
Abrufen von Salesforce-Daten mithilfe der REST-API
Automatisierung einer Recherche zu geografischen Informationen wie dem Speichernetzwerk mithilfe von Python und Web-API
Abrufen von Amazon-Daten mit Keep API # 1 Abrufen von Daten
Ich habe versucht, mit Boto3 eine Liste der AMI-Namen zu erhalten
Holen Sie sich die Spaltenliste und Datenliste von CASTable
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
[Python] Ruft eine Liste der Instanzvariablen ab
[Python] Nur eine Liste der Ordner abrufen
Kenntnis der Verwendung der Aurora Severless Data API
Holen Sie sich eine Liste der Artikel, die von Benutzern mit Python 3 Qiita API v2 veröffentlicht wurden
[Python] Holen Sie sich alle Kommentare mit Youtube Data Api
So erhalten Sie Artikeldaten mithilfe der Qiita-API
Holen Sie sich eine Liste der IAM-Benutzer mit Boto3
Holen Sie sich Qiitas "Gefällt mir" -Liste durch Schaben
Holen Sie sich mit Python eine große Menge von Starbas Twitter-Daten und probieren Sie die Datenanalyse Teil 1 aus
Ich habe mit Scrapy- und GitHub-Aktionen eine Listenseite für Kindle Prime Reading erstellt
Ich möchte benutzerdefinierte Datenattribute von HTML als Elemente mit Python Selenium erhalten
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Verwenden Sie die Spotify-API, um alle Songs von Arashis Songinformationen abzurufen und den Index zu überprüfen
Ruft den Variablennamen der Variablen als Zeichenfolge ab.
Liste der Python-Bibliotheken für Datenwissenschaftler und Dateningenieure
Generieren Sie aus Textdaten ein vertikales Bild eines Romans
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
[Python] Abrufen von Insight-Daten mithilfe der Google My Business-API
Erhalten Sie Kommentare und Abonnenten mit der YouTube-Daten-API
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Python: Ruft eine Liste der Methoden für ein Objekt ab
Holen Sie sich eine Liste der CloudWatch-Metriken und eine Entsprechungstabelle der Einheiteneinheiten mit Python boto
Holen Sie sich den Kauf- und Verkaufspreis der virtuellen Währung mit der API von Zaif Exchange und erstellen Sie ein Diagramm