2010-07-29 101 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