是否有可能通過直接暱稱/密碼連接以編程方式訪問fb api?如果沒有,如何連接到API,同時保持它是一個真正的客戶端應用程序(沒有服務器在任何地方運行)?Facebook api通過客戶端軟件訪問用戶名/密碼
3
A
回答
1
否;你需要使用支持OAuth的Login流之一 - 雖然有流動那裏與桌面應用程序兼容,這裏有一個例子:https://developers.facebook.com/docs/howtos/login/login-for-desktop/
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 確定這其實像我想的那麼你只能授予特權的「開發」的應用程序之後得到這個令牌不起作用。
相關問題
- 1. Facebook API訪問更改用戶密碼?
- 2. 客戶端ID和客戶端訪問foursquare API的祕密
- 3. Facebook API訪問令牌 - 當我知道用戶名和密碼
- 4. SMTP客戶端和配置代碼訪問用戶名和密碼
- 5. 通過創建隨機用戶名和密碼來管理訪客WIFI訪問的軟件?
- 6. Silverlight - 在客戶端訪問Facebook Api或通過服務器端包裝?
- 7. 客戶端通過Internet訪問SQL Server
- 8. 當通過Facebook API訪問facebook用戶的電子郵件時,通過API
- 9. 客戶端訪問access_token,使用Facebook圖
- 10. 客戶端 - 客戶端通過微軟Bot框架聊天
- 11. Facebook API - 通過名稱搜索用戶,無需訪問令牌
- 12. Facebook Graph API通過JQuery獲取訪問令牌(客戶端方式)
- 13. 通過java客戶端的Github API訪問
- 14. 通過GridView的客戶端API訪問行數據
- 15. 通過用戶名和密碼訪問域中的目錄
- 16. 通過java客戶端API使用marklogic?
- 17. 如何通過facebook ad api發佈客戶端facebook廣告?
- 18. Facebook客戶端永久訪問令牌
- 19. 從C#Windows客戶端訪問Facebook
- 20. 我們可以使用郵遞員客戶端訪問Facebook Api
- 21. 使用OAuth客戶端訪問Netflix和Facebook API
- 22. API客戶端密鑰
- 23. Azure AD Graph API訪問,不使用客戶端ID和密鑰
- 24. 使用PayPal用戶名,密碼和簽名訪問REST API
- 25. 可能使用用戶名/密碼而不是客戶端UI登錄Facebook嗎?
- 26. 在DNN API中訪問用戶密碼
- 27. Facebook的 - 通過API獲取用戶名
- 28. Facebook API用戶組訪問
- 29. 通過客戶端
- 30. 如何使用用戶名/密碼獲取Facebook訪問令牌
上面的例子清楚地表明,Facebook用戶可以真正獲得他們可以使用的訪問令牌。由於你似乎很瞭解Facebook,所以我想知道以下幾點:a)單向使用訪問令牌是否有點不合適? b)這個訪問令牌屬於哪個(哪個客戶端應用)? Facebook本身? c)此虛擬客戶端應用程序對我的帳戶擁有哪些權限? d)誰給了這些權限?當然不是我。 e)Facebook可以被起訴嗎?權限涉及給定用戶的授權。如前所述,我從來沒有給過燙髮。 – ChuckE
@ChuckE,以便我能理解答案:你是指「單方面」是什麼意思? –
在Oauth協議中,讓應用程序A包含資源並且客戶端B想要訪問資源,應用程序B必須由應用程序A知道,但爲了讓應用程序B從應用程序A中的資源所有者訪問資源,應用程序B具有與應用程序A的資源所有者建立協議;來自應用程序A的資源所有者同意,應用程序B可以在他的應用程序A中代表他行事。因此,我從您的腳本中讀取的內容,您獲取了訪問令牌,您可以在登錄時訪問Facebook中的某個位置。與授權相關聯。這個授權有一組相關的權限 – ChuckE