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);
これで、公開範囲を設定しながら投稿できるようになりました。