社交网络 API:互联网通往现实世界的门户
已发表: 2022-03-11自从 Google 于 2008 年 5 月发布其 YouTube API 的第一个版本以及 Facebook 于 2010 年 4 月发布了 Graph API 的第一个版本以来,社交网络 API 已经取得了长足的进步。今天,这些 API 让您有机会在社交网络平台上查询帖子、用户、频道和人口统计数据。 他们甚至可以让您创建自己的服务或了解有关您的用户群的更多信息。
在本文中,我们将研究如何利用一些流行的社交网络 API:
- Facebook(图形和营销 API)
- 推特
- YouTube
我们还将讨论它们的局限性,并探索一些可用于这些 API 的有用工具。 在本文后面,我们还将了解如何将这些 API 集成到任何 Rails 应用程序中。
我将一次只关注一个社交网络 API,并解释它的功能、限制和可用工具。 将有一个包含不同 API 及其属性的矩阵,以便在本文后面进行更好的比较。
为了使用 API,您首先需要设置一个应用程序,该应用程序使用基于 OAuth 的请求代表您的应用程序创建查询。 用户将对您的应用进行身份验证,然后您可以使用生成的用户访问令牌访问他们的数据。
现在已经过时的 FQL(Facebook 查询语言)曾经是一种类似 SQL 的查询语言,可用于访问来自 Facebook 的所有数据。
Facebook 于 2010 年 4 月发布了其 Graph API 的第一个版本。撰写本文时的最新版本是 2.6,于 2016 年 4 月 12 日推出。它是一个基于 HTTP 的低级 API,可用于查询数据、创建帖子,甚至创建自动广告活动。
工具
Graph API Explorer 是使用 Facebook API 时最常用的工具。 它允许您在浏览器中执行 Graph API 查询并检查结果:您可以使用您的应用程序的访问令牌之一或使用选定的范围动态创建一个。
能力
Graph API 是一个基于 REST 的 API,允许您在某些节点上根据 HTTP 请求创建、更新和删除对象。
访问令牌
要针对 Graph API 运行查询,您需要在用户在您的应用中成功授权后立即获取访问令牌。 访问令牌应由您的应用程序存储。
范围
范围确定可以代表用户执行哪些操作。 当用户在应用程序中授权时,应用程序会询问某些范围。 例如, publish_actions
范围允许应用代表用户发布帖子。 电子邮件范围允许应用读取用户的电子邮件。 官方文档中列出了所有范围的完整概述。
某些范围(例如publish_actions
或ads_management
需要 Facebook 在发布应用程序之前进行审核。
例子
为了演示 Graph API 的工作原理,我将向您展示如何使用 API 阅读、创建、更新和删除帖子。
要获取您自己的帖子,您可以执行 GET 查询/me/posts
。 结果将是一个带有帖子列表的 JSON 字符串,包括他们的消息、created_time 和 id。 您可以使用pretty
参数或 JSON 格式化程序来使响应看起来不那么混乱。
要获取有关您的帖子的更多数据,您可以使用字段作为查询参数来扩展查询。 例如,查询me/posts?fields=reactions, picture
会给你帖子的图片和反应。
要创建帖子,您可以简单地针对边缘提要发送一个 POST 操作,例如me/feed
,并带有诸如message: hello world
之类的参数。 Graph API 将返回一个 JSON 对象,其中包含您创建的帖子的 ID。 然后,您可以在地址http://facebook.com/[post_id]
查看帖子。
要更新帖子,您可以向帖子的节点发送 POST 请求,其中包含要更新的字段作为参数; 例如, /[post_id]
和类似Message: lorem ipsum
的参数。 将返回值为 true 或 false 的成功指示符。
要删除帖子,您可以简单地向具有帖子 ID(例如/[post_id]
)的节点发出 DELETE 请求。 返回值将是一个 JSON 对象,其成功值为 true 或 false。
Graph API Reference 中提供了所有节点和操作的完整概述。
营销 API
营销 API 值得特别提及,因为它是管理 Facebook 广告和通过您的应用程序获取广告洞察的强大工具。
它的工作方式与其他 Graph API 方法相同。 但是,您需要ads_management
范围才能访问用户的广告。 Facebook 还需要先审核您的应用,然后才能发布。
测试
一旦你创建了你的应用程序,它就处于开发模式,并在你的应用程序仪表板中自动可见(即https://developers.facebook.com/apps/
)。
在开发模式下,只有管理员、开发人员和测试人员可以访问您的应用程序。 您可以在应用仪表板的角色部分添加测试人员和管理员。
审核流程
添加某些权限时,Facebook 需要先审核您的应用,然后才能发布。 审查过程由这套指南定义。
为了提交某些项目以供审核,您只需将它们添加到应用仪表板的“应用审核”部分即可。 然后,Facebook 将指导您完成审核过程,一旦您的应用获得批准,您就会收到提醒。
限制和解决方法
速率限制
一个应用程序每个用户每小时总共可以拨打 200 次电话。 如果您达到该限制,您的 API 调用将导致错误。
在 Facebook 上搜索帖子
Facebook 通过 Graph API 和 FQL 限制在 Facebook 上搜索帖子和标签。 但是,您可以使用 Google Search API 搜索公共 Facebook 帖子,然后使用 URL 中的 post-id 通过 Graph API 检索有关特定帖子的更多信息。
获取自定义受众数据
Facebook 上的Audience Insights是一种强大的研究工具,可以根据兴趣、人口统计数据或其他属性(例如,电子邮件地址的集合)了解更多关于特定受众的信息。
但是,我还没有找到一种通过广告 API 自动创建受众洞察的方法。 如果您对此有任何创意或建议,请在评论中告诉我们。
Instagram API 于 2014 年 4 月首次发布,允许您构建分析用户帖子并帮助用户管理自己的帖子的应用程序。
工具
由于 Instagram 的 API 控制台在撰写本文时已被弃用,因此我建议您在浏览器中使用 Apigee 进行测试。
能力
Instagram API 是一个基于 REST 的 API。 它的所有端点都在其官方文档中进行了描述。
访问令牌
要针对 Instagram API 运行查询,您需要在用户在您的应用程序中授权后立即获取的访问令牌。 为了让用户接收访问令牌,他或她必须被定向到您应用的授权 URL。 服务器将在授权您的应用程序后重定向用户,然后您将能够读取令牌。
范围
您的应用可以请求不同的权限。 例如,“基本”限制您阅读用户的个人资料信息和媒体。 “public_content”让您可以代表用户阅读任何公开的个人资料和媒体。
例子
为了演示 Instagram API 的工作原理,我将通过一些基于媒体端点https://api.instagram.com/v1/media/popular
的示例。
如果将访问令牌作为参数传递,此端点会返回来自 Instagram 的当前流行媒体。 结果将是一个 JSON 帖子数组,其中包含每个帖子的媒体 ID、指向其图像的链接、喜欢、评论、发布它的用户以及一些其他属性。
您可以使用 apigee 玩转并了解有关 API 端点及其参数的更多信息。
测试
在 Instagram 平台上创建的每个新应用程序都以沙盒模式启动。 这是一个功能齐全的环境,允许您在提交应用程序以供审核之前测试公开可用的 API 端点。
要测试您的应用程序,只需创建一个暂存版本并通过该版本而不是通过审核的实时版本运行所有查询。
审核流程
沙盒模式下的应用程序可以使用任何 API 端点,但仅限于有限数量的用户和媒体。 这是开发和测试应用程序的绝佳机制。
要上线并访问所有 Instagram 内容,您需要提交申请以供审核。 审核后,您将只能为您的应用获得批准的用户请求范围。
限制和解决方法
人口分析
在撰写本文时,无法获取有关公共用户的年龄、性别或兴趣的信息,因为 Instagram 不会为您提供这些信息。
为了获取有关追随者的人口统计数据或 Instagram 用户列表,您需要遍历所有这些用户,并尝试根据他们的追随者或他们的简历中提供的信息来确定他们的年龄和性别或兴趣。
对于这个问题,一个好的大数据解决方案可能对一些公司来说是一项有价值的服务。
速率限制
Instagram 平台上的所有速率限制均由 1 小时滑动窗口上的访问令牌控制。 实时应用比沙盒模式下的应用具有更高的速率限制。 实时应用程序的全球速率限制目前为每小时 5,000 次调用。
推特
Twitter API 于 2006 年 9 月首次发布。它是一个公共 REST API,提供对 Twitter 数据的读写访问。 使用 OAuth 执行身份验证。 响应采用 JSON 格式。
工具
Twitter 有一个由 apigee 提供支持的 API 控制台工具,可用于测试浏览器中的请求。
能力
REST API 允许您获取用户的推文、关注者和关注的人。 您还可以在其他推文中搜索主题标签。
访问令牌
Twitter 允许您创建应用程序,用户可以对其进行身份验证以返回访问令牌。 身份验证模型是 OAuth。
范围
在应用程序的设置页面上只有两个权限需要设置:只读和读写。 后者允许您代表用户创建推文并执行其他发布操作。
例子
为了演示 Twitter API 的使用,我将检索授权用户的推文。 结果是一个 JSON 数组,其中包含推文的图像、收藏夹、转发、url、创建日期和其他属性。 使用 Apigee 探索并了解有关 API 端点及其参数的更多信息。
测试和审查过程
Twitter API 目前没有可用的审核流程或测试模式。
限制和解决方法
人口分析
目前没有简单的方法可以从某人的 Twitter 关注者那里获取人口统计数据。 蛮力方法是浏览每个追随者,并尝试通过他们的生物和链接的社交网络帐户获取数据。
然后,您可以通过数据分析根据收集到的关注者数据做出进一步的假设。 获得更多见解的另一种方法是通过 Twitter 的付费企业 API 平台 GNIP。 除此之外,它还允许您创建受众并通过 API 获取有关这些受众的信息。 该 API 目前处于测试阶段。
速率限制
Twitter 对每个用户和 15 分钟有速率限制。 如果您的应用程序有多个令牌,您可以简单地为公共操作替换令牌以避免达到限制。
YouTube
YouTube 数据 API 于 2013 年 1 月首次推出。它允许您将 YouTube 功能添加到您的应用程序、搜索内容以及分析 YouTube 频道的人口统计数据。 它是一个 OAuth、基于令牌的 REST API,它返回 JSON 响应。
工具
API Explorer 允许您测试未经授权和授权的请求。 您可以从浏览器针对提供的端点运行请求。

能力
除此之外,您还可以处理活动、聊天、直播、播放列表、频道、视频和订阅。 大多数端点都要求您使用 YouTube 帐户进行授权。
访问令牌
YouTube 数据 API 支持用于授权访问私人用户数据的 OAuth 2.0 协议。 一旦用户在您的应用程序中获得授权,他们将被重定向到应保存访问令牌的应用程序。
要使用 OAuth 2.0 授权,您首先需要在 Google 开发者控制台中获取授权凭证。
范围
YouTube 数据 API 目前支持以下范围:
- 强制 SSL - 管理您的 youtube 帐户,但只能通过 SSL 连接。
- 默认 - 管理您的 YouTube 帐户。 此范围在功能上与 youtube.force-ssl 范围相同,但不需要 SSL 连接。
- 只读 - 查看您的 YouTube 帐户。
- 上传 - 上传 YouTube 视频并管理您的 YouTube 视频。
- 合作伙伴渠道审核 - 检索多渠道网络用作接受或拒绝其网络中的渠道的标准的信息。
例子
作为使用 Youtube Data API 的示例,以下请求查询标题和描述中带有“编码”的视频:
https://www.googleapis.com/youtube/v3/search?part=snippet&q=coding&key={YOUR_API_KEY}
结果是一个 JSON 对象,其中包含标题、描述、videoId 和 channelId。 您可以使用后者来了解有关该频道的更多信息。
任何返回特定资源的 API 请求都需要part
参数。 该参数标识应包含在 API 响应中的资源属性。 比如一个视频资源有以下几个部分:snippet、contentDetails、fileDetails、player、processingDetails、recordingDetails、statistics、status、suggestions、topicDetails。
除 API 密钥外,所有其他参数因调用而异。 在 API 参考指南中阅读有关它的更多信息。
Pinterest API 最初于 2015 年 4 月发布。它是一个 RESTful API,提供对用户 Pinterest 数据的访问,例如他们的板、图钉、关注者等。 Pinterest API 使用 OAuth 并在与用户内容交互时允许读取和写入权限。
工具
与其他人一样,Pinterest 提供了一个 API Explorer 来测试他们的端点并针对它们运行查询。 你可以在这里查看他们所有的工具。
能力
Pinterest REST API 允许您使用 OAuth 创建图钉、板和查询 Pinterest 数据。
访问令牌
Pinterest 使用 OAuth 2.0 来验证您的应用程序和用户之间的请求。 所有请求都必须通过 HTTPS 进行。
范围
范围确定应用程序可以代表用户执行的操作。 Pinterest 使用以下范围:
-
none
(必须知道标识符):对用户的个人资料、版块和 Pin 详细信息以及版块上的 Pin 图使用 GET 方法。 -
read_public
:对用户的 Pin 图、图板和点赞使用 GET 方法。 -
write_public
:在用户的 Pin 图和板上使用 PATCH、POST 和 DELETE 方法。 -
read_relationships
:对用户的关注和关注者(在董事会、用户和兴趣上)使用 GET 方法。 -
write_relationships
:对用户的关注者和关注者(在董事会、用户和兴趣上)使用 PATCH、POST 和 DELETE 方法。
例子
为了演示 Pinterest API 的使用,我将演示如何读取用户的最新 pin:
https://api.pinterest.com/v1/me/pins/?access_token={your_token}&fields=id,link,note,url,counts,board,created_at
将返回用户的 pin 及其 id、link、note、网址,喜欢和重复。
测试和审查过程
应用程序最初处于开发模式,必须先提交审核,然后才能以生产模式发布。
限制和解决方法
人口分析
没有通用的方法可以从板上获取人口统计数据。 但是,您可以尝试从他们的生物和其他社交网络帐户的链接中获取董事会的关注者和有关他们的信息。 在用户的公共连接上的大数据解决方案也是可能的。
搜索 Pin 图
目前无法通过 API 搜索带有特定标签或关键字的图钉。 您可以通过使用 Google 自定义搜索 API 仅在 Pinterest pin 上搜索结果并通过 URL 收集 pin ID 来绕过该限制。 然后,该 ID 可用于通过 API 获取有关引脚的信息。
速率限制
对于每个唯一的用户令牌,每个应用程序(具有唯一的应用程序 ID)每小时允许每个端点进行 1,000 次调用。
每个 API 响应都会返回一个标头,为您提供有关速率限制的更新。 X-Ratelimit-Limit 是该特定请求的速率限制,而 X-Ratelimit-Remaining 是您在 60 分钟窗口内剩余的请求数。
如果您超出给定端点的速率限制,您将收到 429“请求过多”错误代码。
社交网络 API 比较
版本 | 身份验证 | 格式 | 人口统计 | |
---|---|---|---|---|
v2.6 首次发布:2010 年 4 月 | 认证 2 | 带有 JSON 响应的 REST 请求 | 支持的 | |
v1 首次发布:2014 年 4 月 | 认证 2 | 带有 JSON 响应的 REST 请求 | 不支持 | |
推特 | v1.1 首次发布:2006 年 9 月 | OAuth 1 | 带有 JSON 响应的 REST 请求 | 仅支持 GNIP |
YouTube | v3 首次发布:2013 年 1 月 | 认证 2 | 带有 JSON 响应的 REST 请求 | 支持的 |
v1 首次发布:2015 年 4 月 | 认证 2 | 带有 JSON 响应的 REST 请求 | 不支持 |
带设计的演示应用程序
借助大量的社交网络 API 包和库,将这些 API 集成到您的新应用程序或现有应用程序中比以往任何时候都容易。 大多数现代平台和框架都有经过时间考验的第三方库,甚至可以将所有这些 API 的身份验证方面统一到一个具有简洁插件架构的库中。
在本文中,我们将看看 Devise,一个 Ruby gem,如何优雅地为 Rails 应用程序做到这一点。 Devise 是一个基于 Warden 的灵活身份验证库,实现了多个登录提供者的身份验证、注册、登录和数据存储。 如果您更喜欢前端人员,并且想为 AngularJS 检查类似的东西,请查看这篇文章。
与此类的大多数库一样,Devise 没有内置支持上述任何社交网络 API。 通过额外的 gem 提供对这些社交网络 API 的支持。 以下 gem 可用于 Rails 身份验证,涵盖本文讨论的 5 个提供程序:
gem 'omniauth-facebook' gem 'omniauth-pinterest' gem 'omniauth-twitter' gem 'omniauth-google-oauth2' gem 'omniauth-instagram'
由于这些只为每个提供者提供身份验证、注册、登录和存储,我们还需要为实际的 API 客户端获取以下 gem:
gem 'twitter' # https://github.com/sferik/twitter gem 'instagram' # https://github.com/facebookarchive/instagram-ruby-gem gem 'koala' # (Facebook API) https://github.com/arsduo/koala gem 'google-api-client' # (YouTube API), https://github.com/google/google-api-ruby-client gem 'pinterest-api' # https://github.com/realadeel/pinterest-api
Omniauth 和身份验证
为了让用户向您的提供商授权您的应用,您只需提供一个包含以下路径的链接:
omniauth_authorize_path('user', :facebook) omniauth_authorize_path('user', :instagram) ...
为了在验证用户身份后对回调做出反应,您可以定义一个 OmniauthCallbacksController ,其作用域为如下函数:
class AuthenticationsController < Devise::OmniauthCallbacksController def facebook if request.env["omniauth.auth"] ... end end end
这是在您的应用程序中添加带有令牌和数据的新身份验证模型的地方:
authentication = where(provider: omniauth.provider, user_id: user.id) .first_or_create do |auth| auth.user = user auth.uid = omniauth.uid auth.secret = omniauth.credentials.secret auth.token = omniauth.credentials.token ... end
进行 API 调用
下面是一个如何使用 Koala 查询 Facebook API 的示例。 其余提供程序的工作方式或多或少类似,并记录在 gem 的 README 中。
这是您使用 Koala 获取用户数据的方式:
authentication = user.authentication_for_provider(:facebook) token = authentication.token api = Koala::Facebook::API.new(token) results = api.get_object("me")
然后,您可以使用 API 返回的 JSON 结果。 此演示应用程序的源代码可在 GitHub 上找到。
包起来
社交网络 API 为您提供强大的工具来查询社交网络的大型数据集并为您的应用程序收集大数据。 您可以在这些 API 之上构建服务或使用它们来增强您自己的应用程序和用户洞察力。
Rails 和可用的 gem 可以轻松地将这些 API 集成到您的 Rails 应用程序中,并通过应用程序和 API 之间的抽象层查询接口。