社交網絡 API:互聯網通往現實世界的門戶

已發表: 2022-03-11

自從 Google 於 2008 年 5 月發布其 YouTube API 的第一個版本以及 Facebook 於 2010 年 4 月發布了 Graph API 的第一個版本以來,社交網絡 API 已經取得了長足的進步。今天,這些 API 讓您有機會在社交網絡平台上查詢帖子、用戶、頻道和人口統計數據。 他們甚至可以讓您創建自己的服務或了解有關您的用戶群的更多信息。

在本文中,我們將研究如何利用一些流行的社交網絡 API:

  • Facebook(圖形和營銷 API)
  • Instagram
  • 推特
  • YouTube
  • Pinterest

我們還將討論它們的局限性,並探索一些可用於這些 API 的有用工具。 在本文後面,我們還將了解如何將這些 API 集成到任何 Rails 應用程序中。

社交網絡 API:互聯網通往現實世界的門戶

使用社交網絡 API 比他們自己更了解您的用戶。
鳴叫

我將一次只關註一個社交網絡 API,並解釋它的功能、限制和可用工具。 將有一個包含不同 API 及其屬性的矩陣,以便在本文後面進行更好的比較。

為了使用 API,您首先需要設置一個應用程序,該應用程序使用基於 OAuth 的請求代表您的應用程序創建查詢。 用戶將對您的應用進行身份驗證,然後您可以使用生成的用戶訪問令牌訪問他們的數據。

Facebook

現在已經過時的 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_actionsads_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

Instagram 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 插圖

YouTube Data 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

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 比較

版本身份驗證格式人口統計
Facebook v2.6
首次發布:2010 年 4 月
認證 2 帶有 JSON 響應的 REST 請求支持的
Instagram v1
首次發布:2014 年 4 月
認證 2 帶有 JSON 響應的 REST 請求不支持
推特v1.1
首次發布:2006 年 9 月
OAuth 1 帶有 JSON 響應的 REST 請求僅支持 GNIP
YouTube v3
首次發布:2013 年 1 月
認證 2 帶有 JSON 響應的 REST 請求支持的
Pinterest v1
首次發布:2015 年 4 月
認證 2 帶有 JSON 響應的 REST 請求不支持

帶設計的演示應用程序

借助大量的社交網絡 API 包和庫,將這些 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'
Rails 最好的地方之一是開源社區編寫了許多插件。 這些作為寶石分發。 這些 gem 列在中央配置文件下,由 Bundler 管理。

由於這些只為每個提供者提供身份驗證、註冊、登錄和存儲,我們還需要為實際的 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 之間的抽象層查詢接口。