MetaのFacebookストーリーズAPI

このドキュメントでは、FacebookストーリーズAPIを使用してストーリーズをFacebookページで公開する方法を説明します。

ストーリーズを公開するには、以下の手順を実行します。

  1. メディアをMetaサーバーにアップロードする
  2. メディアをストーリーズとしてページに公開する

開始する前に

このガイドは、ページAPIの概要を読み、必要なコンポーネントを実装し、スタートガイドの手順を完了していることを前提としています。

  • Facebookログインまたはビジネス向けFacebookログインを実装し、アプリユーザーのFacebookページにアクセスしたりページアクセストークンを受け取ったりするために必要なアクセス許可をアプリユーザーに求める必要があります。

  • アプリユーザーは、ページアクセストークンで表示するページでCREATE_CONTENTタスクを実行でき、アプリに次のアクセス許可を付与できる必要があります。

    • pages_manage_posts
    • pages_read_engagement
    • pages_show_list

APIリクエストでビジネスシステムユーザーを使用している場合は、business_managementアクセス許可も必要です。

メディアの要件

以下の仕様を満たす写真や動画を提供する必要があります。

写真の仕様

プロパティ仕様

ファイルタイプ

.jpeg、.bmp、.png、.gif、.tiff

ファイルサイズ

ファイルは4MBを超えることはできません。.pngファイルについては、1MBを超えると画像が粗くなる可能性があるため、1MB以下にすることをおすすめします。

動画の仕様

プロパティ仕様

ファイルタイプ

.mp4 (推奨)

アスペクト比

9 x 16

解像度

1080 x 1920ピクセル(推奨)。最低でも540 x 960ピクセル

フレームレート

24~60フレーム/秒

長さ

3~90秒。

ストーリーズとしてFacebookページに公開されるリール動画は60秒を超えることはできません。

動画の設定

  • クロマサブサンプリング4:2:0
  • クローズドGOP (2~5秒)
  • 圧縮 - H.264、H.265 (VP9、AV1もサポートされています)
  • 固定フレームレート
  • プログレッシブスキャン

音声の設定

  • 音声ビットレート – 128kbs+
  • チャンネル – ステレオ
  • コーデック – AAC LC
  • サンプリングレート – 48kHz

制限

  • ストーリーズ用にアップロードされる写真や動画には、以前に公開した投稿で使用したものは使用できません
  • 動画ストーリーズは60秒を超えることはできません
  • アーカイブされたストーリーズをGETリクエストに含めてストーリーズのリストを表示するには、Facebookストーリーズのアーカイブをオンにする必要があります。

ベストプラクティス

API呼び出しをテストする場合は、自分のアクセストークンに設定したaccess_tokenパラメーターを含めることができます。ただし、アプリから安全な呼び出しを行う場合は、アクセストークンクラスを使用してください。

このドキュメント内のコードサンプルは、読みやすくするためにフォーマットされています。page_idのように、太字でイタリックになっている値は、実際の値に置き換えてください。

動画ストーリーズ

Facebookページで動画ストーリーズを公開するには、Metaサーバーでの動画アップロードセッションを初期化し、Metaサーバーに動画をアップロードしてから、動画ストーリーズを公開します。

ステップ1: セッションを初期化する

アップロードセッションを初期化するには、/page_id/video_storiesエンドポイントにPOSTリクエストを送信します(page_idはFacebookページのID)。その際、upload_phaseパラメーターをstartに設定します。

リクエストの例

curl -X POST "https://graph.facebook.com/v20.0/page_id/video_stories" \
      -d '{
           "upload_phase":"start",
         }'

成功すると、アプリは動画のIDと動画をアップロードするFacebookのURLが含まれるJSON応答を受け取ります。

応答の例

{
  "video_id": "video_id",
  "upload_url": "https://rupload.facebook.com/video-upload/v20.0/video_id",
}  

ステップ2: 動画をアップロードする

アップロードセッションを初期化してアップロードURLを受け取ったら、動画をアップロードできます。次のいずれかの方法でアップロードできます。

ホストされているファイルをアップロードする

ホストされているファイルをアップロードするには、初期化ステップで受け取ったupload_urlエンドポイントに以下のパラメーターを指定して、POSTリクエストを送信します。

  • 動画ファイルのURLに設定したfile_url
リクエストの例
curl -X POST "https://rupload.facebook.com/video-upload/v20.0/video_id" \
	-H "file_url: https://some.cdn.url/video.mp4"

ローカルファイルをアップロードする

ローカルファイルをアップロードするには、初期化ステップで受け取ったupload_urlエンドポイントに以下のパラメーターを指定して、POSTリクエストを送信します。

  • 0に設定したoffset
  • アップロードする動画の合計サイズ(バイト単位)に設定したfile_size
リクエストの例
curl -X POST "https://rupload.facebook.com/video-upload/v20.0/video_id" \
	-H "offset: 0" \
        -H "file_size: file_size_in_bytes" \
	--data-binary "@/path/to/file/my_video_file.mp4"

成功すると、アプリはsuccesstrueに設定されたJSON応答を受け取ります。

アップロード応答の例
{
    "success": true
}  

中断したアップロード

動画のアップロードが中断された場合は、アップロードを最初からやり直すことも、再開することもできます。

  • アップロードを最初からやり直すには、offset0に設定してPOSTリクエストを再送信します。
  • アップロードを再開するには、offsetをステータス確認で取得したbytes_transfered値に設定して、POSTリクエストを再送信します。

アップロードステータスを取得する

動画のステータスを確認するには、アップロードまたは公開中に、以下のパラメーターを指定して/video_idエンドポイントにGETリクエストを送信します。

  • statusに設定したfields
リクエストの例
curl -X GET "https://graph.facebook.com/v20.0/video_id" \
	-d "fields=status"

成功すると、アプリは以下が含まれるJSON応答を受け取ります。

  • 次のものを含むstatusオブジェクト
    • 値がreadyprocessingexpirederrorのいずれかのvideo_status
    • 次のキー/値ペアのuploading_phaseオブジェクト
      • in_progressnot_startedcompleteerrorのいずれかに設定されたstatus
      • アップロード済みのバイトに設定されたbytes_transfered。これは、アップロードが中断された場合にoffsetの値として使用できます。
    • 次のキー/値ペアのprocessing_phaseオブジェクト
      • in_progressnot_startedcompleteerrorのいずれかに設定されたstatus
    • 次のキー/値ペアのprocessing_phaseオブジェクト
      • in_progressnot_startedcompleteerrorのいずれかに設定されたstatus
      • publishedまたはnot_publishedに設定されたpublish_status
      • 実際の時間または公開された時間のUNIXタイムスタンプに設定されたpublish_time
応答の例
次の応答は、ファイルのアップロードが正しく完了したことを示しています。
{
  "status": {
    "video_status": "processing", 
    "uploading_phase": {
      "status": "in_progress", 
      "bytes_transfered": 50002 
    },
    "processing_phase": {
      "status": "not_started"
    }
    "publishing_phase": {
      "status": "not_started",
      "publish_status": "published",
      "publish_time": 234523452 
    }
  }
}
次の応答は、処理段階でエラーが発生したことを示しています。
{
  "status": {
    "video_status": "processing", 
    "uploading_phase": {
      "status": "complete"
    },
    "processing_phase": {
      "status": "not_started",
      "error": {
        "message": "Resolution too low. Video must have a minimum resolution of 540p."
      }
    }
    "publishing_phase": {
      "status": "not_started"
    }
  }
}

ステップ3動画ストーリーズを公開する

動画ストーリーズをページに公開するには、以下のパラメーターを指定して、/page_id/video_storiesエンドポイントにPOSTリクエストを送信します。

  • アップロードした動画のIDに設定したvideo_id
  • finishに設定したupload_phase

リクエストの例

curl -X POST "https://graph.facebook.com/v20.0/page_id/video_stories" \
      -d '{
           "video_id": "video_id",
           "upload_phase": "finish"
         }'

成功すると、アプリは次のキー/値ペアを含むJSON応答を受け取ります。

  • trueに設定されたsuccess
  • ストーリーズ投稿のIDに設定されたpost_id

応答の例

{
  "success": true,
  "post_id": 1234
}

写真ストーリーズ

ステップ1写真をアップロードする

ページ投稿リファレンスを参照して、/page_id/photosエンドポイントを使って写真をMetaサーバーにアップロードする方法を確認します。必ずpublishedパラメーターをfalseに設定して含めてください。

ステップ2写真ストーリーズを公開する

写真ストーリーズをページに公開するには、以下のパラメーターを指定して、/page_id/photo_storiesエンドポイントにPOSTリクエストを送信します。

  • アップロードした写真のIDに設定したphoto_id

リクエストの例

curl -X POST "https://graph.facebook.com/v20.0/page_id/photo_stories" \
      -d '{
           "photo_id": "photo_id"
         }'

成功すると、アプリは次のキー/値ペアを含むJSON応答を受け取ります。

  • trueに設定されたsuccess
  • ストーリーズ投稿のIDに設定されたpost_id

応答の例

{
  "success": true,
  "post_id": 1234
}

ストーリーズを取得する

ページのすべてのストーリーズのリストと各ストーリーに関するデータを取得するには、GETリクエストを/page_id/storiesエンドポイントに送信します(page_idは表示するページのID)。

リクエストの例

    
curl -i -X GET "https://graph.facebook.com/v20.0/page_id/stories"

成功すると、アプリは、ページ上で公開されたストーリーズに関する情報が含まれたオブジェクトの配列のJSON応答を受け取ります。各オブジェクトには以下のキー/値ペアが含まれます。

  • 公開されたストーリーズ投稿のIDに設定されたpost_id
  • PUBLISHEDまたはARCHIVEDに設定されたstatus
  • ストーリーズが公開された時間を示すUNIXタイムスタンプに設定されたcreation_time
  • videoまたはphotoに設定されたmedia_type
  • ストーリーズ投稿の動画または写真のIDに設定されたmedia_id
  • ストーリーズ投稿のFacebook URLに設定されたurl(例: https://facebook.com/stories/8283482737484972)

応答の例

{
  "data": [
    {
      "post_id": "post_id",
      "status": "PUBLISHED",
      "creation_time": "123456",
      "media_type": "video",
      "media_id": "video_id",
      "url": "https://facebook.com/stories…"
    },
    {
      "post_id": "post_id",
      "status": "PUBLISHED",
      "creation_time": "123456",
      "media_type": "photo",
      "media_id": "photo_id",
      "url": "https://facebook.com/stories…"
    },
    {
      "post_id": "post_id",
      "status": "ARCHIVED",
      "creation_time": "123456",
      "media_type": "photo",
      "media_id": "photo_id",
      "url": "https://facebook.com/stories…"
    },
    ...
  ],
}

ステータス、公開またはアーカイブ、日付(sinceuntilパラメーターを使用)で、ストーリーズをフィルタリングできます。