C# Facebook一次将多张照片上传到相册

C# Facebook一次将多张照片上传到相册,c#,facebook,facebook-graph-api,C#,Facebook,Facebook Graph Api,我正在开发WinService,它可以将照片从文件系统中的特定文件夹上传到Facebook页面(要上传,我已经制作了Facebook应用程序并将其连接到Facebook页面),其中文件夹名是将用于Facebook相册的名称。 所以,首先我创建了相册,它运行良好,我有相册id 我尝试了几种将照片上传到Facebook相册的方法,但每次上传的照片都会生成一个弹出通知。 方式1: FacebookClient fb=新的FacebookClient(token.Trim()); //执行上传 var

我正在开发WinService,它可以将照片从文件系统中的特定文件夹上传到Facebook页面(要上传,我已经制作了Facebook应用程序并将其连接到Facebook页面),其中文件夹名是将用于Facebook相册的名称。 所以,首先我创建了相册,它运行良好,我有相册id

我尝试了几种将照片上传到Facebook相册的方法,但每次上传的照片都会生成一个弹出通知。 方式1:

FacebookClient fb=新的FacebookClient(token.Trim());
//执行上传
var imageStream=File.OpenRead(photo.Location);
fb.PostCompleted+=(o,e)=>
{
Dispose();
如果(e.取消| | e.错误!=null)
{
error=e.error=null?“已取消”:e.error.Message;
}
};
dynamic res=fb.PostTaskAsync(“/”+fbAlbumID+“/photos”),新建
{
message=String.Empty,
文件=新FacebookMediaStream
{
ContentType=“image/jpg”,
FileName=Path.GetFileName(photo.Location)
}.SetValue(图像流)
});
res.Wait();
变量字典=(IDictionary)res.Result;
方式2:

dynamic result=fb.Batch(
新的FacebookBatchParameter(HttpMethod.Post,“/”+albumId+“/photos”,
新词典
{
{“消息”,“图片1消息”},
{
“pic1”,
新的FacebookMediaObject{ContentType=“image/jpeg”,FileName=“p4.jpg”}.SetValue(
File.ReadAllBytes(
文件1路径)
}
}),
新的FacebookBatchParameter(HttpMethod.Post,“/”+albumId+“/photos”,
新词典
{
{“消息”,“图片1消息”},
{
“pic2”,
新的FacebookMediaObject{ContentType=“image/jpeg”,FileName=“p4.jpg”}.SetValue(
File.ReadAllBytes(
文件2路径)
}
}
)
);
但对于每一种方式,每一张上传的照片都会为喜欢该页面的人生成弹出式通知。 他们“喜欢者”认为这是垃圾邮件

如何实现在一个相册中上传10张照片并发出一次通知


请给我一些建议,谢谢

我所见过的任何人实现这一点(单个提要项或单个通知)的唯一方法是使用开放图功能。基本图形API没有一种简单的方法来实现这一点,这真是糟糕透了。无论您尝试批处理请求(方式2)、附加照片url或附加原始图像数据,您都将获得多个提要项和多个通知。推特的API通过强制你上传多张照片并取回媒体ID来实现你想要的,然后你可以将媒体ID附加到推特上


看。我知道,设置开放图可能不是你想要做的,但它似乎真的是唯一的方式在这篇文章的时间。OpenGraph要求您无论如何都使用用户级访问令牌,并且您使用的是页面级令牌。所以,考虑到您的需求,这似乎还不可能。

这条消息来自哪里?我不明白…哪条消息?我已经描述了我的问题。“…但每次上传的照片都会生成一个弹出通知…”它会显示在左下角的弹出窗口和通知部分。喜欢这样的人认为这是垃圾邮件,他们不希望每个图像都被通知。如果他们有一个通知“10张照片上传到相册新年”就可以了。举例
FacebookClient fb = new FacebookClient(token.Trim());
//Perform upload
var imageStream = File.OpenRead(photo.Location);
fb.PostCompleted += (o, e) =>
{
    imageStream.Dispose();
    if (e.Cancelled || e.Error != null)
    {
        error = e.Error == null ? "canceled" : e.Error.Message;
    }
};
dynamic res = fb.PostTaskAsync("/" + fbAlbumID + "/photos", new
{
    message = String.Empty,
    file = new FacebookMediaStream
    {
        ContentType = "image/jpg",
        FileName = Path.GetFileName(photo.Location)
    }.SetValue(imageStream)
});
res.Wait();
var dictionary = (IDictionary<string, object>)res.Result;
dynamic result = fb.Batch(
    new FacebookBatchParameter(HttpMethod.Post, "/" + albumId + "/photos",
        new Dictionary<string, object>
        {
            {"message", "picture 1 msg"},
            {
                "pic1",
                new FacebookMediaObject {ContentType = "image/jpeg", FileName = "p4.jpg"}.SetValue(
                    File.ReadAllBytes(
                        file1path))
            }
        }),
    new FacebookBatchParameter(HttpMethod.Post, "/" + albumId + "/photos",
        new Dictionary<string, object>
        {
            {"message", "picture 1 msg"},
            {
                "pic2",
                new FacebookMediaObject {ContentType = "image/jpeg", FileName = "p4.jpg"}.SetValue(
                    File.ReadAllBytes(
                       file2path))
            }
        }
    )
);