2012-10-31 108 views

回答

1

否;你需要使用支持OAuth的Login流之一 - 雖然有流動那裏與桌面應用程序兼容,這裏有一個例子:https://developers.facebook.com/docs/howtos/login/login-for-desktop/

+0

上面的例子清楚地表明,Facebook用戶可以真正獲得他們可以使用的訪問令牌。由於你似乎很瞭解Facebook,所以我想知道以下幾點:a)單向使用訪問令牌是否有點不合適? b)這個訪問令牌屬於哪個(哪個客戶端應用)? Facebook本身? c)此虛擬客戶端應用程序對我的帳戶擁有哪些權限? d)誰給了這些權限?當然不是我。 e)Facebook可以被起訴嗎?權限涉及給定用戶的授權。如前所述,我從來沒有給過燙髮。 – ChuckE

+0

@ChuckE,以便我能理解答案:你是指「單方面」是什麼意思? –

+0

在Oauth協議中,讓應用程序A包含資源並且客戶端B想要訪問資源,應用程序B必須由應用程序A知道,但爲了讓應用程序B從應用程序A中的資源所有者訪問資源,應用程序B具有與應用程序A的資源所有者建立協議;來自應用程序A的資源所有者同意,應用程序B可以在他的應用程序A中代表他行事。因此,我從您的腳本中讀取的內容,您獲取了訪問令牌,您可以在登錄時訪問Facebook中的某個位置。與授權相關聯。這個授權有一組相關的權限 – ChuckE

1

這工作:)這是一個醜陋的黑客,這取決於http://developers.facebook.com/docs/reference/api/頁面的內容,但它確實有效。那麼爲什麼沒有一個標準化的方法來做到這一點?

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URI; 
import java.net.URISyntaxException; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.client.utils.URLEncodedUtils; 

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; 
import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.DomNode; 
import com.gargoylesoftware.htmlunit.html.HtmlAnchor; 
import com.gargoylesoftware.htmlunit.html.HtmlForm; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; 

public class Main { 

    public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException, 
     URISyntaxException { 

    Main m = new Main(); 
    m.dosth(); 
} 

public void dosth() throws FailingHttpStatusCodeException, MalformedURLException, IOException, URISyntaxException { 
    String accessToken = login(Credentials.username, Credentials.password); 

    System.out.println(accessToken); 

} 

/** 
* @param username 
* @param password 
* @return facebook access token 
* @throws IOException 
* @throws MalformedURLException 
* @throws FailingHttpStatusCodeException 
* @throws URISyntaxException 
*/ 
public String login(String username, String password) throws FailingHttpStatusCodeException, MalformedURLException, 
     IOException, URISyntaxException { 
    WebClient wc = new WebClient(); 
    wc.setCssEnabled(false); 
    wc.setJavaScriptEnabled(false); 
    HtmlPage page = wc.getPage("https://www.facebook.com"); 
    HtmlForm form = (HtmlForm) page.getElementById("login_form"); 
    form.getInputByName("email").setValueAttribute(username); 
    form.getInputByName("pass").setValueAttribute(password); 
    HtmlPage home = null; 
    for (DomNode node : form.getDescendants()) { 
     if (node instanceof HtmlSubmitInput) { 
      home = ((HtmlSubmitInput) node).click(); 
      break; 
     } 
    } 

    // assume log in worked out 

    HtmlPage api = wc.getPage("https://developers.facebook.com/docs/reference/api/"); 
    HtmlAnchor a = api.getAnchorByText("https://graph.facebook.com/me/friends?access_token=..."); 
    URI href = new URI(a.getHrefAttribute()); 
    List<NameValuePair> params = URLEncodedUtils.parse(href, "utf-8"); 
    for (NameValuePair pair : params) { 
     if (pair.getName().equals("access_token")) { 
      return pair.getValue(); 
     } 
    } 
    return null; 
} 
} 

UPDATE 確定這其實像我想的那麼你只能授予特權的「開發」的應用程序之後得到這個令牌不起作用。

相關問題