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

3
在我的桌面应用程序中,我想读取特定的Facebook页面(而不是Facebook用户)的墙贴、消息、点赞数等内容。我查看了这篇文章(在stackoverflow上获取用户数据),我想实现相同的功能,但是针对的是FB页面。我准备创建一个Facebook应用程序来实现这一目标,并让用户授权以获取数据。请就以上事项提供建议。
3个回答

17
你需要获取一个访问令牌才能从 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));
    }
}

以上内容让我快速了解了如何获取访问令牌的方法。我想再进一步。上述步骤将帮助我拉取页面的信息和帖子。现在,我希望从软件中让用户以页面管理员的身份回复/评论特定的帖子。这就是我最终想要实现的应用程序目标。感谢您的回复。 - HishHash

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;

}

你能详细解释一下吗?不要只是简单地复制粘贴。 - byxor
这段代码获取Facebook粉丝页的帖子{id,每个帖子的消息和图片}并保存在列表中。它使用Facebook Graph API v.2.7。您可能会找到许多其他代码,但其中许多已经过时。这个代码可以工作到2016年9月13日。 您只需要提供应用程序ID、应用程序密钥和您想要获取数据的Facebook粉丝页名称即可。 - Syed Asad Ali Zaidi

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接