作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Behsaad Ramez
Verified Expert in Engineering
14 Years of Experience

Behsaad是一名软件工程师,他创立了多家科技公司. 他的经验横跨各个领域, including e-commerce, insurance, publishing, and video game development. Behsaad拥有Freie Universität Berlin的硕士学位,专门从事Ruby on Rails和Android开发, 以及网络抓取和使用社交媒体api.

Previous Role

Lead Developer
Share

自从Google在2008年5月发布了第一个版本的YouTube API, Facebook在2010年4月发布了第一个版本的Graph API以来,社交网络API已经取得了长足的进步. Today, 这些api使您有机会查询社交网络平台上的帖子, users, channels, and demographic data. 它们甚至可以让你创建自己的服务或更多地了解你的用户群.

在本文中,我们将探讨如何利用一些流行的社交网络api:

  • Facebook(图表和营销API)
  • Instagram
  • X (formerly Twitter)
  • YouTube
  • Pinterest

我们还将讨论它们的局限性, 并探索一些可用于这些api的有用工具. 在本文的后面部分,我们还将研究如何将这些api集成到任何 Rails application.

社交网络api:互联网通向现实世界的门户

使用社交网络api来更好地了解你的用户,而不是他们自己.

我将一次专注于一个社交网络API,并解释它的功能, 限制和可用工具. 在本文后面会有一个包含不同api及其属性的矩阵,以便更好地进行比较.

为了使用api,你首先需要设置一个应用程序,它代表你的应用程序创建查询 OAuth based requests. 用户将根据您的应用程序进行身份验证,然后您可以使用生成的用户访问令牌访问他们的数据.

从这个博客的最初发布日期开始, Twitter已经正式更名为X,并发布了X API v2. 这个最新版本是一次重大更新, however, 以前的版本仍然可用,这里讨论的策略仍然有效.

Facebook

现在过时的FQL (Facebook查询语言)曾经是一种类似sql的查询语言,可以用来访问Facebook的所有数据.

Facebook在2010年4月发布了第一个版本的Graph API. 它是一个低级的基于http的API,可用于查询数据, create posts, 甚至创建自动广告活动.

Tools

The Graph API Explorer 使用Facebook API时最常用的工具是什么. 它允许你在浏览器中执行Graph API查询并检查结果:你可以使用应用程序的访问令牌之一,也可以在选定的范围内动态创建一个.

Capabilities

Graph API是一个基于rest的API,允许您创建, update, 并在某些节点上删除每个HTTP请求的对象.

Access Token

对Graph API运行查询, 你需要一个访问令牌,当用户在你的应用程序中成功授权时,它就会被获取. 访问令牌应该由应用程序存储.

Scopes

作用域决定可以代表用户执行哪些操作. 当用户在应用程序中进行授权时,应用程序会请求特定的范围. The publish_actions 例如,Scope允许应用程序代表用户发布帖子. email作用域允许应用程序读取用户的电子邮件. 对所有范围的全面概述是 在官方文档中列出.

Certain scopes like the publish_actions or ads_management 要求Facebook在发布应用前进行审核.

Examples

演示Graph API是如何工作的, 我来教你怎么读, create, update, 并使用API删除帖子.

要获取自己的帖子,可以执行get查询 /me/posts. 结果将是一个JSON字符串,其中包含帖子列表,包括它们的消息、created_time和id. You can use the pretty parameter or a JSON formatter 使回复看起来不那么杂乱.

要获得关于您的帖子的更多数据,您可以使用字段作为查询参数来扩展查询. For example, the query me/posts?fields=reactions, picture 会给你帖子的图片和反应吗.

要创建一个帖子,只需针对边缘提要发送一个post操作即可.g. me/feed, with parameters such as message: hello world. Graph API将返回一个JSON对象,其中包含您创建的帖子的ID. 然后,您可以在该地址查看邮件 http://facebook.com/[post_id].

To update a post, you can send a POST request to the post’s node with the fields to be updated as parameters; e.g., /[post_id] and params like Message: lorem ipsum. 将返回一个值为true或false的成功指示器.

要删除帖子,只需向具有帖子ID (e)的节点发出delete请求即可.g., /[post_id]). 返回值将是一个JSON对象,成功值为true或false.

中提供了所有节点和操作的完整概述 Graph API Reference.

Marketing API

The marketing API 值得一提的是,它是一个强大的工具,可以管理Facebook广告,并通过你的应用程序获得广告洞察力.

它的工作方式与其他Graph API方法相同. However, you need the ads_management 范围,以便访问用户的广告. Facebook也需要在你发布应用前对其进行审核.

Testing

Once you create your app, 它是在开发模式和自动可见在您的应用程序仪表板(i.e., http://developers.facebook.com/apps/).

在开发模式下,只有管理员、开发人员和测试人员可以访问你的应用. 你可以在应用仪表板的角色部分添加测试人员和管理员.

Review Process

在添加某些权限时,Facebook需要在你发布应用之前对其进行审核. 评审过程由 this set of guidelines.

以便提交某些项目供审查, 你可以简单地将它们添加到应用程序仪表板的应用程序评论部分. 然后Facebook会指导你完成审核过程,一旦你的应用获得批准,你就会收到通知.

限制和解决方法

Rate Limits

一个应用程序每小时可以给每个用户打200个电话. 如果您达到这个限制,您的API调用将导致错误.

在Facebook上搜索帖子

Facebook通过Graph API和FQL限制在Facebook上搜索帖子和标签. However, you can use the Google Search API 搜索公开的Facebook帖子,然后使用URL中的post-id通过Graph API检索有关特定帖子的更多信息.

获取自定义受众数据

Audience Insights Facebook是一个强大的研究工具,可以根据兴趣了解特定受众的更多信息, demographics, or a other attrributes (e.g.,电子邮件地址的集合).

然而,我还没有找到一种通过广告API自动创建用户洞察力的方法. 如果你对此有任何创造性的想法或建议,请在评论中告诉我们.

Instagram

Instagram API illustration

The Instagram API 于2014年4月首次发布,并于2018年被Instagram Graph API取代. Graph API可用于发布和检索媒体、管理评论和获取基本指标. 需要一个Business或Creator帐户.

Tools

由于在撰写本文时,Instagram的API控制台已被弃用,因此我建议使用 Apigee 用于在浏览器中进行测试.

Capabilities

Instagram API是一个基于rest的API. All of its endpoints 在他们的官方文件中有描述吗.

Access Token

要对Instagram API运行查询,您需要一个 access token 当用户在你的应用中授权时,它就会被获取. 以便用户接收访问令牌, 他或她必须被定向到你的应用程序的授权URL. 服务器将在授权你的应用程序后重定向用户,然后你就可以读取令牌了.

Scopes

你的应用程序可以要求不同的 permissions. 例如,“基本”限制你阅读用户的个人资料信息和媒体. “public_content”允许您读取代表用户的任何公共个人资料和媒体.

Testing

在Instagram平台上创建的每一个新应用程序都是从 sandbox mode. 这是一个功能齐全的环境,允许您在提交应用程序进行审查之前测试公开可用的API端点.

To test your app, 只需创建一个临时版本,并通过该版本运行所有查询,而不是通过审查的实时版本.

Review Process

沙盒模式下的应用程序可以使用任何API端点, 但仅限于有限数量的用户和媒体. 这是开发和测试应用程序的绝佳机制.

要上线并访问所有Instagram内容,您需要提交您的申请 review. 一旦被审核,你将只能为你的应用被批准的用户请求范围.

限制和解决方法

Demographic Analysis

在写这篇文章的时候, 没有办法获得有关公共用户年龄的信息, gender, or interests, 因为Instagram不会向你提供这些信息.

为了获得关于粉丝或Instagram用户列表的人口统计数据, 你需要遍历他们所有人,并尝试根据他们的追随者或他们的简历中提供的信息来确定他们的年龄、性别或兴趣.

针对这个问题的一个好的大数据解决方案可能对一些公司来说是一项有价值的服务.

Rate Limits

All rate limits Instagram平台上的用户都是通过一个滑动1小时窗口的访问令牌来控制的. 实时应用比沙盒模式下的应用有更高的速率限制. 目前,在线应用的全球话费上限为每小时5000次.

Twitter

The Twitter API was first released in September 2006. It is a public REST API 提供对Twitter数据的读写访问. 身份验证使用OAuth执行. 响应是JSON格式的. 而API的版本2现在已经发布, 下面的描述与API的版本1有关, which is still available.

Tools

Twitter has an API console tool 由apigee提供支持,可用于在浏览器中测试请求.

Capabilities

REST API允许您获取用户的tweet、关注者和被关注者. 你也可以在其他推文中搜索标签.

Access Token

Twitter允许你创建用户可以使用的应用程序 authenticate 返回访问令牌. 身份验证模型为OAuth.

Scopes

在应用程序的设置页面上只有两个权限需要设置:只读和读写. 后者允许您创建tweet并代表用户执行其他发布操作.

Testing and Review Process

目前还没有针对Twitter API的审查流程或测试模式.

限制和解决方法

Demographic Analysis

目前还没有一种简单的方法可以从某人的Twitter关注者那里获得人口统计数据. 蛮力方法是浏览每个关注者,并试图通过他们的个人信息和相关的社交网络账户获取数据.

然后,您可以通过数据分析,根据收集到的关注者数据做出进一步的假设. 另一种获得更多见解的方法是通过Twitter的付费企业API平台 GNIP. 除此之外,它让你 create audiences 并通过API获取相关信息. 该API目前处于测试阶段.

Rate Limits

Twitter has rate limits 以每个用户为基础,以15分钟为基础. 如果您的应用程序有多个令牌, 您可以简单地为公共操作替换令牌,以避免达到限制.

YouTube

YouTube API illustration

YouTube数据API于2013年1月首次推出. 它可以让你在你的应用程序中添加YouTube功能, search for content, 并分析YouTube频道的人口统计数据. 它是一个OAuth、基于令牌的REST API,返回JSON响应.

Tools

The API Explorer 允许您测试未经授权和授权的请求. 您可以针对所提供的端点从浏览器运行请求.

Capabilities

Among other things, 你可以用活动来工作, chats, live broadcasts, playlists, channels, videos, and subscriptions. 大多数端点都要求您使用YouTube帐户进行授权.

Access Token

YouTube Data API支持OAuth 2.0 protocol for authorizing access to private user data. 一旦用户在您的应用程序中获得授权, 它们将被重定向到应该保存访问令牌的应用程序.

In order to use OAuth 2.0授权时,首先需要在Google开发者控制台中获取授权凭据.

Scopes

YouTube Data API目前支持 following scopes:

  • 强制SSL -管理您的youtube帐户,但只能通过SSL连接.
  • 默认-管理您的YouTube帐户. 这个作用域在功能上与youtube相同.强制SSL作用域,但不需要SSL连接.
  • 只读-查看您的YouTube帐户.
  • 上传-上传YouTube视频和管理您的YouTube视频.
  • 合作伙伴通道审计——检索Multichannel Networks用作其网络中接受或拒绝通道的标准的信息.

Examples

作为使用Youtube Data API的一个示例, 以下请求查询标题和描述中带有“编码”的视频:

http://www.googleapis.com/youtube/v3/search?part=snippet&q=coding&key={YOUR_API_KEY}

结果是一个JSON对象,其中包含标题、描述、videoId和channelId. 您可以使用后者来查找有关该通道的更多信息.

The part 参数对于返回某个资源的任何API请求都是必需的. 该参数标识应该包含在API响应中的资源属性. For example, 视频资源由以下几个部分组成:视频片段, contentDetails, fileDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, topicDetails.

除API密钥外,所有其他参数在每次调用中都不同. Read more about it in the API reference guide.

Pinterest

The Pinterest API 最初于2015年4月发布. 这是一个RESTful API,提供访问用户的Pinterest数据, such as their boards, pins, followers and more. Pinterest API使用OAuth,在与用户的内容交互时允许读取和写入权限.

Tools

像其他公司一样,Pinterest提供了一个API Explorer来测试它们的端点并对它们运行查询. 你可以看看他们所有的工具 here.

Capabilities

The Pinterest REST API 允许您创建引脚,板和查询Pinterest数据与OAuth.

Access Token

Pinterest uses OAuth 2.0来验证应用程序和用户之间的请求. 所有请求都必须通过HTTPS进行.

Scopes

作用域决定了应用可以代表用户做什么. Pinterest使用以下范围:

  • none (必须知道标识符):对用户的配置文件使用GET方法, board and Pin details, and the Pins on a board.
  • read_public:对用户的Pins、boards和likes使用GET方法.
  • write_public:在用户的pin和board上使用PATCH、POST和DELETE方法.
  • read_relationships:对用户的关注者和追随者(在论坛、用户和兴趣上)使用GET方法.
  • write_relationships: Use PATCH, POST, 和DELETE方法对用户的关注者和追随者(在板上), users and interests).

Examples

为了演示Pinterest API的使用,我将演示如何读取用户的最新pin:

http://api.pinterest.com/v5/me/pins/?access_token={your_token}&=字段id、链接、注意url,计数,董事会,created_at 将返回用户的pin与他们的id,链接,备注,url,喜欢,和转载.

Testing and Review Process

应用程序最初处于开发模式,必须在生产模式下发布之前提交审查.

限制和解决方法

Demographic Analysis

没有一种常见的方法可以从董事会获得人口统计数据. However,你可以试着从他们的个人简介和其他社交网络账户的链接中获取一个论坛的关注者和有关他们的信息. 一种基于用户公共连接的大数据解决方案也是可能的.

Search for Pins

目前还没有办法通过API搜索带有特定标签或关键字的引脚. 你可以通过使用谷歌自定义搜索API来绕过这个限制,只搜索Pinterest引脚上的结果,并通过URL收集引脚ID. 然后可以使用ID通过API获取有关引脚的信息.

Rate Limits

每个应用程序(具有唯一的应用程序ID)允许1,对于每个唯一的用户令牌,每个端点每小时调用000次.

每个API响应都会返回一个报头,给你一个关于速率限制的更新. x - ratlimit - limit是特定请求的速率限制, x - ratlimit - remaining是60分钟窗口内剩余的请求数.

如果您超出了给定端点的速率限制,您将得到一个429“请求过多”错误代码.

社交网络api的比较

OAuthFormatDemographics
Facebook OAuth 2 带有JSON响应的REST请求 Supported
Instagram OAuth 2 带有JSON响应的REST请求 Not supported
Twitter OAuth 1 带有JSON响应的REST请求 Only supported with GNIP
YouTube OAuth 2 带有JSON响应的REST请求 Supported
Pinterest OAuth 2 带有JSON响应的REST请求 Not Supported

带设计的演示应用程序

将这些api集成到新的或现有的应用程序中, 多亏了大量的社交网络API包和库, is easier than ever. 大多数现代平台和框架都有经过时间考验的第三方库,这些库甚至将所有这些api的身份验证方面统一到一个具有简洁插件架构的库中.

社交网络API说明

在本文中,我们将看看如何 Devise是一个Ruby gem,它非常优雅地为Rails应用程序完成了这一工作. 是一个灵活的身份验证库 Warden 它为多个登录提供程序实现身份验证、注册、登录和数据存储. 如果你对前端更感兴趣,想要在AngularJS中找到类似的东西, take a look at this article.

Devise, 像这个类的大多数库一样, 没有内置对上述任何社交网络api的支持. 对这些社交网络API的支持都是通过附加gem提供的. 以下gems可用于Rails身份验证,涵盖本文中讨论的5个提供程序:

gem 'omniauth-facebook'
gem 'omniauth-pinterest'
gem 'omniauth-twitter'
宝石的omniauth-google-oauth2
gem 'omniauth-instagram'

Rails最棒的一点是,它有很多由开源社区编写的插件. 这些是作为宝石分发的. 这些gem列在一个中央配置文件下,由Bundler管理.

因为这些只提供身份验证, registration, login, 以及每个提供商的存储空间, 我们还需要为实际的API客户端获取以下gem:

Gem 'twitter' # http://github.com/sferik/twitter
宝石“instagram”# http://github.com/facebookarchive/instagram-ruby-gem
gem 'koala' # (Facebook API) http://github.com/arsduo/koala
gem 'google-api-client' # (YouTube API), http://github.com/google/google-api-ruby-client
Gem 'pinterest-api' # http://github.com/realadeel/pinterest-api

全认证和身份验证

为了让用户向你的提供商授权你的应用, 你可以简单地提供以下路径的链接:

omniauth_authorize_path(“用户”:facebook)
omniauth_authorize_path(“用户”:instagram)
...

为了在用户身份验证后对回调做出反应,你可以定义一个OmniauthCallbacksController,其作用域如下:

class AuthenticationsController < Devise::OmniauthCallbacksController
  def facebook
    if request.env["omniauth.auth"]
  	...
    end
  end
end

这是在您的应用程序中添加带有令牌和数据的新身份验证模型的地方:

认证= 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

Making API Calls

下面是如何使用的一个例子 Koala to query the Facebook API. 其余的提供程序的工作原理或多或少类似,并在gem的README中进行了记录.

以下是使用考拉获取用户数据的方法:

authentication = user.authentication_for_provider (facebook):
token = authentication.token
api = Koala::Facebook::API.new(token)
results = api.get_object("me")

然后可以使用API返回的JSON结果. 这个演示应用程序的源代码是 available on GitHub.

通过社交媒体api发现新见解

社交网络api为您提供了一个强大的工具来查询社交网络的大数据集,并为您的应用程序收集大数据. 您可以在这些api之上构建服务,或者使用它们来增强您自己的应用程序和用户洞察力.

Rails和可用的gems可以很容易地将这些API集成到Rails应用程序中,并通过应用程序和API之间的抽象层查询接口.

关于总博客的进一步阅读:

聘请Toptal这方面的专家.
Hire Now
Behsaad Ramez

Behsaad Ramez

Verified Expert in Engineering
14 Years of Experience

Málaga, Spain

2016年1月18日成为会员

About the author

Behsaad是一名软件工程师,他创立了多家科技公司. 他的经验横跨各个领域, including e-commerce, insurance, publishing, and video game development. Behsaad拥有Freie Universität Berlin的硕士学位,专门从事Ruby on Rails和Android开发, 以及网络抓取和使用社交媒体api.

作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

Previous Role

Lead Developer

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

Toptal Developers

Join the Toptal® community.