1

如何使用等效的Java API執行與Google .Net sample at subsection "Performing OAuth 2.0"相同的流程?來自Java/Scala的使用谷歌gdata客戶端API的OAuth2授權

我試圖模仿使用Java API的.Net示例似乎適用於發送一個API請求來創建授權URL,然後假設我會在瀏覽器中使用該URL來獲取訪問代碼...因此允許服務器此後使用Google電子表格api的代碼,用於該Google帳戶。

衣櫃裏谷歌的Java API類我發現是OAuthHelper,但似乎需要userAuthorizationUrl在實例化時,這其實是我想通過從中獲得自己的createUserAuthorizationUrl method後,我會設法進行實例化 - 對我來說有點循環的難題。這似乎表明我錯過了我的假設,可能這不是用來模仿.Net代碼示例的正確類。

您的幫助非常感謝。

+0

貌似http://soatutorials.blogspot.co.at/ 2013/08/google-spreadsheet-api-connecting-with.html擁有它,只比.Net代碼稍低的抽象級別。 – matanster

+0

matts答案看起來更好,但這是相關/重複:http://stackoverflow.com/questions/15938514/java-and-google-spreadsheets-api-authorization-with-oauth-2-0/16007453#16007453 – eddyparkinson

回答

1

看起來像http://soatutorials.blogspot.co.at/2013/08/google-spreadsheet-api-connecting-with.html適用於Java。

Scala的解決方案代碼中,http://javatoscala.com/禮貌:

package com.articlio.googleApi 
import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 

import com.google.gdata.client.GoogleService; 
import com.google.gdata.client.authn.oauth.GoogleOAuthHelper; 
import com.google.gdata.client.authn.oauth.GoogleOAuthParameters; 
import com.google.gdata.client.authn.oauth.OAuthException; 
import com.google.gdata.client.authn.oauth.OAuthHmacSha1Signer; 
import com.google.gdata.client.authn.oauth.OAuthRsaSha1Signer; 
import com.google.gdata.client.authn.oauth.OAuthSigner; 
import com.google.gdata.client.spreadsheet.SpreadsheetService; 
import com.google.gdata.data.spreadsheet.SpreadsheetFeed 
import com.google.gdata.data.BaseEntry; 
import com.google.gdata.data.BaseFeed; 
import com.google.gdata.data.Feed; 
import com.google.gdata.util.AuthenticationException; 
import com.google.gdata.util.ServiceException; 

//remove if not needed 
import scala.collection.JavaConversions._ 

object OAuth2Sample { 

    def loginOAuth2(clientID: String, clientSecret: String) { 
    val SCOPES = "https://docs.google.com/feeds https://spreadsheets.google.com/feeds" 
    val oauthParameters = new GoogleOAuthParameters 
    oauthParameters.setOAuthConsumerKey(clientID) // 
    var signer: OAuthSigner = null 
    oauthParameters.setOAuthConsumerSecret(clientSecret) // 
    signer = new OAuthHmacSha1Signer() 
    val oauthHelper = new GoogleOAuthHelper(signer) 
    oauthParameters.setScope(SCOPES) 
    try { 
     oauthHelper.getUnauthorizedRequestToken(oauthParameters) 
    } catch { 
     case e: OAuthException => e.printStackTrace() 
    } 
    val requestUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters) 
    println(requestUrl) 
    println("Please visit the URL above to authorize your OAuth " + 
     "request token. Once that is complete, press any key to " + 
     "continue...") 
    try { 
     System.in.read() 
    } catch { 
     case e: IOException => e.printStackTrace() 
    } 
    var token: String = null 
    try { 
     token = oauthHelper.getAccessToken(oauthParameters) 
    } catch { 
     case e: OAuthException => e.printStackTrace() 
    } 
    println("OAuth Access Token: " + token) 
    println() 
    var feedUrl: URL = null 
    try { 
     feedUrl = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full") 
    } catch { 
     case e: MalformedURLException => e.printStackTrace() 
    } 
    println("Sending request to " + feedUrl.toString) 
    println() 
    val googleService = new SpreadsheetService("oauth-sample-app") 
    try { 
     googleService.setOAuthCredentials(oauthParameters, signer) 
    } catch { 
     case e: OAuthException => e.printStackTrace() 
    } 
    val feed = googleService.getFeed(feedUrl, classOf[SpreadsheetFeed]) 
    val spreadsheets = feed.getEntries 
    println("Response Data:") 
    println("=====================================================") 
    if (spreadsheets != null) { 
     for (spreadsheet <- spreadsheets) { 
     println(spreadsheet.getTitle.getPlainText) 
     } 
    } 
    println("=====================================================") 
    println() 
    println("Revoking OAuth Token...") 
    try { 
     oauthHelper.revokeToken(oauthParameters) 
    } catch { 
     case e: OAuthException => e.printStackTrace() 
    } 
    println("OAuth Token revoked...") 
    } 
} 

斯卡拉但是,你現在還需要辦理this ...

+0

刷新令牌?該博文看起來很方便,但缺少刷新令牌。隨着訪問令牌即將過期(1小時後),使用刷新令牌創建新訪問令牌的代碼會很好。無論如何,不​​錯的帖子,+1。 – eddyparkinson

相關問題