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

C# 使用C从facebook获取FB页面数据#,c#,facebook,api,facebook-graph-api,facebook-c#-sdk,C#,Facebook,Api,Facebook Graph Api,Facebook C# Sdk,在我的桌面应用程序中,我想阅读特定Facebook页面的墙帖、消息、计数等(不适用于Facebook用户) 我浏览了这篇文章。我想实现同样的事情,但为FB页面 我已经准备好创建一个facebook应用程序来实现这一点,并允许用户获取数据 请提供上述建议。您需要访问令牌才能从Facebook获取页面数据。 首先使用以下URL和facebook应用程序的参数获取访问令牌: https://graph.facebook.com/oauth/access_token?type=client_cred&c

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

我浏览了这篇文章。我想实现同样的事情,但为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;

}
类帖子
{
公共字符串PostId{get;set;}
公共字符串PostStory{get;set;}
公共字符串PostMessage{get;set;}
公共字符串PostPictureUri{get;set;}
公共映像后映像{get;set;}
公共字符串用户标识{get;set;}
公共字符串用户名{get;set;}
}
私有列表getFBPosts()
{
//Facebook.Facebook客户端myfacebook=新建Facebook.Facebook客户端();
字符串AppId=“----------”;
字符串AppSecret=“--------------”;
var client=new WebClient();
字符串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(OAuthull).Split('=')[1];
FacebookClient myfbclient=新的FacebookClient(accessToken);
字符串versio=myfbclient.Version;
var参数=新字典();
参数[“字段”]=“id、消息、图片”;
string myPage=“fanPage”//输入页面名称
动态结果=myfbclient.Get(myPage+“/posts”,参数);
List postsList=新列表();
int mycount=result.data.Count;
对于(int i=0;i
您还可以使用名为的Nuget包从Facebook graph获取数据。此外,还可以帮助您将数据直接映射到对象:

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);
公共类FacebookPageInfo
{
公共长Id{get;set;}
公共字符串名称{get;set;}
}
公共类FacebookPost
{
公共字符串消息{get;set;}
//ReSharper禁用一次不一致命名
创建的公共字符串\u Time{get;set;}
公共字符串Id{get;set;}
}
公共类FaceBookPaginInfo
{
前一个公共字符串{get;set;}
公共字符串Next{get;set;}
}
公共类FacebookPostData
{
公共列表数据{get;set;}
public FaceBookPaginInfo分页{get;set;}
}
公课朋友
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
}
//获取访问令牌
字符串oauthUrl=$”https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={appId}&client_secret={appSecret}”;
string accessToken=client.DownloadString(OAuthull).Split('=')[1];
//获取数据并反序列化它
var fbClient=新的FacebookClient(accessToken);
var fbData=fbClient.Get(“/wikipedia/”).ToString();
var info=JsonConvert.DeserializeObject(fbData);
fbData=fbClient.Get(“/wikipedia/posts”).ToString();
var posts=JsonConvert.DeserializeObject(fbData);

上述内容确实让我快速了解了如何获取访问令牌。我想更进一步。以上步骤将帮助我获取页面的信息和帖子。现在,我想让用户以页面管理员的身份回复/评论墙上的某个帖子。这就是我希望我的应用程序最终实现的目标。感谢您的回复。您能解释一下,而不是仅仅粘贴它吗?这段代码获取Facebook粉丝页面的帖子{id,message和每个帖子的图片},并保存在一个列表中。它使用Facebook graph API v.2.7。您可能会发现许多其他代码,但其中许多代码现在已经过时。这项工作将持续到2016年9月13日。你只需要提供应用程序ID、应用程序机密以及你想要获取数据的facebook粉丝页面名称。