1

Google plus でユーザーの投稿を取得する際に問題が発生しました。このユーザーのアクセス トークンとリフレッシュ トークンしか持っていません (ID ではありません!)。このユーザーの Google プラスからの投稿を取得するにはどうすればよいでしょうか? ユーザーがフロントエンド側で自分の google plus Id を提供すると、アクセス トークンとリフレッシュ トークンが生成され、データベースに保存されます。バックエンド側では、これらのトークンを使用してこのユーザーの投稿を取得します。p/s: このライブラリhttps://code.google.com/p/google-plus-java-api/を使用しています。見た目がシンプルなので、投稿を取得するためだけに複雑なライブラリを使用したくありません。どうもありがとう

ここに私のコードがあります

    import com.googlecode.googleplus.GooglePlusFactory;
    import com.googlecode.googleplus.Plus;
    import com.googlecode.googleplus.model.activity.ActivityCollection;
    import com.googlecode.googleplus.model.activity.ActivityFeed;

    public void getInfo(String accessToken, String refreshToken) {
    
    GooglePlusFactory factory = new GooglePlusFactory(clientId, clientSecret);
    Plus plus = factory.getApi(accessToken, refreshToken,null);
    if (plus != null) {
        ActivityFeed af = plus.getActivityOperations().list("me",ActivityCollection.PUBLIC);
        String firstpost = af.getItems().get(0).getObject().getContent();
     } 

、このメソッドを呼び出すと403エラーが発生しました。エラー出力は次のとおりです。

 403 Forbidden 
 { 
   "code" : 403, 
    "errors" : [ { 
   "domain" : "usageLimits", 
   "message" : "Daily Limit Exceeded. Please sign up", 
   "reason" : "dailyLimitExceededUnreg", 
   "extendedHelp" : "https://code.google.com/apis/console" 
  } ], 
  "message" : "Daily Limit Exceeded. Please sign up" 
 } 

実はその理由は1日の上限を超えたからではなく、初回起動時にそのメッセージが出たので、Google APIコンソールでgoogle+ api、google+ domain apiも回しています。エラーは、「リスト」メソッドで「me」を使用して投稿を取得したことが原因だと思います。この問題を解決する方法がまだわかりません

更新 #1 #:

私は自分のコードを大幅に変更したので、これがまさに私が行き詰まったものであり、すでに新しいaccessTokenを取得しており、(まだ期限切れになっていない場合)以下のコードを実行します。

        GoogleCredential credential = new GoogleCredential.Builder()
       .setJsonFactory(JSON_FACTORY)
       .setTransport(TRANSPORT)
       .setClientSecrets(CLIENT_ID, CLIENT_SECRET).build().setAccessToken(newAccessToken);


        // Create a new authorized API client.
        Plus service = new Plus.Builder(TRANSPORT, JSON_FACTORY, credential)
            .setApplicationName(APPLICATION_NAME)
            .build();
        // Get a list of people that this user has shared with this app.
        ActivityFeed feed = service.activities().list("me", "public").execute()

次に、このエラーが発生しました:

         com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
         {
           "code" : 403,
            "errors" : [ {
           "domain" : "global",
           "message" : "Insufficient Permission",
           "reason" : "insufficientPermissions"
         } ],
          "message" : "Insufficient Permission"
         }
4

2 に答える 2

2

list 呼び出しの ID として「me」を使用すると、正しく機能し、コードは通常正しく表示されます。

エラー メッセージは、クライアントが登録されていないことを示しています。私は次のことを確認するためにチェックします。

プロジェクトのクライアント ID とシークレットを作成し (ここには投稿しないでください)、それらを GooglePlusFactory に正しく渡していることを確認してください。

承認された API アクセス

このプロジェクトで Google+ API がオンになっていることを確認してください。

Google+ API

ユーザーに提供するアクセス トークンが、この同じプロジェクトに対して認証するユーザーに対応していることを確認してください。

于 2013-08-29T11:37:58.750 に答える
1

私はこの問題を解決しました。1 つのことを除いてすべて問題ありません。アクセス トークンとリフレッシュ トークンが一部のスコープによって作成されましたが、スコープ Plus.me では作成されませんでした。このリフレッシュ トークンを使用して新しいアクセス トークンを要求できないのはなぜですか。そして、権限不足エラー403が発生しました。したがって、割り当てられたスコープを使用して新しいアクセストークンとリフレッシュトークンを取得すると、キーワード「me」でクエリできます。あなたが私のように立ち往生しないことを願っています。それを理解するのに2日近くかかります

于 2013-08-30T11:16:13.337 に答える