编程语言
首页 > 编程语言> > C#-Google Contacts API(gdata)同步低分辨率照片

C#-Google Contacts API(gdata)同步低分辨率照片

作者:互联网

我正在使用Google联系人api(gdata)在Google联系人中设置联系人的照片.
我正在使用提琴手,我看到请求是根据Google Contacts Examples发送的,但是从Google下载回来的照片始终是96×96.
我用来更新和下载照片的代码是:

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();
}

我尝试将联系人同步到手机,因此,大小始终限制为96×96.
我是在做错什么还是Google不允许同步超过96×96?我可以看到许多应用程序以超过96×96的速度同步联系人,然后我猜这是可能的,但是正确的方法是什么?

编辑

这是同步&提取提琴手拍摄的照片:
同步照片请求:
PUT https://www.google.com/m8/feeds/photos/media/mymail@gmail.com/55f3484e8aaf1c82 HTTP / 1.1
Etag:“ SomeEtag”
如果匹配:“ SomeEtag”.
内容类型:图片/ jpg
用户代理:G-GoogleContactsSync / GOAuth2RequestFactory-CS-Version = 2.2.0.0
授权:不记名myAuthorization
GData版本:3.0
主持人:www.google.com
内容长度:34480

同步照片回复
HTTP / 1.1 200 OK
内容类型:application / atom xml; charset = 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)

照片要求:
GET https://www.google.com/m8/feeds/photos/media/myMail@gmail.com/55f3484e8aaf1c82 HTTP / 1.1
内容类型:application / atom xml;字符集= UTF-8
用户代理:G-GoogleContactsSync / GOAuth2RequestFactory-CS-Version = 2.2.0.0
授权:不记名myAuthorization
GData版本:3.0
主持人:www.google.com

相片回应:
HTTP / 1.1 200 OK
内容类型:图片/ jpeg
过期:星期三,2014年10月1日20:25:54 GMT
日期:2014年10月1日,星期三20:25:54 GMT
缓存控制:私有,最大年龄= 0,必须重新验证,无需转换
有所不同:接受,X-GData授权,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手机和平板电脑上的通讯录应用程序,gmail通讯录和API.所有这些都将拍摄更高分辨率的照片,但使用Contact API v3只能将尺寸设为96×96.因此,当您在PC上使用使用该API的任何应用程序下载该文件时,您将获得96×96的图像,并且似乎没有办法通过特定的API进行更改.

除非我也错过了联系API v3限于此尺寸的图片的意思,我怀疑不是google等价物.

我完成此操作的方法是使用Google Plus 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

现在,您将需要更改返回到所需大小的url,因为默认值是?sz = 50,如果原始大小为您指定的大小,它将显示它,否则它将缩放图像.

但是,联系人api和google plus api是不同的野兽.您将需要使用google plus的域功能将您的联系人拉出那里,并可能与您的联系人列表(如果有)中的照片不同.

克里斯坦

标签:sync,resolution,google-contacts-api,c
来源: https://codeday.me/bug/20191121/2050089.html