在我的桌面应用程序中,我想阅读特定Facebook 页面 (不是 Facebook 用户)的 Wall 帖子、消息、喜欢计数等
我通过这篇文章获取用户数据(在 stackoverflow 上)。我想实现同样的目标,但对于 FB 页面。
我准备创建一个 facebook 应用程序来实现这一点,并让用户授予提取数据的权限。
请就上述情况提出建议。
在我的桌面应用程序中,我想阅读特定Facebook 页面 (不是 Facebook 用户)的 Wall 帖子、消息、喜欢计数等
我通过这篇文章获取用户数据(在 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/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<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;
}
您还可以使用名为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);