使用C#从Facebook获取FB页面数据

在我的桌面应用程序中,我想阅读特定Facebook页面的Wallpost,消息,类似计数等(不适用于facebook用户)

我经历了这篇post获取用户数据(在stackoverflow上) 。 我想实现同样的事情,但对于FB页面。

我准备创建一个Facebook应用程序来实现这一点,并让用户授予提取数据的权限。

请就上述建议。

您需要访问令牌才能从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?access_token={token}

post: https://graph.facebook.com/wikipedia/posts?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)); } } 

经过研究我已经开发了这个代码

  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 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(); parameters["fields"] = "id,message,picture"; string myPage="fanPage"; // put your page name dynamic result = myfbclient.Get(myPage +"/posts", parameters); List postsList = new List(); 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; } 

您还可以使用名为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 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(fbData); fbData = fbClient.Get("/wikipedia/posts").ToString(); var posts = JsonConvert.DeserializeObject(fbData);