【问题标题】:simple example for getting google access token using oauth2.0 java使用 oauth2.0 java 获取谷歌访问令牌的简单示例
【发布时间】:2017-11-16 01:55:45
【问题描述】:

我想使用谷歌访问令牌获取谷歌分析数据,但我没有找到任何示例,我收到“线程中的异常”

"main" java.net.SocketException: 连接重置"

错误,下面是代码:-

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.analyticsreporting.v4.AnalyticsReporting;
import com.google.api.services.analyticsreporting.v4.model.DateRange;
import com.google.api.services.analyticsreporting.v4.model.Dimension;
import com.google.api.services.analyticsreporting.v4.model.GetReportsRequest;
import com.google.api.services.analyticsreporting.v4.model.GetReportsResponse;
import com.google.api.services.analyticsreporting.v4.model.Metric;
import com.google.api.services.analyticsreporting.v4.model.ReportRequest;

public class AnalyticsApiTest {
    public static void main(String[] args) throws Exception {
        GoogleCredential credential = GoogleCredential
                .fromStream(new FileInputStream(new File("d:\\clientsecretnew.json")))
                .createScoped(Collections.singleton("https://www.googleapis.com/auth/analytics.readonly"));
        HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
        AnalyticsReporting analyticsReporting = new AnalyticsReporting.Builder(httpTransport, jsonFactory, credential)
                .setApplicationName("testing_analytics")
                .build();

        DateRange dateRange = new DateRange();
        dateRange.setStartDate("2017-06-11");
        dateRange.setEndDate("2017-06-13");

        // Create the Metrics object.
        Metric sessions = new Metric()
            .setExpression("ga:pageview")
            .setAlias("sessions");

        //Create the Dimensions object.
        Dimension browser = new Dimension()
            .setName("ga:browser");

        // Create the ReportRequest object.
        ReportRequest request = new ReportRequest()
            .setViewId("ga:152411###")
            .setDateRanges(Arrays.asList(dateRange))
            .setDimensions(Arrays.asList(browser))
            .setMetrics(Arrays.asList(sessions));

        ArrayList<ReportRequest> requests = new ArrayList<ReportRequest>();
        requests.add(request);

        // Create the GetReportsRequest object.
        GetReportsRequest getReport = new GetReportsRequest()
            .setReportRequests(requests);

        // Call the batchGet method.
        GetReportsResponse response = analyticsReporting.reports().batchGet(getReport).execute();


    }
}

谁能告诉这其中有什么问题??

【问题讨论】:

    标签: java google-api google-oauth google-analytics-api google-api-java-client


    【解决方案1】:

    我认为您应该尝试关注Googles tutorials。这是我使用的代码ga:pageview 不是一个有效的指标,它的ga:pageviews

    我的代码:

    import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
    import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
    import com.google.api.client.auth.oauth2.Credential;
    import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
    import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.HttpTransport;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.client.util.store.DataStoreFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.analyticsreporting.v4.AnalyticsReporting;
    import com.google.api.services.analyticsreporting.v4.AnalyticsReportingScopes;
    import com.google.api.services.analyticsreporting.v4.model.*;
    
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    
    /**
     * @author Linda Lawton
     */
    public class ReportingSample {
    
        /**
         * Be sure to specify the name of your application. If the application name is {@code null} or
         * blank, the application will log a warning. Suggested format is "MyCompany-ProductName/1.0".
         */
        private static final String APPLICATION_NAME = "DAIMTO Google Analytics Reporting V4 sample";
    
        /** Directory to store user credentials. */
        private static final java.io.File DATA_STORE_DIR =
                new java.io.File(System.getProperty("user.home"), ".store/reporting_sample");
    
        /**
         * Global instance of the {@link DataStoreFactory}. The best practice is to make it a single
         * globally shared instance across your application.
         */
        private static FileDataStoreFactory dataStoreFactory;
    
        /** Global instance of the HTTP transport. */
        private static HttpTransport httpTransport;
    
        /** Global instance of the JSON factory. */
        private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    
        private static AnalyticsReporting service ;
    
        /** Authorizes the installed application to access user's protected data. */
        private static Credential authorize() throws Exception {
            // load client secrets
            GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
                    new InputStreamReader(ReportingSample.class.getResourceAsStream("/client_secrets.json")));
    
            // set up authorization code flow
            GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                    httpTransport, JSON_FACTORY, clientSecrets,
                    Collections.singleton(AnalyticsReportingScopes.ANALYTICS_READONLY)).setDataStoreFactory(
                    dataStoreFactory).build();
            // authorize
            return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
        }
    
        public static void main(String[] args) {
            try {
                httpTransport = GoogleNetHttpTransport.newTrustedTransport();
                dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
                // authorization
                Credential credential = authorize();
                // set up global Analytics instance
                service = new  AnalyticsReporting.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName(
                        APPLICATION_NAME).build();
                // run commands
    
                fetchData(service);
                // success!
                return;
            } catch (IOException e) {
                System.err.println(e.getMessage());
            } catch (Throwable t) {
                t.printStackTrace();
            }
            System.exit(1);
        }
    
    
        public static void fetchData(AnalyticsReporting service) throws IOException{
    
            DateRange dateRange = new DateRange();
            dateRange.setStartDate("2017-06-11");
            dateRange.setEndDate("2017-06-13");
    
            // Create the Metrics object.
            Metric sessions = new Metric()
                    .setExpression("ga:sessions")
                    .setAlias("sessions");
    
            //Create the Dimensions object.
            Dimension browser = new Dimension()
                    .setName("ga:browser");
    
            // Create the ReportRequest object.
            ReportRequest request = new ReportRequest()
                    .setViewId("ga:78110423")
                    .setDateRanges(Arrays.asList(dateRange))
                    .setDimensions(Arrays.asList(browser))
                    .setMetrics(Arrays.asList(sessions));
    
            ArrayList<ReportRequest> requests = new ArrayList<ReportRequest>();
            requests.add(request);
    
            // Create the GetReportsRequest object.
            GetReportsRequest getReport = new GetReportsRequest()
                    .setReportRequests(requests);
    
            // Call the batchGet method.
            GetReportsResponse response = service.reports().batchGet(getReport).execute();
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 2013-07-20
      • 2016-04-19
      • 2021-11-27
      • 2017-04-23
      • 2014-05-04
      • 2019-08-17
      • 2019-08-18
      • 1970-01-01
      相关资源
      最近更新 更多