在公司页面中创建新专辑

时间:2013-11-07 17:22:12

标签: c# facebook-graph-api

我正在尝试使用图形API在我帐户下的某个页面中创建新相册。 这是公司页面,我知道页面ID。

我所尝试的失败了:

query = string.Format("me/page?name={0},albums?name={1}", PageID, AlbumTitle);

我也试过失败了:

query = string.Format("{0}/albums?name={1}, PageID, AlbumTitle);

1 个答案:

答案 0 :(得分:1)

Graph API doc says,您需要向PAGE_ID/albums发出POST请求。使用C#facebook api你应该做这样的事情:

private string GetOrCreateAlbumId(FacebookClient api, string profileId, string name, int albumNumber = 0)
{
    var fullName = albumNumber == 0 ? name : string.Format("{0}_{1}", name, albumNumber);

    dynamic d = api.Get(string.Format("{0}/albums", profileId), new { fields = "id,name,count", limit = "9999" });
    var data = (JsonArray)((JsonObject)d).Values.First();

    try
    {
        if (data == null || data.Any() == false || data.FirstOrDefault(x => ((JsonObject)x)["name"].ToString() == fullName) == null)
        {
            // no such album - create new one
            var param = new { name = fullName };
            var album = api.Post(string.Format("{0}/albums", profileId), param);

            return ((JsonObject)album)["id"].ToString();
        }
        else
        {
            var album = (JsonObject)data.First(x => ((JsonObject)x)["name"].ToString() == fullName);

            int imageCount = 0;
            if (album.ContainsKey("count"))
            {
                int.TryParse(album["count"].ToString(), out imageCount);
            }

            if (imageCount > 500)
            {
                albumNumber++;

                return this.GetOrCreateAlbumId(api, profileId, name, albumNumber);
            }

            return album["id"].ToString();
        }
    }
    catch (Exception ex)
    {
        var msg = string.Format("Data: {0}\r\nAlbum Name: {1}\r\nAlbum number: {2}", data, name, albumNumber);
        throw new Exception(msg, ex);
    }
}

此功能执行以下操作:

  1. 首先,它会检查名为name的专辑是否已经存在 - 如果是的话:
    • 检查图片总数 - 并且大于允许的最大值 - which is 200 currently - 然后创建name_1name_2等相册。
    • 如果我们仍有空间上传照片 - 只需返回相册ID
    • 即可
  2. 如果没有这样的专辑 - 创建新专辑并返回其ID:

        var param = new { name = fullName };
        var album = api.Post(string.Format("{0}/albums", profileId), param);
    
        return ((JsonObject)album)["id"].ToString();
    
  3. 修改 关于profileId字段 - 我使用此函数来呼叫授权我的应用程序的各种用户。在你的情况下,这将是pageId。