C# 谷歌联系人api(gdata)同步低分辨率照片

C# 谷歌联系人api(gdata)同步低分辨率照片,c#,sync,resolution,google-contacts-api,C#,Sync,Resolution,Google Contacts Api,我正在使用google contacts api(gdata)在google contacts中设置联系人的照片。 我正在使用fiddler,我看到请求是根据发送的,但从google下载回来的照片总是96x96。 我用来更新和下载照片的代码是: public void UpdateUserPhoto(Contact contact, Stream photo) { _contactsRequest.SetPhoto(contact, photo); } public static

我正在使用google contacts api(gdata)在google contacts中设置联系人的照片。
我正在使用fiddler,我看到请求是根据发送的,但从google下载回来的照片总是96x96。
我用来更新和下载照片的代码是:

public void UpdateUserPhoto(Contact contact, Stream photo)
{
      _contactsRequest.SetPhoto(contact, photo);
}

public static void DownloadPhoto(ContactsRequest cr, Contact contact)
{
    if (contact.PhotoEtag == null)
        return;
    Stream photoStream = cr.Service.Query(contact.PhotoUri);
    FileStream outStream = File.OpenWrite(string.Format(@"c:\friends\{0}.jpg",contact.Name.FullName));
    byte[] buffer;
    using (var memoryStream = new MemoryStream())
    {
        photoStream.CopyTo(memoryStream);
        buffer =  memoryStream.ToArray();
    }

    outStream.Write(buffer, 0, buffer.Length);
    photoStream.Close();
    outStream.Close();
}
我试着将联系人同步到我的手机上,手机的大小总是限制在96x96。 是我做错了什么,还是谷歌不允许同步96x96以上的数据?我可以看到许多应用程序与96x96以上的联系人进行同步,我想这是可能的,但正确的方法是什么

编辑

以下是fiddler捕获的照片的同步和检索:
同步照片请求:
放置HTTP/1.1
Etag:“SomeEtag”
如果匹配:“SomeTag.”
内容类型:image/jpg
用户代理:G-GoogleContactsSync/GOAuth2RequestFactory CS版本=2.2.0.0
授权:我的授权
GData版本:3.0
主持人:www.google.com
内容长度:34480

同步照片响应
HTTP/1.1200正常
内容类型:应用程序/atom+xml;字符集=UTF-8;类型=条目
GData版本:3.1
ETag:“KgxxHGIyfCt7I2BoA047FShUNFU3BWx8RDQ。”
日期:2014年10月1日星期三20:13:06 GMT
到期时间:2014年10月1日星期三20:13:06 GMT
缓存控制:专用,最大年龄=0
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-XSS-Protection:1;模式=块
服务器:GSE
替代方案:443:quic,p=0.01
内容长度:694
(这里是带有Id、更新、编辑等的xml)

照片请求:
获取HTTP/1.1
内容类型:应用程序/atom+xml;字符集=UTF-8
用户代理:G-GoogleContactsSync/GOAuth2RequestFactory CS版本=2.2.0.0
授权:我的授权
GData版本:3.0
主持人:www.google.com

照片回复:
HTTP/1.1200正常
内容类型:图像/jpeg
到期时间:2014年10月1日星期三20:25:54 GMT
日期:2014年10月1日星期三20:25:54 GMT
缓存控制:私有,最大年龄=0,必须重新验证,无转换
更改:接受、X-GData-Authorization、GData版本
GData版本:3.1
ETag:“SomeEtag。”
传输编码:分块
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-XSS-Protection:1;模式=块
服务器:GSE

备选方案:443:quic,p=0.01

我自己重新测试了这个方案,并从多个来源上传了图片,包括android手机和平板电脑上的contacts应用程序、gmail contacts和API。所有这些都将拍摄更高分辨率的图片,但使用Contact API v3仅允许尺寸为96x96。因此,当您通过PC上使用该API的任何应用程序下载时,您将获得一张96x96图像,并且似乎无法根据特定的API改变该图像

这意味着,除非我也遗漏了一些东西,否则contact API v3仅限于此大小的图像。我怀疑谷歌+的等价物并非如此

我这样做的方式是使用GooglePlus api

  var service = new PlusService(new BaseClientService.Initializer());
  var request = new PeopleResource.GetRequest(service, "<your google user id>")
  {
      OauthToken = authParameters.AccessToken
  };

  Person person = request.Execute();
  Person.ImageData image = person.Image;
  string pictureUrl = image.Url;

  ... request to url here after munging sz
var service=new PlusService(new BaseClientService.Initializer());
var request=newpeopleresource.GetRequest(服务“”)
{
OauthToken=authParameters.AccessToken
};
Person=request.Execute();
Person.ImageData image=Person.image;
字符串pictureUrl=image.Url;
... 在munging sz之后请求此处的url
现在,您需要更改返回到所需大小的url,因为默认值为?sz=50,如果您的原稿是您指定的大小,它将显示它,否则它将缩放图像

然而,联系人api和google plus api是不同的。您将需要使用google plus的域功能来提取您在那里的联系人,并且他们的照片可能与您在联系人列表中的照片不同(如果已设置)


Krystan

您向哪个版本的API发出请求?如果在请求中省略version参数,它将默认为v1,返回96x96张照片。它是版本3。请查看我的更新。@atlanteh您找到更大的照片了吗?或者你带着他们的公众形象去了?没有。我当时没有找到任何东西。这是我很久以前放弃的一个私人项目,所以最近没有尝试寻找任何解决方案。好的。谢谢。那么,我是否可以从PC上使用其他API来实现这一点?如果您从Url中删除
?sz=50
,您将获得原始大小。看(虽然没有明确地说)可悲的是,这并没有返回您的联系人照片覆盖。它返回他们的公众形象。它也不适用于非Google+联系人(如手机)。