状況: 私は Web サイトを持っていて、「投稿」を作成しています。新しい投稿が作成されたら、新しい投稿を Facebook ページのフィードに送信したいと考えています。これを行うためのすべてのコードがダウンしており、グラフ API エクスプローラー ツールからアクセス トークンを取得する限り、問題なく動作します。約 1 時間後に有効期限が切れるため、これは機能しません。コードからアクセス トークンを生成すると、それはアプリ アクセス トークンのように見え、自分のページにアクセスできません。したがって、大きな問題は、自分のページへの投稿にアクセスできるコードからユーザー アクセス トークンを取得する方法です。
アクセストークンを取得する方法は次のとおりです。
private static string GetApiAccessToken()
{
var client = new FacebookClient();
dynamic result = client.Get("oauth/access_token", new
{
client_id = SessionGetter.Instance.FacebookApiKey,
client_secret = SessionGetter.Instance.FacebookSecretKey,
grant_type = "client_credentials",
scope = "manage_pages"
});
return result.access_token;
}
次に、アクセス トークンを使用して Page アクセス トークンを取得しようとしましたが、ここで、承認がなく、辞書に返されるのは「id」だけであることがわかります。
private static string GetPageAccessToken(string accessToken, string pageId)
{
try
{
var fb = new FacebookClient(accessToken);
var parameters = new Dictionary<string, object>();
parameters["fields"] = "access_token";
var result = (IDictionary<string, object>)fb.Get(pageId, parameters);
var pageAccessToken = (string)result["access_token"];
return pageAccessToken;
}
catch (FacebookApiException ex)
{
}
return null;
}
先ほど言ったように、グラフ エクスプローラーからアクセス トークンを使用すると、コードは正常に動作します。次に、グラフ API にポストが行われます
var facebookClient = new FacebookClient(pageAccessToken);
var result = (IDictionary<string, object>)facebookClient.Post("me/feed", new Dictionary<string, object>
{{"message",postMessage}, {"picture", csLogo},
{"link", LinkHelper.AssignmentUrl(wrapper.Assignment)}});