ゆたんぶろぐ

気が向いたら書いてます

Facebook に公開範囲を指定して投稿する

Facebook Graph API のお話です。Facebook では公開範囲を個別に設けられますが、これを API 経由でやるには以下のようにします(PHP の場合)。なお、OAuth を用いた Facebook への投稿を経験した上でこういう願望が出ると思うので、必要最小限のみを記載します。

まず、OAuth 認証時に、scope へ read_friendlists を追加します。これがないと友達リストを読み込めません。

次に、友達リストを読み込みます。

$me = $facebook->api('/me', 'GET');
$result = $facebook->api('/'. $me['id']. '/friendlists', 'GET');

これで、作成した友達リストを取得できます。この取得したデータの内、id と name を使います。html の select で選択させるような場合は、以下のように生成します。

<option value="id">name</option>

なお、「公開」「友達」「友達の友達」は以下のようにします。

<option value="EVERYONE">公開</option>
<option value="ALL_FRIENDS">友達まで</option>
<option value="FRIENDS_OF_FRIENDS">友達の友達まで</option>

では、この値を使って投稿に付随させる公開範囲を先に設定します。「公開」「友達」「友達の友達」の場合は value にその文字列をおもむろに突っ込めばいいんですが、友達リストの項目の場合は、value に CUSTOM を入れ、allow に友達リストの id を突っ込みます。

$privacy = array('value' => $_POST['privacy']);
if ($privacy['value'] != 'ALL_FRIENDS' && $privacy['value'] != 'FRIENDS_OF_FRIENDS' && $privacy['value'] != 'EVERYONE') {
  $privacy = array('value' => 'CUSTOM', 'allow' => $_POST['privacy']);
}

投稿します。

$attachment = array(
  'access_token' => $access_token,
  'message' => $message,
  'privacy' => $privacy
);
$facebook->api('/me/feed', 'POST', $attachment);

これで、公開範囲を設定しながら投稿できるようになりました。

Privacy Parameter - Facebook開発者