在 Facebook Graph API 2.0 中获取用户名字段

Posted

技术标签:

【中文标题】在 Facebook Graph API 2.0 中获取用户名字段【英文标题】:Get username field in Facebook Graph API 2.0 【发布时间】:2014-06-19 03:49:08 【问题描述】:

“旧”Facebook Graph API 有一个“用户名”字段,可用于创建人类可读的个人资料 URL。例如,我的用户名是“sebastian.trug”,它会生成一个 Facebook 个人资料 URL http://www.facebook.com/sebastian.trug。

使用 Graph API 2.0 Facebook has removed the "username" field 从“/me”中检索到的用户数据。

有没有办法通过 2.0 API 获取这些数据,或者“用户名”现在是否被视为已弃用的字段?

【问题讨论】:

【参考方案1】:

Facebook 删除了用户名,因为用户名是通过 Facebook 发送电子邮件的一种方式。

例如,给定网址http://www.facebook.com/sebastian.trug

相应的 Facebook 电子邮件将是 sebastian.trug@facebook.com

如果通过电子邮件发送,将直接发送至messages(如果message 设置设置为public),否则发送至other 收件箱。

【讨论】:

现在好像不是这样了。【参考方案2】:

User 对象的username 字段已被移除,并且在 Graph API v2.0 中不存在。在 API v2.0 中无法获取用户的 FB 用户名。

来源:https://developers.facebook.com/docs/apps/changelog#v2_0_graph_api

“/me/username 不再可用。”

【讨论】:

你真的只是在这里引用了这个问题 我已经非常回答了这个问题。 v2.0及以上版本无法获取用户的用户名【参考方案3】:

@Simon Cross - 它被弃用是有记录的,是的。这不是问题,问题是如何获取它,而且我想知道为什么 Facebook 做出了如此糟糕的选择并删除了用户名。数百个依赖用户名在其服务上创建帐户的应用程序将被破坏。

@user3596238 - 您可以坚持使用 V.1 API,该 API 将在 2015 年 4 月结束之前推出,到目前为止,这还不是最好的解决方案,但 Facebook 到那时可能已经无关紧要了。 https://developers.facebook.com/docs/apps/changelog

解决方案:除了实际的 Facebook 登录名之外,还要求用户输入用户名? - 在我看来,无论如何,这使得 Facebook 登录完全没有意义。

【讨论】:

他们为什么要删除用户名?正如你所说,它现在完全没有意义。这里的问题是我无法返回旧 API,因为 Apple 由于 Facebook 旧 SDK 所需的 AdSupport 框架中的“广告标识符 [IDFA] 使用不当”而拒绝应用程序 @pechar,我认为对您来说最好的解决方案是使用用户的名字和 FB 用户 ID 即时生成用户名。你会有像 James1636617726627162 这样的东西,但至少你可以克服这样的问题。 FB;我们删除了用户 ID,因为它是唯一标识符,我们旨在保护您的数据。哦,好吧,实际上,我们利用您的数据赚了很多钱,但我们仍然想让您觉得您在我们这里很安全。 @SimonCross 小写的名字 + 名字不是唯一的,并且在末尾添加数字会使标识符难看。 " 但到那时 Facebook 可能已经无关紧要了。"【参考方案4】:

虽然 2.0 SDK 将不再提供 username 字段,但如果您有用户 ID 号(无论如何您可能会使用它来访问图表),它很容易被抓取。

facebook.com/<user id> 的 URL 将重定向到 facebook.com/<username>,然后可以随意提取。

【讨论】:

这种方法不再有效; Facebook 现在为您提供应用范围版本的用户 ID,如果您已经登录,它将仅重定向到 /username。【参考方案5】:

我的方法是通过用户配置文件使用 nokogiri 废弃用户名。 有点像这样(在红宝石中):

html = RestClient.get("http://facebook.com/123123xxx)
doc = Nokogiri::HTML(html)
username = doc.css('head meta')[1].attributes["content"].value

【讨论】:

应该是这样的^^【参考方案6】:

其中一种方法是使用 cURL 访问 facebook.com/userid,然后遵循重定向。

页面重定向到 facebook.com/username

【讨论】:

仅当您已登录时。【参考方案7】:

灵感来自 @RifkiFauzi 的 answer,这是我在纯 Python 中的解决方案

#get html of a page via pure python ref. https://***.com/a/23565355/248616
import requests
r = requests.get('http://fb.com/%s' % FB_USER_ID) #open profile page of the facebook user
r.raise_for_status()
html = r.content

#search string with regex ref. https://***.com/a/4667014/248616
import re
# m = re.search('meta http-equiv="refresh" content="0; URL=/([^?]+)\?', html)
m = re.search('a class="profileLink" href="([^"]+)"', html)
href = m.group(1) #will be https://www.facebook.com/$FB_USER_NAME on 201705.24
username = href.split('/')[-1]
print(href)
print(username)

【讨论】:

【参考方案8】:
https://graph.facebook.com/?id=100005908663675

只需将 id 更改为任何值。

【讨论】:

仅适用于您的 facebook id,无法从 api 访问,因为每个 id 都是特定于应用程序的:developers.facebook.com/docs/graph-api/reference/v2.2/user

以上是关于在 Facebook Graph API 2.0 中获取用户名字段的主要内容,如果未能解决你的问题,请参考以下文章

Parse SDK Android - Facebook Graph API v2.0

PHP中的Facebook Graph API出现不一致的错误 - 无法连接到graph.facebook.com端口443:连接超时

使用 cURL PHP / Graph API 在 Facebook 中回复评论

Android Facebook Graph API

facebook graph api - 发布多张照片

Facebook iOS SDK 4.2.0 - 分享自托管 Open Graph 故事时出错