0

oath2 を使用して Google API レスポンスからユーザー情報を取得できます。しかし、それらの応答を個別に取得する方法がわかりません。

Google API からの応答: *

Access token: ya29.AHES6ZQ3QxKxnfAzpZasdfd23423NuxJs29gMa39MXV551yMmyM5IgA 
     {
     "id": "112361XXXXXXXXXXX",
     "name": "Ansuman XX",
     "given_name": "Ansuman",
     "family_name": "Singh",
     "link": "https://plus.google.com/XXXXXXXXXXXXXXXXX",
     "gender": "male",
     "birthday": "0000-03-18",
     "locale": "en"
    }
    Original Token: ya29.AHES6ZQ3QxKxnfAzpZu0lYHYu8sdfsdafdgMa39MXV551yMmyM5IgA New Token: ya29.AHES6ZQ3QxKxnfdsfsdaYHYu8TNuxJs29gMa39MXV551yMmyM5IgA 

しかし、データベーステーブルに個別に保存するのは「id」と「name」だけです。これどうやってするの?

以下のコードを使用して、上記の応答/出力を取得しました。

             public static void main(String[] args) throws IOException 
          {

            -------------------------
            -------------------------
            -------------------------        

            String accessToken = authResponse.accessToken;
            GoogleAccessProtectedResource access = new GoogleAccessProtectedResource(accessToken, TRANSPORT, JSON_FACTORY, CLIENT_ID, CLIENT_SECRET, authResponse.refreshToken); 
            HttpRequestFactory rf = TRANSPORT.createRequestFactory(access);
            System.out.println("Access token: " + authResponse.accessToken); 
            String url = "https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token="   + authResponse.accessToken;
                final StringBuffer r = new StringBuffer(); 
                    final URL u = new URL(url);
                    final URLConnection uc = u.openConnection();
                    final int end = 1000;
                    InputStreamReader isr = null;
                    BufferedReader br = null; 
                        isr = new InputStreamReader(uc.getInputStream());
                        br = new BufferedReader(isr);
                        final int chk = 0;
                        while ((url = br.readLine()) != null)
                        {
                            if ((chk >= 0) && ((chk < end)))
                            {
                                r.append(url).append('\n');
                            }
                         } 
              System.out.print("");
              System.out.println();
 System.out.print(" "+   r ); //this is printing at once but i want them individually
              access.refreshToken();
 System.out.println("Original Token: " + accessToken + " New Token: " + access.getAccessToken());
          }
4

1 に答える 1

0

結果として得られる JSON オブジェクト全体に対して、このような JSON ライブラリ(単純さを重視して設計されています。ここに例を示します) を使用することも、独自の正規表現コードを使用することもできます。後者の場合、次のようなものが機能する可能性があります。

//.... other existing code
String pat = "\"(.*)\": \"(.*)\"";
Pattern pattern = Pattern.compile(pat);
Matcher matcher = null;
Map<String,String> map = new HashMap<String,String>();

while ((url = br.readLine()) != null) {
    if ((chk >= 0) && ((chk < end))) {  
        matcher = pattern.matcher(url);
        if(matcher.find()) {
            map.put(matcher.group(1), matcher.group(2));
        }
        //r.append(url).append('\n');
    }
} 
System.out.println(map.get("id"));
//... rest of code

ライブラリのアプローチはやり過ぎかもしれませんが、データ型の変換などを処理する可能性があります。また、私の悲しい正規表現に対して、文字列以外のデータ型を処理する必要があります。

于 2012-11-09T04:56:56.153 に答える