在Windows窗体应用上使用Facebook Graph API共享或链接帖子

时间:2015-09-11 14:33:27

标签: c# facebook facebook-graph-api

我正在将社交媒体集成扩展到应用程序。

找到此post但没有合适的答案。

简而言之:

  1. 将照片发布到用户1的墙上(登录后)。

  2. “分享”用户2的帖子(登录后)。

  3. 我需要能够登录并将照片上传到我当前登录的帐户。(我已经实现了这一点)。

    我认为这是所需的逻辑:

    检索post_id并将其分享/发布到其他用户时间轴上... 我已经完成了所有工作,包括检索post_id。 现在我陷入困境,似乎无法找到解决办法,也许这只是一个漫长的一周......

    这是一个Windows窗体应用程序(不判断 - 不是我的电话),我使用此代码生成登录:

        public static string GenerateLoginUrl()
        {
            dynamic parameters = new ExpandoObject();
            parameters.client_id = ""; //app id
            parameters.redirect_uri = "https://www.google.com"; 
            parameters.response_type = "token";
            parameters.display = "popup";
    
            var fb = new FacebookClient();
            Uri loginUri = fb.GetLoginUrl(parameters);
            return loginUri.AbsoluteUri;
        }    
    

    然后我使用以下方法导航到上述URL后验证:

        private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            if (webBrowser1.Visible)
            {
                var fb = new FacebookClient();
                FacebookOAuthResult oauthResult;
                if (fb.TryParseOAuthCallbackUrl(e.Url, out oauthResult))
                {
                    if (oauthResult.IsSuccess)
                    {
                        //happy
                    }
                }
            }
        }
    

    我在FacebookClient类实例的“PostCompleted”方法上检索post_id,如下所示:

     fb.PostCompleted += (oo, eee) =>
        {
            if (eee.Cancelled || eee.Error != null)
            {
                return;
            }
            var result = eee.GetResultData();
            JsonObject myObj = (JsonObject)result;
            string post_id = myObj["post_id"].ToString();
        };
    

    我已经设法做了所有的小点点,但现在我坚持把它们放在一起,谢谢你提前,任何信息和有用的链接都会很棒。

1 个答案:

答案 0 :(得分:1)

最后让它努力满足我的要求......

注意:此答案假设您了解使用C#Facebook API进行身份验证和发布的基础知识:

fb.PostCompleted += (o, ee) =>
    {
        if (ee.Cancelled || ee.Error != null)
            return;

        JsonObject myObj = (JsonObject)ee.GetResultData();
        string href = String.Format("https://www.facebook.com/photo.php?fbid={0}&set=a.{1}", myObj["id"].ToString(), myObj["post_id"].ToString());

        this.Invoke(new MethodInvoker(delegate()
        {
            ClientLogin loginDialog = new ClientLogin(href);
            loginDialog.Show();
        }));
    };
fb.PostTaskAsync(parameters);

任务完成后,我打开一个包含“WebBrowser”控件的表单 我在哪里调用以下代码:

webBrowserOAuth.Navigate(String.Format(@"https://www.facebook.com/dialog/feed?app_id={0}&href={1}&redirect_uri={2}", app_id, _href, redirect_uri));

然后处理"webBrowserOAuth_Navigated"事件以满足您的要求......