Настольное приложение для создания события через страницу в фейсбуке - PullRequest
0 голосов
/ 04 января 2012

У меня есть фан-страница на Facebook, и я пытаюсь создать настольное приложение, которое может создавать события через эту фан-страницу, однако у меня возникают проблемы с пониманием того, как история идет с токенами доступа, идентификатором, разрешениями пользователя ... Если яне ошибаюсь, когда у меня есть accesstoken, я могу создать событие, используя facebookSDK из codeplex и следующую функцию:

public string CreateEvent(string accessToken)
        {
            FacebookClient facebookClient = new FacebookClient(accessToken);
            Dictionary<string, object> createEventParameters = new Dictionary<string, object>();
            createEventParameters.Add("name", "My birthday party )");
            createEventParameters.Add("start_time", DateTime.Now.AddDays(2).ToUniversalTime().ToString());
            createEventParameters.Add("end_time", DateTime.Now.AddDays(2).AddHours(4).ToUniversalTime().ToString());
            createEventParameters.Add("owner", "Balaji Birajdar");
            createEventParameters.Add("description", " ( a long description can be used here..)");

            //Add the "venue" details
            JsonObject venueParameters = new JsonObject();
            venueParameters.Add("street", "dggdfgg");
            venueParameters.Add("city", "gdfgf");
            venueParameters.Add("state", "gfgdfgfg");
            venueParameters.Add("zip", "gfdgdfg");
            venueParameters.Add("country", "gfdgfg");
            venueParameters.Add("latitude", "100.0");
            venueParameters.Add("longitude", "100.0");
            createEventParameters.Add("venue", venueParameters);

            createEventParameters.Add("privacy", "OPEN");
            createEventParameters.Add("location", "fhdhdfghgh");

            Add the event logo image
            FacebookMediaObject logo = new FacebookMediaObject()
            {
                ContentType = "image/jpeg",
                FileName = @"C:\logo.jpg"
            };
            logo.SetValue(File.ReadAllBytes(logo.FileName));
            createEventParameters["@file.jpg"] = logo;

            JsonObject resul = facebookClient.Post("/me/events", createEventParameters) as JsonObject;
            return resul["id"].ToString();
        }

Всегда ли мне нужно приложение для этого?

У меня естьтестовое приложение, и я могу получить от него токен доступа, используя:

public string getToken(string strURL)
        {
            string strURL = "https://graph.facebook.com/oauth/access_token?client_id=149585851811979&client_secret=blablablablabalalbal&grant_type=client_credentials";

            Uri Uri = new Uri(strURL);
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri);
            HttpWebResponse HWResponse = (HttpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(HWResponse.GetResponseStream());
            string token = sr.ReadToEnd();
            sr.Close();
            token = token.Replace("access_token=", "");
            return token;
        }

Я попробовал это так, но оно, очевидно, не сработало.

Итак, мои вопросы:

Всегда ли мне нужно приложение?Если да, как мне подключить его к моей существующей фан-странице?Где я могу установить свои права пользователя?И как мне тогда войти в систему с пользователем?

Я просто думаю, что документация немного расплывчата: s Извините, если мои вопросы глупы.

Любая помощь / псевдокод приветствуется!

1 Ответ

0 голосов
/ 13 января 2012

Я использую BatchFB для создания событий в приложении App Engine, у меня это работает, вот код

  // Some Date math that is from my App, but I am using Joda DateTime for output
  // formatting.. I have found that if the start_time is malformed by FB standards it will 
  // to create an event, and give you an eventid, but the event never really gets created.
  long    hour = { your data }
  DateTime start_time = new DateTime(d).plusHours((int)hour);
  String stime = start_time.toString(ISODateTimeFormat.dateTime());

  Batcher batcher = new FacebookBatcher(token);
  Later<NewFeedItem> event = batcher.post(
      "/events", NewFeedItem.class,
      new Param("name", edata.getStringProperty(EventData.Schema.Name)),
      new Param("start_time", stime )
  );
  long eventid = event.get().id;

Я генерирую токен на стороне клиента с помощью FBJS и передаю его на сервер.

NewFeedItem - это просто класс, определяющий длинную переменную, см. Сайт batchFB.

С учетом сказанного я думаю о переходе на RestFB, потому что не могу заставить BatchFB поддерживать двоичные параметры при попытке опубликовать изображения. Кроме того, RestFB документирован лучше. Они кажутся связанными проектами и часто ссылаются друг на друга.

Я пока не добавляю данные в Место проведения, но я прочитал, что для работы GraphAPI они должны быть параметрами верхнего уровня. то есть добавить улицу, город, штат на том же уровне, что и местоположение и конфиденциальность. Когда вы пытаетесь прочитать событие, оно входит в параметр места проведения, но оно должно быть на верхнем уровне при создании. Также отступите от использования только имени и start_time, единственных обязательных параметров, и добавьте его, как только оно заработает.

-Джон Гентилин

...