Оставить комментарий на стене Facebook используя asp.net - PullRequest
5 голосов
/ 08 апреля 2011

У меня есть веб-сайт, который я зарегистрировал как приложение Facebook - теперь у меня есть идентификатор приложения.

Мой сайт ASP.net C #. Когда пользователь нажимает кнопку, я бы хотел, чтобы он опубликовал заранее заданное сообщение на своей стене. Я ожидаю, что Facebook представит пользователю диалог входа в систему - он войдет в систему и предоставит разрешение на публикацию для моего веб-приложения.

У кого-нибудь есть пример кода, который бы это делал? Я думаю, что мне нужно использовать Graph API, но все примеры, которые я видел, используют PHP - о котором я ничего не знаю. Я ищу пример, который будет использовать Java Script (о котором я почти ничего не знаю) или C # (красиво!).

* Обновление *

Мне удалось получить access_token. Теперь я звоню через Facebook C # API, чтобы отправить сообщение на стену. Я получаю сообщение об ошибке:

(# 803) Некоторые из указанных вами псевдонимов не существуют: profile_id

Я прошел по коду API и обнаружил, что он пытается отправить по следующему адресу: {https://graph.facebook.com/PROFILE_ID/feed}, данные публикации: message = Sample + message + from + c% 23 + sdk & access_token = 199209316768200 | 2.1avFTZuDGR4HJ7jPFeaO3Q __ 3600.1302897600.1-100000242760733 |. R4DkNDf4JCb6B2F64n5TSQwBqvM

Я почти уверен, что мой токен должен быть действительным. Перед запросом токена доступа я запросил publish_stream в запросе авторизации приложения следующим образом:

Response.Redirect ("https://www.facebook.com/dialog/oauth?client_id=" + myAppId + "&redirect_uri=" + myURL + "&scope=publish_stream");

Код SDK, который фактически делает запрос, выглядит следующим образом:

private string MakeRequest(Uri url, HttpVerb httpVerb,
                                   Dictionary<string, string> args)
        { 
        if (args != null && args.Keys.Count > 0 && httpVerb == HttpVerb.GET)
        {
            url = new Uri(url.ToString() + EncodeDictionary(args, true));
        }

        HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

        request.Method = httpVerb.ToString();

        if (httpVerb == HttpVerb.POST)
        {
            string postData = EncodeDictionary(args, false);

            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] postDataBytes = encoding.GetBytes(postData);

            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = postDataBytes.Length;

            Stream requestStream = request.GetRequestStream();
            requestStream.Write(postDataBytes, 0, postDataBytes.Length);
            requestStream.Close();
        }

        try
        {
            using (HttpWebResponse response 
                    = request.GetResponse() as HttpWebResponse)
            {
                StreamReader reader 
                    = new StreamReader(response.GetResponseStream());

                return reader.ReadToEnd();
            }
        }

Кто-нибудь может увидеть, что я делаю не так?

Большое спасибо,

Роб.

Ответы [ 5 ]

2 голосов
/ 13 апреля 2011

Прежде всего, вам необходимо позаботиться о Аутентификации .Вам необходимо создать приложение и использовать OAuth для получения токена доступа.Все это описано в руководстве по аутентификации.

Чтобы опубликовать что-либо на стене пользователя, взгляните на Graph API в разделе «Публикация».

Для начала вы можетеиспользуйте C # SDK Facebook

1 голос
/ 15 октября 2012

Я создал видео, показывающее, как это сделать, используя OG: http://www.markhagan.me/Samples/Grant-Access-And-Post-As-Facebook-User-ASPNet

Если у вас нет времени смотреть видео, вот полный код:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Facebook;

namespace FBO
{
    public partial class facebooksync : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            CheckAuthorization();
        }

        private void CheckAuthorization()
        {
            string app_id = "374961455917802";
            string app_secret = "9153b340ee604f7917fd57c7ab08b3fa";
            string scope = "publish_stream,manage_pages";

            if (Request["code"] == null)
            {
                Response.Redirect(string.Format(
                    "https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope={2}",
                    app_id, Request.Url.AbsoluteUri, scope));
            }
            else
            {
                Dictionary<string, string> tokens = new Dictionary<string, string>();

                string url = string.Format("https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&scope={2}&code={3}&client_secret={4}",
                    app_id, Request.Url.AbsoluteUri, scope, Request["code"].ToString(), app_secret);

                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

                using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                {
                    StreamReader reader = new StreamReader(response.GetResponseStream());

                    string vals = reader.ReadToEnd();

                    foreach (string token in vals.Split('&'))
                    {
                        //meh.aspx?token1=steve&token2=jake&...
                        tokens.Add(token.Substring(0, token.IndexOf("=")),
                            token.Substring(token.IndexOf("=") + 1, token.Length - token.IndexOf("=") - 1));
                    }
                }

                string access_token = tokens["access_token"];

                var client = new FacebookClient(access_token);

                client.Post("/me/feed", new { message = "markhagan.me video tutorial" });
            }
        }
    }
}
1 голос
/ 08 апреля 2011

Вы можете использовать библиотеку .NET, например http://facebooknet.codeplex.com/, чтобы сделать это. Там есть пара, я только что вспомнил эту ...

НТН.

0 голосов
/ 19 апреля 2011

Как насчет этого API , который я недавно разработал, чтобы упростить интеграцию с Facebook.

Вот пример кода для вас, на сайте больше документации.

Аутентификация пользователей

Imports Branches.FBAPI
...
Dim SI As New SessionInfo("[application_id]","applicaiton_secret")
'Redirects user to facebooks
SI.AuthenticateUser("http://[my url]", New SessionInfo.PermissionsEnum(){SessionInfo.PermissionsEnum.email, SessionInfo.PermissionsEnum.read_stream}))
'Called when the user is returned to your page
Dim FSR = FS.ReadFacebooAuthResponse
Response.Write(FSR.Access_Token)
Response.Write(FSR.UserID)

Создание сообщений

Imports Branches.FBAPI
...
Dim SI As New SessionInfo("[access_token]"))
Dim Posts = New Functions.Posts(SI)
Dim P As New Post
P.name = "name of post"
P.message = "message"
P.link = "www.cnn.com"
P.caption = "my caption"
Posts.PublishCreate("[object ID to post to]", P)
Dim PostID = P.id

Получение информации из графика.

Dim SI As New SessionInfo("[access_token]"))
Dim Req New Functions.Requests(SI)
Dim User = Req.GetUserInfo("[optional user ID]")
Response.Write(U.name)
0 голосов
/ 13 апреля 2011

Я использую это http://facebooksdk.codeplex.com/. Я использую последнюю стабильную версию, простую в использовании. Чтобы комментировать, просто оставьте сообщение с / OBJECT_ID / comments для получения дополнительной информации, см. http://developers.facebook.com/docs/reference/api/#publishing и http://developers.facebook.com/docs/reference/api/post/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...