2010-07-29 4 views
2

J'utilise l'API Flickrj pour me connecter à flickr. Pour lire seulement accéder à son amende, mais je ne peux pas sembler authentifier correctement quand j'ai besoin d'accès WRITE pour ajouter des balises aux photos.Bureau Flux d'authentification Java Flickrj

Comme je comprends l'auth de base flux

  1. Obtenez un frob
  2. qui passe FROB demandant accès en écriture, cela renvoie une URL.
  3. Appelez l'URL de recevoir un jeton flickr
  4. Utilisez le jeton dans toutes les demandes ultérieures

Mon code est actuellement

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); 

Comme vous pouvez le voir - je suis bloqué à l'étape 3 ?

Répondre

1

J'ai trouvé ce code de.elmar_baumann.jpt.plugin.flickrupload.Authorization. Après l'étape 2, l'astuce consiste à faire en sorte que l'application de bureau Java ouvre une fenêtre de navigateur et une boîte de dialogue. Une fois que l'utilisateur s'est connecté via le navigateur, il clique sur la boîte de dialogue afin que l'étape 4 puisse être appelée et que le jeton soit récupéré.

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

J'ai erreur, le code me accordé aucune autorisation de lecture .. Je ne sais pas pourquoi ...
Mais sinon j'ai une grenouille et un jeton .. Et ça marche !!

 // 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

Si vous avez une nouvelle question, posez-la en cliquant sur le bouton [Poser une question] (http://stackoverflow.com/questions/ask). – oers