0

グラフ API を使用して、アカウントのページの 1 つで新しいアルバムを作成しようとしています。それは会社のページで、ページ ID はわかっています。

私が試したことは失敗しました:

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

また、失敗したものも試しました:

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

1 に答える 1

1

Graph API doc が言うように、に POST リクエストを発行する必要がありますPAGE_ID/albums。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既に存在するかどうかを確認し、存在する場合は次のようにします。
    • 画像の総数を確認し、許可されている最大数 (現在は 200) を超えていname_1ます。次に、name_2アルバムなどを作成します。
    • 写真をアップロードする余地がまだある場合は、アルバム ID を返すだけです
  2. そのようなアルバムがない場合 - 新しいアルバムを作成し、その ID を返します:

        var param = new { name = fullName };
        var album = api.Post(string.Format("{0}/albums", profileId), param);
    
        return ((JsonObject)album)["id"].ToString();
    

EDITフィールド についてprofileId- この関数を使用して、アプリケーションを承認したさまざまなユーザーを呼び出します。あなたの場合、それはpageIdになります。

于 2013-11-24T14:28:28.900 に答える