桌面应用程序通过Facebook页面创建活动

时间:2012-01-04 13:14:32

标签: c# facebook events desktop-application

我有一个Facebook粉丝页面,我正在尝试创建一个可以通过此粉丝页面创建活动的桌面应用程序,但是我无法理解故事如何与访问令牌,ID,用户权限...一旦我有了accessstoken,我就没错了我可以使用来自codeplex的facebookSDK和以下函数创建一个事件:

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;
        }

我试过这样但显然没有用。

所以我的问题:

我是否总是需要申请?如果是,我如何将其连接到我现有的粉丝页面? 我在哪里设置用户权限?然后我如何与用户一起登录?

我只是认为文档有点含糊:如果我的问题很愚蠢,我很抱歉。

感谢任何帮助/伪代码!

1 个答案:

答案 0 :(得分:0)

我正在使用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只是一个定义long变量的类,请参阅batchFB的站点..

话虽如此,我正在考虑切换到RestFB,因为我无法通过尝试发布图像来让BatchFB支持二进制参数。 RestFB也更好地记录了......它们似乎是相关的项目,经常互相引用。

我还没有添加Venue数据,但我已经读过要使GraphAPI工作,它们需要是顶级参数。即加入街道,城市,州与地点和隐私相同的水平。 当您尝试读取事件时,它将出现在场地参数中,但它在创建时需要处于最高级别。还可以回退到仅使用name和start_time,这是唯一必需的参数,并在它工作后添加到该参数。

-John Gentilin