2

Flickrj API を使用して flickr にログインしています。読み取り専用アクセスの場合は問題ありませんが、写真にタグを追加するために書き込みアクセスが必要な場合、正しく認証できないようです。

基本的な認証フローを理解しているので

  1. フロブを手に入れよう
  2. WRITE アクセスを要求するフロブを渡すと、URL が返されます。
  3. URL を呼び出して flickr トークンを受け取る
  4. 後続のすべてのリクエストでトークンを使用する

私のコードは現在

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 で行き詰まっていますか?

4

2 に答える 2

1

このコードde.elmar_baumann.jpt.plugin.flickrupload.Authorizationを見つけました。ステップ 2 の後、トリックは Java デスクトップ アプリでブラウザ ウィンドウとダイアログを開くことです。ユーザーがブラウザー経由でログインしたら、ダイアログをクリックして、ステップ 4 を呼び出してトークンを取得できるようにします。

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);
}
于 2010-07-30T13:49:33.320 に答える
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);
于 2012-03-28T15:37:48.370 に答える