Загрузить фото на Facebook из Silverlight - PullRequest
0 голосов
/ 07 сентября 2010

Я недавно начал портировать свое небольшое приложение на Facebook в качестве обучающего опыта.Я довольно знаком с Silverlight и .NET в целом, но еще ничего не сделал на Facebook.Поскольку все доступные SDK и API, кажется, не работают, или я не смог их использовать должным образом, я решил получить прямой доступ к API Graph Facebook, и пока это было легко (я могу войти, запросить разрешения, получитьпрофиль, альбомы и фотографии и пост в фид пользователей).Теперь я хочу загрузить фотографию, и это то, где я действительно бью стену.Я использую что-то вроде этого для публикации фида:

        WebClient client = new WebClient();
        client.UploadStringCompleted += new UploadStringCompletedEventHandler(client_UploadStringCompleted);
        client.UploadStringAsync(new Uri(String.Format("https://graph.facebook.com/me/feed")), "POST",
            String.Format("message={0}&link={1}&picture={2}&access_token={3}", "Test", "www.gong.bg", "http://gong.bg/uploads/teams/teams_logos/logo_small_1.png", this.Access_Token));

Довольно просто, но работает нормально, и мне не нужно больше.

Для загрузки фотографий я пытался использовать похожий код, нобезуспешно, тогда я решил попробовать с HttpWebRequest, и теперь у меня есть следующее:

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(String.Format("https://graph.facebook.com/me/photos"));
        request.ContentType = "multipart/form-data";
        request.Method = "POST";
        request.BeginGetRequestStream(ar =>
        {
            using (StreamWriter writer = new StreamWriter((ar.AsyncState as HttpWebRequest).EndGetRequestStream(ar)))
            {
                writer.Write("{0}={1}&", "message", HttpUtility.UrlEncode("Test"));
                writer.Write("{0}=@{1}&", "source", HttpUtility.UrlEncode("3.png"));
                writer.Write("{0}={1}&", "access_token", this.Access_Token);
            }
        }, request);

Это не работает, и я не могу видеть, где проблема.Согласно документации Facebook это должно загрузить фотографию в альбом приложения по умолчанию (создайте фотографию, если она не существует)

Спасибо всем.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2010

Попробуйте мой SDK для Facebook .Net на codeplex. Самый последний источник поддерживает Silverlight. http://facebooksdk.codeplex.com

Вы можете делать то, что вы пытаетесь, вот так:

        byte[] photo = File.ReadAllBytes(photoPath);
        FacebookApp app = new FacebookApp();
        dynamic parameters = new ExpandoObject();
        parameters.access_token = "access_token";
        parameters.caption = "Test Photo";
        parameters.method = "facebook.photos.upload";
        parameters.uid = ConfigurationManager.AppSettings["UserId"];
        var mediaObject = new FacebookMediaObject
        {
            FileName = "monkey.jpg",
            ContentType = "image/jpeg",
        };
        mediaObject.SetValue(photo);
        parameters.source = mediaObject;
        app.ApiAsync((ar, state) => { 
            var postId = (string)ar.Result;
        }, null, parameters, HttpMethod.Post);
0 голосов
/ 07 сентября 2010

Похоже, это может быть простая опечатка. Попробуйте удалить последний амперсанд, чтобы получить следующее:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(String.Format("https://graph.facebook.com/me/photos"));
request.ContentType = "multipart/form-data";
request.Method = "POST";
request.BeginGetRequestStream(ar =>
{
    using (StreamWriter writer = new StreamWriter((ar.AsyncState as HttpWebRequest).EndGetRequestStream(ar)))
    {
        writer.Write("{0}={1}&", "message", HttpUtility.UrlEncode("Test"));
        writer.Write("{0}=@{1}&", "source", HttpUtility.UrlEncode("3.png"));
        writer.Write("{0}={1}", "access_token", this.Access_Token);
    }
}, request);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...