2010-07-29 99 views
2

我正在使用Flickrj API登錄到flickr。對於閱讀只能訪問它的罰款,但我似乎無法正確認證當我需要寫訪問添加標籤照片。桌面Flickrj Java身份驗證流程

據我瞭解基本的身份驗證流程

  1. 得到一個FROB是FROB請求寫訪問
  2. 通行證,這將返回一個URL。
  3. 電話網址免費獲贈Flickr的令牌
  4. 使用在所有後續請求
  5. 令牌

我的代碼目前是

Flickr f = new Flickr(properties.getProperty(APIKEY),properties.getProperty(SECRET),t); 
System.out.println(f.toString()); 

// 1 get a frob 
AuthInterface authInterface = f.getAuthInterface(); 
String frob = authInterface.getFrob(); 
System.out.println("first frob "+frob); 

// 2 get a request URL 
URL url = f.getAuthInterface().buildAuthenticationUrl(Permission.WRITE,frob); 
System.out.println(url.toString()); 

// 3 call the auth URL 

// 4 get token 
f.getAuthInterface().getToken(frob); 

正如你所看到的 - 我被困在第3步?

回答

1

我找到了這個代碼de.elmar_baumann.jpt.plugin.flickrupload.Authorization。第2步之後,訣竅是讓java桌面應用程序打開一個瀏覽器窗口和一個對話框。一旦用戶通過瀏覽器登錄,他們點擊對話框,所以可以調用第四步並檢索令牌。

public boolean authenticate() { 
    try { 
     Flickr flickr = new Flickr("xx", "yy", new REST()); 
     Flickr.debugStream = false; 
     requestContext = RequestContext.getRequestContext(); 
     authInterface = flickr.getAuthInterface(); 
     frob   = authInterface.getFrob(); 
     token   = properties.getProperty(KEY_TOKEN); 
     if (token == null) { 
      authenticateViaWebBrowser(); 
     } else { 
      auth = new Auth(); 
      auth.setToken(token); 
     } 
     requestContext.setAuth(auth); 
     authenticated = true; 
     return true; 
    } catch (Exception ex) { 
     Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); 
     JOptionPane.showMessageDialog(null, Bundle.getString("Auth.Error")); 
    } 
    return false; 
} 

private void authenticateViaWebBrowser() throws Exception { 
    URL url = authInterface.buildAuthenticationUrl(Permission.DELETE, frob); 
    LargeMessagesDialog dlg = new LargeMessagesDialog(Bundle.getString("Auth.Info.GetToken.Browse", url.toExternalForm())); 
    dlg.setVisible(true); 
    Desktop.getDesktop().browse(url.toURI()); 
    JOptionPane.showMessageDialog(null, Bundle.getString("Auth.Info.GetToken.Confirm")); 
    auth = authInterface.getToken(frob); 
    token = auth.getToken(); 
    properties.setProperty(KEY_TOKEN, token); 
} 
0

我有一個錯誤,該代碼授予我沒有讀權限。而我不知道爲什麼...
但除此之外,我有一個青蛙和令牌..它的作品!

 // Step 1) Get Frob 
     AuthInterface ai = f.getAuthInterface();   
     String frob = ai.getFrob(); 
     System.out.println("frob: "+frob); //--> It Works !! 

     // Step 2) URL With Permissions 
     URL uc = ai.buildAuthenticationUrl(Permission.READ, frob); 
     String request = uc.toExternalForm(); 
     uc.openConnection(); 

     // Step 3) Call URL 
     System.out.println(request); 
     URI uri = new URI(request); 
     Desktop desktop = null; 
     if (Desktop.isDesktopSupported()) 
     { 
      desktop = Desktop.getDesktop(); 
     } 

     if (desktop != null) 
     { 
      desktop.browse(uri); // Open Explorer to Confirm   
     } 
     // Sleep until accepted in the explorer. After Press enter in Console 
     BufferedReader infile = new BufferedReader (new InputStreamReader (System.in)); 
     String line = infile.readLine(); 

     // Step 4) Get a token 
     Auth atoken = ai.getToken(frob); // Get a Token with a frob 
     String stoken = atoken.getToken(); // Get a token like String 
     System.out.println("Token: "+stoken); 
     Auth au = ai.checkToken(stoken); // Check token 

     RequestContext.getRequestContext().setAuth(au); 
+0

如果你有新的問題,請點擊[提問](http://stackoverflow.com/questions/ask)按鈕,問吧。 – oers 2012-10-26 12:17:38