批次要求

傳送包含多個 Facebook 圖形 API 呼叫的單一 HTTP 要求。獨立作業將平行處理,相依作業則會依序處理。完成所有作業後,將傳送整合回覆給您,然後關閉 HTTP 連線。

回覆的順序與要求中作業的順序對應。您應該據此處理回應,以決定哪些作業是成功的,以及哪些作業應在後續作業中重試。

限制

  • 批次要求的上限為每批次 50 個要求。在計算 API 呼叫限制和資源限制時,批次中的每個呼叫將分別計算。例如,一個有 10 個 API 呼叫的批次將計為 10 個呼叫,且批次內的每個呼叫受到的 CPU 資源限制都相同。如需更多資訊,請參閱我們的限速指南
  • 批次要求不得在相同的行銷活動中包含多個廣告組合。深入瞭解批次處理行銷 API 要求的相關資訊。

批次要求

批次要求可接受由要求陣列組成的 JSON 物件,會傳回以 JSON 陣列表示的邏輯 HTTP 回覆陣列。每個回覆都有狀態代碼、選用標頭陣列和選用內文(為 JSON 編碼字串)。

若要發出批次要求,請將 POST 要求傳送至 batch 參數為 JSON 物件的端點。

POST /ENDPOINT?batch=[JSON-OBJECT]

批次要求範例

在此範例中,我們將取得應用程式管理的兩個粉絲專頁的相關資訊。

格式化使讀取更為方便。
curl -i -X POST 'https://graph.facebook.com/me?batch=  
  [
    {
      "method":"GET",
      "relative_url":"PAGE-A-ID"
    },  
    {
      "method":"GET",
      "relative_url":"PAGE-B-ID"
    }
  ]
  &include_headers=false             // Included to remove header information
  &access_token=ACCESS-TOKEN'

完成所有作業後,將送出回覆和各作業的結果。由於傳回的標頭有時會比實際的 API 回覆還要大,因此您可能會想移除標頭,以提高效率。若要包含標頭資訊,請移除 include_headers 參數或將其設為 true

回覆範例

內文欄位包含字串編碼的 JSON 物件:

[
  {
    "code": 200,
    "body": "{
      \"name\": \"Page A Name\",
      \"id\": \"PAGE-A-ID\"
      }"
  },
  {
    "code": 200,
    "body": "{
      \"name\": \"Page B Name\",
      \"id\": \"PAGE-B-ID\"
      }"
  }
]

複雜批次要求

您可將大多使用不同 HTTP 方法的作業合併在單一批次要求中。儘管 GETDELETE 作業只能具有 relative_urlmethod 欄位,但 POSTPUT 作業可能包含選用的 body 欄位。內文應格式化為原始的 HTTP POST 字串,類似網址查詢字串。

要求範例

下列範例會在單一作業中將貼文發佈在我們所管理且擁有發佈權限的粉絲專頁,接著發佈在粉絲專頁的動態:

curl "https://graph.facebook.com/PAGE-ID?batch=
  [
    { 
      "method":"POST",
      "relative_url":"PAGE-ID/feed",
      "body":"message=Test status update"
    },
    { 
      "method":"GET",
      "relative_url":"PAGE-ID/feed"
    }
  ]
  &access_token=ACCESS-TOKEN"

此呼叫的輸出如下:

[
    { "code": 200,
      "headers": [
          { "name":"Content-Type", 
            "value":"text/javascript; charset=UTF-8"}
       ],
      "body":"{\"id\":\"…\"}"
    },
    { "code": 200,
      "headers": [
          { "name":"Content-Type", 
            "value":"text/javascript; charset=UTF-8"
          },
          { "name":"ETag", 
            "value": "…"
          }
      ],
      "body": "{\"data\": [{…}]}
    }
]

下列範例將為行銷活動建立新廣告,然後取得新建物件的詳細資訊。請注意內文參數的 URLEncoding

curl \
-F 'access_token=...' \
-F 'batch=[
  {
    "method":"POST",
    "name":"create-ad",
    "relative_url":"11077200629332/ads",
    "body":"ads=%5B%7B%22name%22%3A%22test_ad%22%2C%22billing_entity_id%22%3A111200774273%7D%5D"
  }, 
  {
    "method":"GET",
    "relative_url":"?ids={result=create-ad:$.data.*.id}"
  }
]' \
https://graph.facebook.com

下列範例會將多個頁面加入企業管理平台:

curl \
-F 'access_token=<ACCESS_TOKEN>' \
-F 'batch=[
  {
    "method":"POST",
    "name":"test1",
    "relative_url":"<BUSINESS_ID>/owned_pages",
    "body":"page_id=<PAGE_ID_1>"
  }, 
  {
    "method":"POST",
    "name":"test2",
    "relative_url":"<BUSINESS_ID>/owned_pages",
    "body":"page_id=<PAGE_ID_2>"
  }, 
  {
    "method":"POST",
    "name":"test3",
    "relative_url":"<BUSINESS_ID>/owned_pages",
    "body":"page_id=<PAGE_ID_3>"
  }, 
]' \
"https://graph.facebook.com/v12.0"

其中:

  • <ACCESS_TOKEN> 是具有 business_management 權限的存取權杖。
  • <BUSINESS_ID> 是應向其認領頁面的企業管理平台編號。
  • <PAGE_ID_n> 是所要認領的粉絲專頁編號。

錯誤

您要求的其中一個作業可能擲回錯誤。例如,其原因可能是您沒有可執行要求作業的權限。該回覆類似標準圖形 API,但以批次回覆語法封裝:

[
    { "code": 403,
      "headers": [
          {"name":"WWW-Authenticate", "value":"OAuth…"},
          {"name":"Content-Type", "value":"text/javascript; charset=UTF-8"} ],
      "body": "{\"error\":{\"type\":\"OAuthException\", … }}"
    }
]

批次內其他要求仍應順利完成,然後照常傳回,且狀態代碼為 200

逾時

大型或複雜批次如果花太久時間仍無法完成批次內的所有要求,便會逾時。在此情況下,將產生部分完成的批次。在部分完成的批次中,順利完成的要求將傳回狀態代碼為 200 的標準輸出。未順利完成的要求回覆將是 null。您可以重試任何未順利完成的要求。

使用 JSONP 的批次呼叫

批次 API 支援 JSONP,就像其他圖形 API;可使用 callback 查詢字串或表單發佈參數,指定 JSONP 回呼函數。

使用多個存取權杖

單一批次要求的個別要求可以指定其自己的存取權杖做為查詢字串或表單發佈參數。此時,頂層存取權杖將視為後援的權杖,並在個別要求未明確指定存取權杖時使用。

當您想使用多個不同用戶或粉絲專頁存取權杖來查詢 API,或需使用應用程式存取權杖來發出部分呼叫時,此功能可發揮作用。

您必須包含存取權杖以作為頂層參數,即使所有個別要求包含自己的權杖。

上傳二進位資料

您可以上傳多個二進位項目做為批次呼叫的一部分。為了這麼做,您必須將所有二進位項目當成 multipart/mime 附件加入您的要求,而且各項作業也必須使用作業中的 attached_files 屬性,參照二進位項目。attached_files 屬性的值可以接受附件名稱的逗號分隔清單。

下列範例顯示如何在單一批次呼叫中上傳 2 張相片:

curl 
     -F 'access_token=…' \
     -F 'batch=[{"method":"POST","relative_url":"me/photos","body":"message=My cat photo","attached_files":"file1"},{"method":"POST","relative_url":"me/photos","body":"message=My dog photo","attached_files":"file2"},]' \
     -F 'file1=@cat.gif' \
     -F 'file2=@dog.jpg' \
    https://graph.facebook.com
-->