zoukankan      html  css  js  c++  java
  • 应用facebook .net sdk

    1.本博客主要介绍如何应用facebook .net SDK,实现发帖、点赞、上传照片视频等功能,更多关于facebook API,请参考:https://developers.facebook.com

    2.注册facebook账号,并且注册facebook app,参考地址:https://developers.facebook.com/apps,注册了app之后,会得到一些此app的信息,

    这些信息都是要用到的。

    3.注册好了App之后,开始新建解决方案(本例为asp.net mvc4 web app)

    4.引入facebook .net sdk,下载地址:https://github.com/facebook-csharp-sdk/facebook-csharp-sdk,关于更多SDK文档地址:https://developers.facebook.com/docs/

    除了直接下载之外,还能通过NuGet添加

     

    5.安装完Facebook SDK,对web.config文件做点设置如下

    6.一切准备就绪,现在开始使用SDK,首先登入授权,授权过程中有个scope参数,这里面是表示要授权的一些项

    FacebookClient fbClient = new FacebookClient();
            string appID = ConfigurationManager.AppSettings["AppID"];
            string appSecret = ConfigurationManager.AppSettings["AppSecret"];
            string redirectUri = ConfigurationManager.AppSettings["RedirectUri"];
    View Code
    public ActionResult Login()
            {
                string loginUrl = "";
                dynamic loginResult = fbClient.GetLoginUrl(new
                {
                    client_id = appID,
                    redirect_uri = redirectUri,
                    display = "page",
                    scope = "email,publish_stream,read_stream"
                    //scope = "email,publish_stream,read_stream,share_item,video_upload,photo_upload,create_note,user_friends,publish_actions,export_stream,status_update"                  
                });
                loginUrl = loginResult.ToString();
                if (!string.IsNullOrEmpty(loginUrl))
                    return Redirect(loginUrl);
                else
                    return Content("Login failed!");
            }
    View Code


    7.登入成功之后会跳转到上文提到的redirect_uri地址,而且会传回一个code值,我们用传回来的code去换取access token(这个灰常重要)

    public ActionResult FBMain()
            {
                string code = Request.Params["code"];
                string accessToken = "";
                if (!string.IsNullOrEmpty(code))
                {
                    ///Get access token
                    dynamic tokenResult = fbClient.Get("/oauth/access_token", new
                    {
                        client_id = appID,
                        client_secret = appSecret,
                        redirect_uri = redirectUri,
                        code = code
                    });
                    accessToken = tokenResult.access_token.ToString();
                    ViewBag.Message = "Get token successful!The token value:" + accessToken;
                }
                else
                {
                    ViewBag.Message = "faield to get token!";
                }
                return View();
            }
    View Code

    8.拿到access token之后,就可以用它做很多事情了,例如发状态上传照片

     a.发状态

    /// <summary>
            ///Post a news feed
            /// </summary>
            /// <author>Johnny</author>
            /// <param name="status">the text message</param>
            /// <date>2013/10/25, 17:09:49</date>
            /// <returns>a posted ID</returns>
            public string Post(string status)
            {
                string id = null;
    
                try
                {
                    if (!string.IsNullOrEmpty(accessToken))
                    {
                        FacebookClient fbClient = new FacebookClient(accessToken);
                        dynamic postResult = fbClient.Post("/me/feed", new
                        {
                            message = status
                        });
                        id = postResult.id.ToString();
                    }
                    else
                        errorMessage = ErrorTokenMessage;
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
    
                return id;
            }
    View Code

    b.发链接

    /// <summary>
            ///share a feed
            /// </summary>
            /// <author>Johnny</author>
            /// <date>2013/10/29, 09:46:08</date>
            /// <param name="status">the text message</param>
            /// <param name="link">an valid link(eg: http://www.mojikan.com)</param>
            /// valid tools:https://developers.facebook.com/tools/debug
            /// <returns>return a post id</returns>
            public string Share(string status, string link)
            {
                string shareID = null;
                try
                {
                    if (!string.IsNullOrEmpty(accessToken))
                    {
                        FacebookClient fbClient = new FacebookClient(accessToken);
                        dynamic shareResult = fbClient.Post("me/feed", new
                         {
                             message = status,
                             link = link
                         });
                        shareID = shareResult.id;
                    }
                    else
                        errorMessage = ErrorTokenMessage;
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return shareID;
            }
    View Code

    c.传照片

    /// <summary>
            ///upload picture
            /// </summary>
            /// <author>Johnny</author>
            /// <param name="status">the text message</param>
            /// <param name="path">the picture's path</param>
            /// <date>2013/10/31, 15:24:51</date>
            /// <returns>picture id & post id</returns>
            public string PostPicture(String status, String path)
            {
                string result = null;
                try
                {
                    if (!string.IsNullOrEmpty(accessToken))
                    {
                        FacebookClient fbClient = new FacebookClient(accessToken);
                        using (var stream = File.OpenRead(path))
                        {
                            dynamic pictureResult = fbClient.Post("me/photos",
                                                         new
                                                         {
                                                             message = status,
                                                             source = new FacebookMediaStream
                                                             {
                                                                 ContentType = "image/jpg",
                                                                 FileName = Path.GetFileName(path)
                                                             }.SetValue(stream)
                                                         });
                            if (pictureResult != null)
                                result = pictureResult.ToString();
                        }
                    }
                    else
                        errorMessage = ErrorTokenMessage;
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return result;
            }
    View Code


    d.传视频

    /// <summary>
            ///upload video
            /// </summary>
            /// <author>Johnny</author>
            /// <param name="status">the text message</param>
            /// <param name="path">the video's path</param>
            /// <date>2013/10/31, 15:26:40</date>
            /// <returns>an video id</returns>
            //The aspect ratio of the video must be between 9x16 and 16x9, and the video cannot exceed 1024MB or 180 minutes in length.
            public string PostVideo(String status, String path)
            {
                string result = null;
                try
                {
                    if (!string.IsNullOrEmpty(accessToken))
                    {
                        FacebookClient fbClient = new FacebookClient(accessToken);
                        Stream stream = File.OpenRead(path);
                        FacebookMediaStream medStream = new FacebookMediaStream
                                                               {
                                                                   ContentType = "video/mp4",
                                                                   FileName = Path.GetFileName(path)
                                                               }.SetValue(stream);
    
                        dynamic videoResult = fbClient.Post("me/videos",
                                                           new
                                                           {
                                                               description = status,
                                                               source = medStream
                                                           });
                        if (videoResult != null)
                            result = videoResult.ToString();
                    }
                    else
                        errorMessage = ErrorTokenMessage;
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return result;
            }
    View Code


    e.点赞

    /// <summary>
            ///likes a news feed
            /// </summary>
            /// <author>Johnny</author>
            /// <param name="postID">a post id</param>
            /// <returns>return a bool value</returns>
            /// <date>2013/10/25, 18:35:51</date>
            public bool Like(string postID)
            {
                bool result = false;
                try
                {
                    if (!string.IsNullOrEmpty(accessToken))
                    {
                        FacebookClient fbClient = new FacebookClient(accessToken);
                        dynamic likeResult = fbClient.Post("/" + postID + "/likes", new
                        {
                            //post_id = postID,
                        });
                        result = Convert.ToBoolean(likeResult);
                    }
                    else
                        errorMessage = ErrorTokenMessage;
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return result;
            }
    View Code


    f.发送App邀请

            /// <summary>
            ///send a app request to the user.
            /// </summary>
            /// <author>Johnny</author>
            /// <param name="status">the request message</param>
            /// <returns>return app object ids & user ids</returns>
            /// <date>2013/10/28, 09:33:35</date>
            public string AppRequest(string userID, string status)
            {
                string result = null;
                try
                {
                    string appToken = this.GetAppAccessToken();
                    if (!string.IsNullOrEmpty(appToken))
                    {
                        FacebookClient fbClient = new FacebookClient(appToken);
                        dynamic requestResult = fbClient.Post(userID + "/apprequests", new
                          {
                              message = status
                          });
                        result = requestResult.ToString();
                    }
                    else
                        errorMessage = ErrorTokenMessage;
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return result;
            }
    
            /// <summary>
            ///Get an app access token
            /// </summary>
            /// <author>Johnny</author>
            /// <date>2013/11/05, 11:52:37</date>
            private string GetAppAccessToken()
            {
                string appToken = null;
                try
                {
                    FacebookClient client = new FacebookClient();
                    dynamic token = client.Get("/oauth/access_token", new
                    {
                        client_id = appID,
                        client_secret = appSecret,
                        grant_type = "client_credentials"
                    });
    
                    appToken = token.access_token.ToString();
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return appToken;
            }
    View Code

    g.获取状态列表

    /// <summary>
            ///get current user's post list
            /// </summary>
            /// <author>Johnny</author>
            /// <returns>return post list</returns>
            /// <date>2013/10/30, 13:42:37</date>
            public List<Post> GetPostList()
            {
                List<Post> postList = null;
                try
                {
                    if (!string.IsNullOrEmpty(accessToken))
                    {
                        FacebookClient fbClient = new FacebookClient(accessToken);
                        dynamic postResult = (IDictionary<string, object>)fbClient.Get("/me/feed");
                        postList = new List<Post>();
                        postList = GeneralPostList(postResult);
                    }
                    else
                        errorMessage = ErrorTokenMessage;
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return postList;
            }
    
    
            /// <summary>
            ///get one user's post list
            /// </summary>
            /// <param name="userID">user id</param>
            /// <returns>return post list</returns>
            /// <author>Johnny</author>
            /// <date>2013/11/06, 17:06:19</date>
            public List<Post> GetPostList(string userID)
            {
                List<Post> postList = null;
                try
                {
                    if (!string.IsNullOrEmpty(accessToken))
                    {
                        FacebookClient fbClient = new FacebookClient(accessToken);
                        postList = new List<Post>();
                        dynamic postResult = (IDictionary<string, object>)fbClient.Get("/" + userID + "/feed");
                        postList = GeneralPostList(postResult);
                    }
                    else
                        errorMessage = ErrorTokenMessage;
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return postList;
            }
    
            private List<Post> GeneralPostList(dynamic postResult)
            {
                List<Post> postList = null;
                try
                {
                    postList = new List<Post>();
                    foreach (var item in postResult.data)
                    {
                        Dictionary<string, object>.KeyCollection keys = item.Keys;
                        Post post = new Post();
    
                        List<Action> actionList = new List<Action>();
                        dynamic actions = item.actions;
                        if (actions != null)
                        {
                            foreach (var ac in actions)
                            {
                                Action action = new Action();
                                action.link = ac.link.ToString();
                                action.name = ac.name.ToString();
    
                                actionList.Add(action);
                            }
                            post.Actions = actionList;
                        }
    
                        if (keys.Contains<string>("caption"))
                            post.Caption = item.caption.ToString();
                        if (keys.Contains<string>("created_time"))
                            post.CreatedTime = item.created_time.ToString();
                        if (keys.Contains<string>("description"))
                            post.Description = item.description.ToString();
    
                        if (keys.Contains<string>("from"))
                        {
                            FromUser fUser = new FromUser();
                            fUser.ID = item.from.id.ToString();
                            fUser.Name = item.from.name.ToString();
                            post.From = fUser;
                        }
    
                        if (keys.Contains<string>("icon"))
                            post.Icon = item.icon.ToString();
    
                        post.ID = item.id.ToString();
    
                        if (keys.Contains<string>("include_hidden"))
                            post.IncludeHidden = item.include_hidden.ToString();
    
                        if (keys.Contains<string>("link"))
                            post.Link = item.link.ToString();
    
                        if (keys.Contains<string>("message"))
                            post.Message = item.message.ToString();
    
                        if (keys.Contains<string>("picture"))
                            post.Picture = item.picture.ToString();
    
                        if (keys.Contains<string>("name"))
                            post.Name = item.name.ToString();
    
                        if (keys.Contains<string>("object_id"))
                            post.ObjectID = item.object_id.ToString();
    
                        if (keys.Contains<string>("privacy"))
                            post.Privacy = item.privacy.ToString();
    
                        if (keys.Contains<string>("shares"))
                            post.Shares = item.shares.ToString();
    
                        if (keys.Contains<string>("source"))
                            post.Source = item.source.ToString();
    
                        if (keys.Contains<string>("status_type"))
                            post.StatusType = item.status_type.ToString();
    
                        if (keys.Contains<string>("story"))
                            post.Story = item.story.ToString();
    
                        if (keys.Contains<string>("type"))
                            post.Type = item.type.ToString();
    
                        if (keys.Contains<string>("updated_time"))
                            post.UpdatedTime = item.updated_time.ToString();
    
                        postList.Add(post);
                    }
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return postList;
            }
    View Code

    h.获取个人用户信息和朋友信息

    /// <summary>
            ///Get the current user info
            /// </summary>
            /// <author>Johnny</author>
            /// <returns>return an UserInfo</returns>
            /// <date>2013/10/29, 13:36:07</date>
            public UserInfo GetUserInfo()
            {
                UserInfo userInfo = null;
                try
                {
                    if (!string.IsNullOrEmpty(accessToken))
                    {
                        FacebookClient fbClient = new FacebookClient(accessToken);
                        dynamic user = fbClient.Get("/me");
                        Dictionary<string, object>.KeyCollection keys = user.Keys;
                        userInfo = new UserInfo();
                        userInfo.ID = user.id.ToString();
                        if (keys.Contains<string>("name"))
                            userInfo.Name = user.name.ToString();
                        if (keys.Contains<string>("first_name"))
                            userInfo.FirstName = user.first_name.ToString();
                        if (keys.Contains<string>("last_name"))
                            userInfo.LastName = user.last_name.ToString();
                        if (keys.Contains<string>("username"))
                            userInfo.UserName = user.username.ToString();
                        if (keys.Contains<string>("link"))
                            userInfo.Link = user.link.ToString();
                        if (keys.Contains<string>("timezone"))
                            userInfo.TimeZone = user.timezone.ToString();
                        if (keys.Contains<string>("updated_time"))
                            userInfo.UpdatedTime = Convert.ToDateTime(user.updated_time);
                        if (keys.Contains<string>("verified"))
                            userInfo.Verified = user.verified.ToString();
                        if (keys.Contains<string>("gender"))
                            userInfo.Gender = user.gender.ToString();
                    }
                    else
                        errorMessage = ErrorTokenMessage;
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return userInfo;
            }
    
            /// <summary>
            ///get friends info
            /// </summary>
            /// <author>Johnny</author>
            /// <returns>return list of UserInfo</returns>
            /// <date>2013/10/31, 15:57:40</date>
            public List<UserInfo> GetFriendInfoList()
            {
                List<UserInfo> userList = null;
                try
                {
                    if (!string.IsNullOrEmpty(accessToken))
                    {
                        FacebookClient fbClient = new FacebookClient(accessToken);
                        dynamic friends = fbClient.Get("/me/friends");
                        if (friends != null)
                        {
                            userList = new List<UserInfo>();
                            foreach (dynamic item in friends.data)
                            {
                                UserInfo user = new UserInfo();
                                user.ID = item.id.ToString();
                                user.Name = item.name.ToString();
    
                                userList.Add(user);
                            }
                        }
                    }
                    else
                        errorMessage = ErrorTokenMessage;
                }
                catch (FacebookApiException fbex)
                {
                    errorMessage = fbex.Message;
                }
                return userList;
            }
    View Code


    以上就是一些常用的API。

    关于facebook翻墙,请参考这里进行设置,http://www.i7086.com/gugeyingyonggoagentrangninziyoufangwenwangluotuwenjiaocheng

    如设置成功,可以通过谷歌浏览器顺利打开facebook网站,关于证书导入:http://jingyan.baidu.com/article/ca00d56caf98d3e99eebcf16.html

    配置好了goagent,打开它,然后用谷歌浏览器就可以顺利打开facebook,youtobe等网站了,如果要通过IE打开,则改一下设置就行了,谷歌和IE都能开。

  • 相关阅读:
    mybatis-01-简单概述基础点
    04-书城缺少方法
    03-书城bean类中的id缺少get属性
    02-书城传参类型异常
    执行Oracle存储过程报权限不足的解决方法
    创建表空间及用户的SQL
    Oracle instr函数与SqlServer charindex的区别
    利用ExtJS导出Excel
    Java循环日期
    Oracle给不同组数据添加顺序
  • 原文地址:https://www.cnblogs.com/JohnnyYin/p/3410616.html
Copyright © 2011-2022 走看看