SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Facebookテストユーザ(その1)

1 テストユーザ

Facebookでは、Twitterなどと違ってアカウントが1人1つしか認められていないため、開発用にテストアカウントが利用できるようになっています。
テストアカウントは、1つのアプリ内で閉じた空間で存在しており、その中で相互に友達関係を築く事などは可能ですが、アプリ外の一般アカウントにメッセージを送ったり、投稿したりすることはできません。アプリ外との接触は、唯一、Facebookページの閲覧だけが可能になっているようです。
001

2 Graph API

(1)アプリのアクセストークン取得

テストユーザはGUIで利用することも可能ですが、Graph APIでも扱えるようになっています。
Graph APIを扱うために、まずは、アプリのアクセストークンが必要になります。


    var client = new FacebookClient();
    dynamic d = client.Get("oauth/access_token", new{
        client_id = {アプリID},
        client_secret = {アプリの秘訣},
        grant_type = "client_credentials"});
    var accessToken = d.access_token;

(2)ユーザの作成


var client = new FacebookClient();
dynamic d = client.Post("{アプリID}/accounts/test-users", new{
        installed = true or false,  //アプリ認証するがどうか
        name = {名前}, //指定しない場合、自動的に生成されます
        permissions = {パーミッション}, //カンマで区切って複数指定可能
        access_token = {アプリのアクセストークン}
   });
//下記の情報が戻り値として返されます
//d["id"]
//d["login_url"]
//d["password"]
//d["email"]
//d["access_token"] (アプリ認証した時のみ)

上記以外の設定は、指定できません。メールアドレス、性別などは、自動的に生成されます。
アカウント生成後にログインして修正するしか方法は無いようです。

名前に使用不可能な文字(記号・数字など)を指定するとエラーとなるので注意が必要です。
https://www.facebook.com/help/www/112146705538576?rdrhc
USER_00xのような連番風の名前は作成できません。

(3)ユーザの一覧


var fb = new FacebookClient();
dynamic result = fb.Get("{アプリID}/accounts", new{
    access_token = {アプリのアクセストークン}});
foreach (var d in result["data"]){
     //d["id"]
     //d["login_url"]
     //d["access_token"]
}

現在、生成されているテストユーザの一覧を取得できます。
取得出来るデータは、「ID」、「ログインURL」、「ユーザのアクセストークン(アプリ認証しているユーザのみ)」の3つです。
「ユーザのアクセストークン」は1時間、「ログインURL」は1度しか使用できませんが、この2つは、一覧取得のたびに更新されますので、使用する際に取得するのが吉のようです。
なお、一覧取得を実施すると、ユーザ作成時に取得したパスワードは無効になるので注意が必要です。

(4)ユーザの削除


var fb = new FacebookClient();
dynamic result = fb.Delete(id,new{
access_token={アプリのアクセストークン}
});

(5)パスワードの変更

パスワードは、ユーザ作成時に戻り値として返されますが、後から一覧取得などで取得することができません。必要時は、変更して取得することになります。


var fb = new FacebookClient();
dynamic result = fb.Post("{テストユーザのID}", new{
    password = {新しいパスワード},
    access_token = {アプリのアクセストークン}});

(6)友達の作成

友達申請及び承認もGraphAPIで可能です。


//ユーザ1からユーザ2への友達申請
var fb = new FacebookClient();
dynamic result = fb.Post(
    "{ユーザ1のID}/friends/{ユーザ2のID}",new{
          access_token = {ユーザ1のアクセストークン}});
//ユーザ2の承認
result = fb.Post(
    "{ユーザ2のID}/friends/{ユーザ1のID}",new{
          access_token = {ユーザ2のアクセストークン}});

友達関係を生成するには、双方のユーザのアクセストークンが必要ですが、アクセストークンは「アプリ認証」したユーザしか取得できませんので注意が必要です。