在 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:连接超时