2017-06-08 18 views
2

これはGAデータを取得するコードですが、アカウント選択の際にブラウザで常に尋ねられます。 PHPスクリプトのデフォルトアカウントを定義する方法。アカウント選択用のダイアログを表示せずにサーバー側にGoogleアカウントを設定する

私は何が欠けていますか?

これは、GAドキュメントのindex.phpに等しい私はsymfonyフレームワークを使用し、これは、GAドキュメントのoauth2callback.phpに等しく、このルート

/** 
* @Route("/get-google-analytics-data") 
*/ 
public function getGoogleAnalyticsData() { 
    $ga = $this->get('google_analytics_service'); 

    $client = new \Google_Client(); 
    $client->setAuthConfig(__DIR__ . '/client_secrets.json'); 
    $client->addScope(\Google_Service_Analytics::ANALYTICS_READONLY); 


    // If the user has already authorized this app then get an access token 
    // else redirect to ask the user to authorize access to Google Analytics. 
    if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { 
     // Set the access token on the client. 
     $client->setAccessToken($_SESSION['access_token']); 

     // Create an authorized analytics service object. 
     $analytics = new \Google_Service_AnalyticsReporting($client); 

     // Call the Analytics Reporting API V4. 
     $response = $ga->getReport($analytics); 

     // Print the response. 
     return new \Symfony\Component\HttpFoundation\Response($ga->printResults($response)); 

    } else { 
     $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback'; 
     header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 

     return $this->redirect($redirect_uri); 
    } 

を変更することを決めました。

} 
/** 
* @Route("/oauth2callback", name="gaOA2callback") 
*/ 
public function gaOA2callback() { 
    $client = new \Google_Client(); 
    $client->setAuthConfig(__DIR__ .'/client_secrets.json'); 
    $client->setRedirectUri('http://' . $_SERVER["HTTP_HOST"] . '/oauth2callback'); 
    $client->addScope(\Google_Service_Analytics::ANALYTICS_READONLY); 

// Handle authorization flow from the server. 
     if (! isset($_GET['code'])) { 
     $auth_url = $client->createAuthUrl(); 
     header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); 

     return $this->redirect($auth_url); 
    } else { 
     $client->authenticate($_GET['code']); 
     $_SESSION['access_token'] = $client->getAccessToken(); 
     $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/get-google-analytics-data'; 
     header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 

     return $this->redirect($redirect_uri); 
    } 
} 

答えて

0

まず、これは悪い考えでした。私はGA APIとの間違ったやりとりを使っていました。

function initializeAnalytics() 
    { 
     // Use the developers console and download your service account 
     // credentials in JSON format. Place them in this directory or 
     // change the key file location if necessary. 
     $KEY_FILE_LOCATION = __DIR__ . '/service-account-credentials.json'; 

     // Create and configure a new client object. 
     $client = new \Google_Client(); 
     $client->setApplicationName("Hello Analytics Reporting"); 
     $client->setAuthConfig($KEY_FILE_LOCATION); 
     $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly', 'https://www.googleapis.com/auth/analytics']); 
     $analytics = new \Google_Service_AnalyticsReporting($client); 

     return $analytics; 
    } 

機能に含まれる.jsonファイルが表示されます。このファイルは、OAuth 2.0クライアントID からGoogleコンソールダッシュボードからダウンロードできます。

https://console.developers.google.com/apis/credentials?project=&authuser=1

あなたがそれらを持っていない場合は、新しいものを作成するために定義されます。

最も重要なことは、あなたが が許可拒否エラーを取得し、おそらくあなたが他の場所で 解決策を探しますことを実行しない場合は、は、有効なview_idのを入力してください。

このAPIのユーザーはあなたのメールアドレスではありません。それはサービスの電子メールです、zouは.jsonファイルでそれを見つけるでしょう。また、そのサービスメールの役割を設定する必要があります。基本的な使用のために、表示許可はうまくいくでしょう。

最後に、データを取得するために、このような関数で行うことができます。

$ VIEW_ID = "123625914"; // **表示IDはのように見えますが、あなたのプロジェクトのGAレポートダッシュボードでこれらの集計を見つけることができます。**

function getReport($analytics, $nameSystem) { 

    // Replace with your view ID, for example XXXX. 
    $VIEW_ID = "123625914"; 

    // Create the DateRange object. 
    $dateRange = new \Google_Service_AnalyticsReporting_DateRange(); 
    $dateRange->setStartDate("4000daysAgo"); 
    $dateRange->setEndDate("today"); 

    $today = new \Google_Service_AnalyticsReporting_DateRange(); 
    $today->setStartDate("today"); 
    $today->setEndDate("today"); 

    // Create the Metrics object. 
    $views = new \Google_Service_AnalyticsReporting_Metric(); 
    $views->setExpression("ga:pageviews"); 
    $views->setAlias("views"); 

    $user = new \Google_Service_AnalyticsReporting_Metric(); 
    $user->setExpression("ga:users"); 
    $user->setAlias("user"); 

    $country = new \Google_Service_AnalyticsReporting_Dimension(); 
    $country->setName("ga:country"); 

    $continent = new \Google_Service_AnalyticsReporting_Dimension(); 
    $continent->setName("ga:continent"); 

    $event = new \Google_Service_AnalyticsReporting_Dimension(); 
    $event->setName("ga:eventLabel"); 
    $event->setName("ga:eventCategory"); 

    // Create the ReportRequest object. 
    $request = new \Google_Service_AnalyticsReporting_ReportRequest(); 
    $request->setViewId($VIEW_ID); 
    $request->setDateRanges([$dateRange, $today]); 
    $request->setMetrics(array($views, $user)); 
    $request->setDimensions(array($event)); 
    $request->setFiltersExpression('ga:eventCategory==' . $nameSystem); 

    $request1 = new \Google_Service_AnalyticsReporting_ReportRequest(); 
    $request1->setViewId($VIEW_ID); 
    $request1->setDateRanges([$dateRange, $today]); 
    $request1->setMetrics(array($user)); 
    $request1->setDimensions(array($continent, $event)); 
    $request->setFiltersExpression('ga:eventCategory==' . $nameSystem); 

    $request2 = new \Google_Service_AnalyticsReporting_ReportRequest(); 
    $request2->setViewId($VIEW_ID); 
    $request2->setDateRanges([$dateRange, $today]); 
    $request2->setMetrics(array($user)); 
    $request2->setDimensions(array($event)); 
    $request2->setFiltersExpression('ga:eventCategory==' . $nameSystem); 


    $body = new \Google_Service_AnalyticsReporting_GetReportsRequest(); 
    $body->setReportRequests(array($request, $request1, $request2)); 
    return $analytics->reports->batchGet($body); 
} 
関連する問題