在我的桌面应用程序中,我想阅读特定 Facebook页面 (不适用于Facebook用户)
的Wall帖子,消息,类似计数等>我浏览了这篇文章get user data(on stackoverflow)。我希望在FB页面上实现同样的目标。
我已准备好创建一个Facebook应用程序来实现这一目标,并让用户授予提取数据的权限。
请就上述事项提出建议。
答案 0 :(得分:16)
您需要一个访问令牌才能从Facebook获取页面数据。 首先使用下面的URL和facebook应用程序的参数获取访问令牌:
https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={yourappid}&client_secret={yourappscret}
然后您可以使用返回令牌
来调用Facebook Graph API一般:https://graph.facebook.com/wikipedia?access_token={token}
帖子:https://graph.facebook.com/wikipedia/posts?access_token={token}
示例代码是;
class Program
{
static void Main(string[] args)
{
var client = new WebClient();
string oauthUrl = string.Format("https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={0}&client_secret={1}", "appid", "appsecret");
string accessToken = client.DownloadString(oauthUrl).Split('=')[1];
string pageInfo = client.DownloadString(string.Format("https://graph.facebook.com/wikipedia?access_token={0} ", accessToken));
string pagePosts = client.DownloadString(string.Format("https://graph.facebook.com/wikipedia/posts?access_token={0} ", accessToken));
}
}
答案 1 :(得分:4)
经过研究我开发了这段代码
class Posts
{
public string PostId { get; set; }
public string PostStory { get; set; }
public string PostMessage { get; set; }
public string PostPictureUri { get; set; }
public Image PostImage { get; set; }
public string UserId { get; set; }
public string UserName { get; set; }
}
private List<Posts> getFBPosts()
{
//Facebook.FacebookClient myfacebook = new Facebook.FacebookClient();
string AppId = "--------";
string AppSecret = "----------";
var client = new WebClient();
string oauthUrl = string.Format("https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={0}&client_secret={1}", AppId, AppSecret);
string accessToken = client.DownloadString(oauthUrl).Split('=')[1];
FacebookClient myfbclient = new FacebookClient(accessToken);
string versio= myfbclient.Version;
var parameters = new Dictionary<string, object>();
parameters["fields"] = "id,message,picture";
string myPage="fanPage"; // put your page name
dynamic result = myfbclient.Get(myPage +"/posts", parameters);
List<Posts> postsList = new List<Posts>();
int mycount=result.data.Count;
for (int i = 0; i < result.data.Count; i++)
{
Posts posts = new Posts();
posts.PostId = result.data[i].id;
posts.PostPictureUri = result.data[i].picture;
posts.PostMessage= result.data[i].message;
var request = WebRequest.Create(posts.PostPictureUri);
using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
{
posts.PostImage = Bitmap.FromStream(stream);
}
postsList.Add(posts);
}
return postsList;
}
答案 2 :(得分:2)
您还可以使用名为Facebook的Nuget包从Facebook图表中获取数据。此外,Json.NET可帮助您将数据直接映射到对象中:
public class FacebookPageInfo
{
public long Id { get; set; }
public string Name { get; set; }
}
public class FacebookPost
{
public string Message { get; set; }
// ReSharper disable once InconsistentNaming
public string Created_Time { get; set; }
public string Id { get; set; }
}
public class FacebookPagingInfo
{
public string Previous { get; set; }
public string Next { get; set; }
}
public class FacebookPostData
{
public List<FacebookPost> Data { get; set; }
public FacebookPagingInfo Paging { get; set; }
}
public class Friend
{
public string Id { get; set; }
public string Name { get; set; }
}
// get access token
string oauthUrl = $"https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={appId}&client_secret={appSecret}";
string accessToken = client.DownloadString(oauthUrl).Split('=')[1];
// get data and deserialize it
var fbClient = new FacebookClient(accessToken);
var fbData = fbClient.Get("/wikipedia/").ToString();
var info = JsonConvert.DeserializeObject<FacebookPageInfo>(fbData);
fbData = fbClient.Get("/wikipedia/posts").ToString();
var posts = JsonConvert.DeserializeObject<FacebookPostData>(fbData);