📘 Facebook API 應用與資料庫架構指南
本指南將詳細解說使用 Facebook API 進行應用程式開發時的關鍵步驟,以及其背後的資料庫架構考量。我們將針對每個主題提供三個案例和對應的提示詞範例。
本指南將詳細解說使用 Facebook API 進行應用程式開發時的關鍵步驟,以及其背後的資料庫架構考量。我們將針對每個主題提供三個案例和對應的提示詞範例。
1. 🌐 Facebook API 應用實務
Facebook 提供一系列的 API(如 Graph API、Marketing API 等),讓開發者能夠讀取和寫入 Facebook 平台的資料,例如貼文、使用者資訊、廣告活動等。
Facebook 提供一系列的 API(如 Graph API、Marketing API 等),讓開發者能夠讀取和寫入 Facebook 平台的資料,例如貼文、使用者資訊、廣告活動等。
📌 步驟詳解
應用程式註冊與審核:
在 Meta 開發者平台上註冊你的應用程式,取得應用程式 ID(App ID)和密鑰(App Secret)。
根據你要存取的資料類型,申請相應的權限(Permissions),例如 public_profile、pages_show_list 等。
對於需要存取使用者私密資料的權限,必須通過 Facebook 的應用程式審查(App Review)。
存取權杖(Access Token)的取得:
API 呼叫需要一個有效的存取權杖來驗證身份和權限。權杖類型包括:
使用者權杖: 透過 OAuth 2.0 流程取得,用於代表使用者操作。
粉絲專頁權杖: 從使用者權杖擴展而來,用於管理特定粉絲專頁。
應用程式權杖: 用於不代表任何特定使用者,而是代表應用程式本身的操作。
呼叫 Graph API:
Graph API 是 Facebook 的核心 API,其資料結構像一個圖形(Graph),由節點(Nodes,如 User、Post)和邊緣(Edges,如 /user/posts)組成。
API 呼叫通常是 HTTP 請求,格式為:GET/POST https://graph.facebook.com/{version}/{node_id}/{edge}?access_token=...
參數指定: 使用 fields 參數來精確指定你需要的資料欄位,以優化效能和減少傳輸量。
應用程式註冊與審核:
在 Meta 開發者平台上註冊你的應用程式,取得應用程式 ID(App ID)和密鑰(App Secret)。
根據你要存取的資料類型,申請相應的權限(Permissions),例如
public_profile、pages_show_list等。對於需要存取使用者私密資料的權限,必須通過 Facebook 的應用程式審查(App Review)。
存取權杖(Access Token)的取得:
API 呼叫需要一個有效的存取權杖來驗證身份和權限。權杖類型包括:
使用者權杖: 透過 OAuth 2.0 流程取得,用於代表使用者操作。
粉絲專頁權杖: 從使用者權杖擴展而來,用於管理特定粉絲專頁。
應用程式權杖: 用於不代表任何特定使用者,而是代表應用程式本身的操作。
呼叫 Graph API:
Graph API 是 Facebook 的核心 API,其資料結構像一個圖形(Graph),由節點(Nodes,如 User、Post)和邊緣(Edges,如
/user/posts)組成。API 呼叫通常是 HTTP 請求,格式為:
GET/POST https://graph.facebook.com/{version}/{node_id}/{edge}?access_token=...參數指定: 使用
fields參數來精確指定你需要的資料欄位,以優化效能和減少傳輸量。
💡 案例分析 (3 個)
案例 1:取得使用者公開個人檔案資訊
目的: 使用者透過你的應用程式登入後,取得其公開的姓名和電子郵件。
細節講解:
權限: 必須取得 public_profile 和 email 權限。
流程: 應用程式引導使用者進行 Facebook 登入(OAuth),成功後獲得一個使用者存取權杖。
API 呼叫: 使用 Graph API 節點 /me(代表當前使用者)並指定欄位。
程式碼範例(概念):
GET https://graph.facebook.com/v19.0/me?fields=id,name,email&access_token={USER_ACCESS_TOKEN}
目的: 使用者透過你的應用程式登入後,取得其公開的姓名和電子郵件。
細節講解:
權限: 必須取得
public_profile和email權限。流程: 應用程式引導使用者進行 Facebook 登入(OAuth),成功後獲得一個使用者存取權杖。
API 呼叫: 使用 Graph API 節點
/me(代表當前使用者)並指定欄位。
程式碼範例(概念):
GET https://graph.facebook.com/v19.0/me?fields=id,name,email&access_token={USER_ACCESS_TOKEN}
案例 2:發佈貼文到粉絲專頁
目的: 透過應用程式自動化發佈一則貼文到企業的 Facebook 粉絲專頁。
細節講解:
權限: 應用程式需具備 pages_manage_posts 權限,且必須使用粉絲專頁存取權杖(Page Access Token)。
流程: 首先使用使用者權杖取得粉絲專頁權杖,然後用該專頁權杖發佈內容。
API 呼叫: 使用粉絲專頁 ID 作為節點,/feed 作為邊緣,並使用 POST 方法傳遞 message 參數。
程式碼範例(概念):
POST https://graph.facebook.com/v19.0/{PAGE_ID}/feed?message=Hello+World&access_token={PAGE_ACCESS_TOKEN}
目的: 透過應用程式自動化發佈一則貼文到企業的 Facebook 粉絲專頁。
細節講解:
權限: 應用程式需具備
pages_manage_posts權限,且必須使用粉絲專頁存取權杖(Page Access Token)。流程: 首先使用使用者權杖取得粉絲專頁權杖,然後用該專頁權杖發佈內容。
API 呼叫: 使用粉絲專頁 ID 作為節點,
/feed作為邊緣,並使用POST方法傳遞message參數。
程式碼範例(概念):
POST https://graph.facebook.com/v19.0/{PAGE_ID}/feed?message=Hello+World&access_token={PAGE_ACCESS_TOKEN}
案例 3:追蹤廣告活動數據
目的: 定期從 Facebook Marketing API 獲取特定廣告活動(Campaign)的表現數據,如點擊次數。
細節講解:
權限: 需要 ads_read 或相關的廣告帳號權限。
流程: 使用具備廣告帳號存取權的使用者權杖或系統使用者權杖。
API 呼叫: 呼叫廣告活動節點,並請求其 insights 邊緣,使用 fields 參數指定需要的數據指標(Metrics)。
程式碼範例(概念):
GET https://graph.facebook.com/v19.0/act_{AD_ACCOUNT_ID}/campaigns?fields=name,insights{clicks,spend}&access_token={USER_ACCESS_TOKEN}
目的: 定期從 Facebook Marketing API 獲取特定廣告活動(Campaign)的表現數據,如點擊次數。
細節講解:
權限: 需要
ads_read或相關的廣告帳號權限。流程: 使用具備廣告帳號存取權的使用者權杖或系統使用者權杖。
API 呼叫: 呼叫廣告活動節點,並請求其
insights邊緣,使用fields參數指定需要的數據指標(Metrics)。
程式碼範例(概念):
GET https://graph.facebook.com/v19.0/act_{AD_ACCOUNT_ID}/campaigns?fields=name,insights{clicks,spend}&access_token={USER_ACCESS_TOKEN}
💡 提示詞 (Prompt) 範例
Prompt 範例:
Facebook API 應用實務
請生成三個獨立的 Facebook API 應用案例,並條列式說明其細節:
如何獲取使用者在特定粉絲專頁上最近的十則留言(Comment)。
如何使用應用程式權杖檢查一個外部連結的分享計數(Share Count)。
如何透過 API 取得一個活動(Event)的參加者(Attendees)列表。
Prompt 範例:
Facebook API 應用實務
請生成三個獨立的 Facebook API 應用案例,並條列式說明其細節:
如何獲取使用者在特定粉絲專頁上最近的十則留言(Comment)。
如何使用應用程式權杖檢查一個外部連結的分享計數(Share Count)。
如何透過 API 取得一個活動(Event)的參加者(Attendees)列表。
2. 🗄️ 資料庫架構考量
將 Facebook API 獲取的資料儲存和整合到自己的應用程式資料庫時,需要考慮到資料的同步性、結構和時效性。
將 Facebook API 獲取的資料儲存和整合到自己的應用程式資料庫時,需要考慮到資料的同步性、結構和時效性。
📌 步驟詳解
選擇資料庫類型:
關係型資料庫(SQL): 適用於結構化程度高、資料間關係複雜(如使用者與貼文的關係)以及需要強一致性的場景。
非關係型資料庫(NoSQL): 適用於高吞吐量、資料結構彈性大(如儲存原始 API JSON 回傳)、快速讀取和高擴展性的場景。
資料模型設計:
最小化同步: 不要將所有 Facebook 資料都複製一份。只同步應用程式必需的欄位,並儲存 Facebook 的 ID。
ID 作為主鍵: 許多 Facebook 物件(如 User、Post、Comment)都有唯一的數字或字串 ID。建議將其儲存為資料表中的唯一 ID,便於日後更新和查詢。
同步與更新策略:
定期批次更新(Polling): 設定排程任務,定期(例如每小時)呼叫 API 檢查資料是否有更新。
Webhooks 即時通知: 註冊 Facebook Webhooks。當特定事件(如新留言、新貼文)發生時,Facebook 會主動向你的應用程式發送通知,實現準即時同步。這比定期 Polling 更有效率。
選擇資料庫類型:
關係型資料庫(SQL): 適用於結構化程度高、資料間關係複雜(如使用者與貼文的關係)以及需要強一致性的場景。
非關係型資料庫(NoSQL): 適用於高吞吐量、資料結構彈性大(如儲存原始 API JSON 回傳)、快速讀取和高擴展性的場景。
資料模型設計:
最小化同步: 不要將所有 Facebook 資料都複製一份。只同步應用程式必需的欄位,並儲存 Facebook 的 ID。
ID 作為主鍵: 許多 Facebook 物件(如 User、Post、Comment)都有唯一的數字或字串 ID。建議將其儲存為資料表中的唯一 ID,便於日後更新和查詢。
同步與更新策略:
定期批次更新(Polling): 設定排程任務,定期(例如每小時)呼叫 API 檢查資料是否有更新。
Webhooks 即時通知: 註冊 Facebook Webhooks。當特定事件(如新留言、新貼文)發生時,Facebook 會主動向你的應用程式發送通知,實現準即時同步。這比定期 Polling 更有效率。
💡 案例分析 (3 個)
案例 1:同步粉絲專頁貼文到本地資料庫
目的: 將粉絲專頁的貼文內容儲存到本地 SQL 資料庫中,用於自定義分析和展示。
細節講解:
模型: 創建一個 Posts 資料表。主鍵是 fb_post_id(Facebook 貼文 ID)。其他欄位包括 content、created_time、likes_count。
關係: 貼文可以與本地的 Pages 表通過外鍵 page_id 關聯。
同步: 定期(如每 15 分鐘)呼叫 Graph API /page_id/posts 邊緣,只取得最新的貼文,並使用 UPSERT(或 INSERT ON DUPLICATE KEY UPDATE)操作來新增或更新現有貼文的 Likes 數量。
資料表結構(概念):
Table: Posts (SQL)
- fb_post_id (VARCHAR, Primary Key)
- page_id (VARCHAR, Foreign Key)
- content (TEXT)
- created_at (DATETIME)
- likes_count (INTEGER)
目的: 將粉絲專頁的貼文內容儲存到本地 SQL 資料庫中,用於自定義分析和展示。
細節講解:
模型: 創建一個
Posts資料表。主鍵是fb_post_id(Facebook 貼文 ID)。其他欄位包括content、created_time、likes_count。關係: 貼文可以與本地的
Pages表通過外鍵page_id關聯。同步: 定期(如每 15 分鐘)呼叫 Graph API
/page_id/posts邊緣,只取得最新的貼文,並使用UPSERT(或INSERT ON DUPLICATE KEY UPDATE)操作來新增或更新現有貼文的 Likes 數量。
資料表結構(概念):
Table: Posts (SQL) - fb_post_id (VARCHAR, Primary Key) - page_id (VARCHAR, Foreign Key) - content (TEXT) - created_at (DATETIME) - likes_count (INTEGER)
案例 2:儲存 Webhooks 原始資料用於事件追蹤
目的: 儲存 Facebook Webhooks 發送的所有即時事件通知,用於稽核和除錯。
細節講解:
模型: 使用 NoSQL 資料庫(如 MongoDB 或 DynamoDB),因為 Webhooks 的 JSON 結構可能因事件類型而異,結構彈性高。
結構: 僅儲存時間戳和完整的原始 JSON 資料。無需預先定義欄位。
流程: 應用程式接收到 Webhook 請求後,驗證簽名,然後直接將 JSON Payload 寫入 NoSQL 資料庫。
資料結構(概念):
Collection: WebhookEvents (NoSQL)
- _id (MongoDB ObjectID)
- event_type (STRING, e.g., "page_post")
- received_at (DATETIME)
- raw_payload (JSON Document)
目的: 儲存 Facebook Webhooks 發送的所有即時事件通知,用於稽核和除錯。
細節講解:
模型: 使用 NoSQL 資料庫(如 MongoDB 或 DynamoDB),因為 Webhooks 的 JSON 結構可能因事件類型而異,結構彈性高。
結構: 僅儲存時間戳和完整的原始 JSON 資料。無需預先定義欄位。
流程: 應用程式接收到 Webhook 請求後,驗證簽名,然後直接將 JSON Payload 寫入 NoSQL 資料庫。
資料結構(概念):
Collection: WebhookEvents (NoSQL) - _id (MongoDB ObjectID) - event_type (STRING, e.g., "page_post") - received_at (DATETIME) - raw_payload (JSON Document)
案例 3:儲存和更新使用者權杖
目的: 安全地儲存應用程式使用者的長效期存取權杖(Extended Access Token)。
細節講解:
模型: 創建一個 UserTokens 資料表,用於儲存權杖。
安全性: 存取權杖屬於敏感資料,必須進行加密(例如使用 AES-256)後再儲存到資料庫。
時效性: 必須儲存權杖的到期時間(expires_at),並在每次使用前檢查其有效性。如果過期,提示使用者重新登入以獲取新權杖。
資料表結構(概念):
Table: UserTokens (SQL)
- user_id (VARCHAR, Primary Key, Facebook User ID)
- encrypted_token (TEXT, **加密後儲存**)
- expires_at (DATETIME)
- last_refreshed (DATETIME)
目的: 安全地儲存應用程式使用者的長效期存取權杖(Extended Access Token)。
細節講解:
模型: 創建一個
UserTokens資料表,用於儲存權杖。安全性: 存取權杖屬於敏感資料,必須進行加密(例如使用 AES-256)後再儲存到資料庫。
時效性: 必須儲存權杖的到期時間(
expires_at),並在每次使用前檢查其有效性。如果過期,提示使用者重新登入以獲取新權杖。
資料表結構(概念):
Table: UserTokens (SQL) - user_id (VARCHAR, Primary Key, Facebook User ID) - encrypted_token (TEXT, **加密後儲存**) - expires_at (DATETIME) - last_refreshed (DATETIME)
💡 提示詞 (Prompt) 範例
Prompt 範例:
Facebook 資料庫架構
請生成三個獨立的資料庫架構設計案例,並條列式說明其細節和選擇的依據:
設計一個架構來儲存從 Facebook 獲取的廣告受眾(Custom Audience)清單及其更新時間,並說明其同步策略。
設計一個架構來儲存應用程式內所有使用者的朋友名單(如果 API 允許獲取),並解釋如何處理資料的去正規化以優化讀取速度。
設計一個流程來處理 Facebook 廣告數據報告(Report)的儲存,這些報告數據量龐大且具備時間序列特性,請說明如何利用 NoSQL 的優勢。
Prompt 範例:
Facebook 資料庫架構
請生成三個獨立的資料庫架構設計案例,並條列式說明其細節和選擇的依據:
設計一個架構來儲存從 Facebook 獲取的廣告受眾(Custom Audience)清單及其更新時間,並說明其同步策略。
設計一個架構來儲存應用程式內所有使用者的朋友名單(如果 API 允許獲取),並解釋如何處理資料的去正規化以優化讀取速度。
設計一個流程來處理 Facebook 廣告數據報告(Report)的儲存,這些報告數據量龐大且具備時間序列特性,請說明如何利用 NoSQL 的優勢。
留言
張貼留言