【问题标题】:Facebook Album Picture using Facebook C# SDK使用 Facebook C# SDK 的 Facebook 相册图片
【发布时间】:2011-04-18 16:56:16
【问题描述】:

我正在尝试使用 Silverlight 应用程序中的 facebook C# SDK 使用以下代码从 facebook 获取专辑图片:

        FacebookClient client = new FacebookClient(this.Profile.AccessToken);
        client.GetAsync(string.Format("/{0}/picture?type=small", this.ID));
        client.GetCompleted += (s, e) =>
        {
            dynamic result = e;
        };

其中 this.ID 是专辑的 ID,但我收到此错误: 解析值时遇到意外字符:�。第 1 行,位置 1。 来自 JsonSerializer 中的 DeserializeObject 方法。问题是 facebook 不会使用 imge uri 或类似的东西返回 json 数据,但它们实际上以二进制数据的形式返回图像本身。任何人都知道我如何处理这个结果或者只是让 Uri 进入图像? 我有一个使用此代码的解决方法:

        var request = WebRequest.Create(string.Format("https://graph.facebook.com/{0}/picture?access_token={1}", this.ID, this.Profile.AccessToken));
        request.BeginGetResponse(ar =>
        {
            using (var response = ((WebRequest)ar.AsyncState).EndGetResponse(ar))
            {
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    this.Picture = new BitmapImage(new Uri(response.ResponseUri.AbsoluteUri));
                }
                );
            }
        }, request);

但我真的很想只使用 Facebook C# SDK 来获取数据。

这是我要使用的解决方案:

        FacebookClient client = new FacebookClient(this.Profile.AccessToken);
        client.QueryAsync(String.Format("SELECT src_small, src_big, src FROM photo WHERE pid IN (SELECT cover_pid FROM album WHERE object_id={0})", this.ID));
        client.GetCompleted += (s, e) =>
        {
            dynamic result = e.GetResultData();

            Deployment.Current.Dispatcher.BeginInvoke(() => this.Picture = result[0].src_small);
        };

【问题讨论】:

  • Facebook 文档说“专辑”节点的“图片”连接返回 带有专辑封面图片 URL 的 HTTP 302。 这有点奇怪,我'我真的想知道处理这个问题的正确方法是什么?
  • 我想我为我的问题找到了一个可以接受的解决方案。我将只使用 FQL 而不是 Graph API。这将完成这项工作:FacebookClient client = new FacebookClient(this.Profile.AccessToken); client.QueryAsync(String.Format("SELECT src_small, src_big, src FROM photo WHERE pid IN (SELECT cover_pid FROM album WHERE object_id={0})", this.ID)); client.GetCompleted += (s, e) => { dynamic result = e.GetResultData(); Deployment.Current.Dispatcher.BeginInvoke(() => this.Picture = result[0].src_small); };
  • 您应该真正分解解决方案并将其作为(您自己的)问题的答案发布,并将其标记为正确答案。这样会更清晰。
  • @Magnus Johansson 我肯定会,我最初尝试这样做,但似乎我仍然是新用户,我无法在 24 小时内发布我自己的问题的解决方案。

标签: silverlight facebook-c#-sdk


【解决方案1】:

我遇到了类似的问题。也只想使用 Facebook C# SDK。 像这样解决它:

FacebookClient facebookAlbumClient = new FacebookClient(_albumAccessToken);
dynamic facebookAlbumCover = facebookAlbumClient.Get(string.Format("/{0}?fields=picture&type=thumbnail", (string)facebookAlbum["id"]));

这样你得到的是 json 数组而不是图片

【讨论】:

    【解决方案2】:

    我想我为我的问题找到了一个可接受的解决方案。我将只使用 FQL 而不是 Graph API。这将完成这项工作:

            FacebookClient client = new FacebookClient(this.Profile.AccessToken);
            client.QueryAsync(String.Format("SELECT src_small, src_big, src FROM photo WHERE pid IN (SELECT cover_pid FROM album WHERE object_id={0})", this.ID));
            client.GetCompleted += (s, e) =>
            {
                dynamic result = e.GetResultData();
    
                Deployment.Current.Dispatcher.BeginInvoke(() => this.Picture = result[0].src_small);
            };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      相关资源
      最近更新 更多