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