所以我在facebook上有一个应用程序,它具有publish_stream,manage_pages的权限,我到目前为止能够将“文本”更新发布到我自己的个人资料中,并显示“通过应用程序名称”。
然后我尝试将此应用程序发布到我的页面上。
我可以通过client.Post("/page name/feed", new { message = "abcd" });
(仅限文字)来做到这一点但是如果我尝试发布链接,标题或图片,它仍会在我的网页上发布,但是我的个人资料就像我在分享该页面上的内容并未作为我的页面发布。
我正在使用此方法发布。
private void CheckAuthorization()
{
string app_id = "APP_ID";
string app_secret = "APP_SECRET";
string scope = "publish_stream,manage_pages,";
if (Request["code"] == null)
{
Response.Redirect(string.Format(
"https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope={2}",
app_id, Request.Url.AbsoluteUri, scope));
}
else
{
Dictionary<string, string> tokens = new Dictionary<string, string>();
string url = string.Format("https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&scope={2}&code={3}&client_secret={4}",
app_id, Request.Url.AbsoluteUri, scope, Request["code"].ToString(), app_secret);
HttpWebRequest request = System.Net.WebRequest.Create(url) as HttpWebRequest;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string vals = reader.ReadToEnd();
foreach (string token in vals.Split('&'))
{
//meh.aspx?token1=steve&token2=jake&...
tokens.Add(token.Substring(0, token.IndexOf("=")),
token.Substring(token.IndexOf("=") + 1, token.Length - token.IndexOf("=") - 1));
}
}
string access_tokens = tokens["access_token"];
var client = new FacebookClient(access_tokens);
dynamic parameters = new ExpandoObject();
parameters.message = "Check out this New Item";
parameters.link = "https://www.example.com";
parameters.picture = "http://www.example.com/images/img.jpg";
parameters.name = "Item Title";
parameters.caption = "Caption for the link";
client.Post("/AllTheMed/feed", new { message = "lsjlsjlsjkldf" });
}
}
答案 0 :(得分:0)
在您的代码中,您只能获得USER访问令牌。但是,要以页面形式发布,您需要获取PAGE访问令牌。有关详情,请参阅此处:https://developers.facebook.com/docs/authentication/pages/
简而言之,您需要执行以下操作:
基本上,在你的
之前client.Post("/AllTheMed/feed", ...)
你应该打电话给我/帐户(这里是伪代码):
var myAccounts = client.Get("/me/accounts");
var pageAccessToken = myAccounts.Single(x => x.pageName == MY_PAGE_NAME).access_token;
var pageClient = new FacebookClient(pageAccessToken);
pageClient.Post("/me/feed", ...)