Google 通讯录 api (gdata) 同步低分辨率照片

2023-12-29

我正在使用 google 联系人 api (gdata) 在 google 联系人中设置联系人的照片。
我正在使用 fiddler,我看到请求是根据Google 通讯录示例 https://developers.google.com/google-apps/contacts/v3/#addingupdating_a_photo_for_a_contact但从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 的联系人,那么我想这是可能的,但是正确的方法是什么?

Edit

以下是 fiddler 捕获的照片的同步和检索:
同步照片请求:
PUT https://www.google.com/m8/feeds/photos/media/[电子邮件受保护]/55f3484e8aaf1c82 https://www.google.com/m8/feeds/photos/media/mymail@gmail.com/55f3484e8aaf1c82HTTP/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 好
内容类型:application/atom+xml;字符集=UTF-8;类型=条目
GData 版本:3.1
ETag:“KgxxHGIyfCt7I2BoA047FShUNFU3BWx8RDQ。”
日期:2014 年 10 月 1 日,星期三 20:13:06 GMT
到期时间:2014 年 10 月 1 日星期三 20:13:06 GMT
缓存控制:私有,max-age=0
X-内容类型选项:nosniff
X 框架选项:SAMEORIGIN
X-XSS-保护:1;模式=块
服务器:GSE
替代协议:443:quic,p=0.01
内容长度:694
(这里有带有 ID、更新、编辑等的 xml)

照片要求:
GET https://www.google.com/m8/feeds/photos/media/[电子邮件受保护]/55f3484e8aaf1c82 https://www.google.com/m8/feeds/photos/media/myMail@gmail.com/55f3484e8aaf1c82HTTP/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 好
内容类型:图像/jpeg
到期时间:2014 年 10 月 1 日,星期三 20:25:54 GMT
日期:2014 年 10 月 1 日,星期三 20:25:54 GMT
缓存控制:私有、max-age=0、必须重新验证、不转换
变化:接受、X-GData-授权、GData-版本
GData 版本:3.1
ETag:“一些Etag。”
传输编码:分块
X-内容类型选项:nosniff
X 框架选项:SAMEORIGIN
X-XSS-保护:1;模式=块
服务器:GSE
替代协议:443:quic,p=0.01


我自己重新测试了这一点,并从多个来源上传了图片,包括我的 Android 手机和平板电脑上的联系人应用程序、gmail 联系人和 API。所有这些都会拍摄更高分辨率的图片,但使用 Contact API v3 时只允许尺寸为 96x96。因此,当您通过 PC 上使用该 API 的任何应用程序下载时,您将获得 96x96 图像,但似乎没有办法使用特定的 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

现在您需要更改返回到您想要的尺寸的网址,因为默认值是 ?sz=50,如果您的原始尺寸是您指定的尺寸,它将显示它,否则它将缩放图像。

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

Krystan

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google 通讯录 api (gdata) 同步低分辨率照片 的相关文章

  • NHibernate手动控制抓取

    我正在使用 NHibernate 我想控制手动获取相关实体 这是我的示例实体 public class Post public virtual long Id get set public virtual string Title get
  • 在 std::forward 中它如何接受右值?

    看看斯科特 迈耶的有效的现代 C 第200 201页 建议的简化实施std forward可能是 在其他地方看到了正确的实现 template
  • C# 委托实例化与仅传递方法引用 [重复]

    这个问题在这里已经有答案了 我有一个简单的问题 与仅传递函数引用相比 实例化 C 委托有什么优势 我的意思是 Why do Thread t new Thread new ThreadStart SomeObject SomeMethod
  • 终止以 System.Diagnostic.Process.Start("FileName") 启动的进程

    我正在尝试创建一个将在特定时间执行操作的应用程序 很像 Windows 任务计划程序 我当前正在使用 Process Start 来启动任务所需的文件 或 exe 我通过调用文件 mp3 启动一个进程 该进程启动 WMP 因为它是默认应用程
  • 带有 Prism 区域适配器的 AvalonDock

    我看到了一些关于 SO 的问题 但似乎没有一个适合我 我希望能够使用伟大的使用 Prism 4 但是 所有示例区域适配器均适用于 Avalondock 1 x 系列 我无法使其工作 有人有关于如何为 AvalonDock 的 LayoutD
  • C# 中 value 为匿名类型的字典

    是否可以在 C 中创建一个System Collections Generic Dictionary
  • WPF 中可选择的 TextBlock 或带有格式化文本的 TextBox

    我遇到一种情况 我需要显示格式化文本 正常 粗体 突出显示 并且还应该是可选择的 以便用户可以复制文本 我使用了文本块 我可以使用内联内容流元素应用多种格式 但不幸的是它的文本不可选择 虽然文本框允许选择文本并复制到剪贴板 但它不允许我设置
  • std::make_shared 作为默认参数无法编译

    在 Visual C 2008 和 2010 中 以下代码无法编译并出现以下错误 include
  • 将控制台输入和输出重定向到文本框

    您好 提前致谢 我正在尝试 非常努力 将控制台输入和输出重定向到文本框 到目前为止 输出工作正常 但问题在于输入 例如 我无法执行一个简单的程序来执行以下操作 Console WriteLine 请输入您的姓名 字符串名称 Console
  • 给出对象的指针作为参数

    假设我有 void func foo obj 我有 foo object 我该如何制作object进入争论func 只需取消引用它即可 func object
  • 在浏览器中测试wcf服务

    我无法在浏览器中调用基本的 wcf web 方法 即使使用
  • OpenCV:处理每一帧

    我想使用 OpenCV 编写一个跨平台应用程序进行视频捕获 在所有示例中 我发现来自相机的帧是使用抓取功能进行处理并等待一段时间 我想处理序列中的每一帧 我想定义自己的回调函数 每次当一个新帧准备好处理时都会执行该函数 例如直播对于 Win
  • 如何在 ASP.NET MVC 中获取参数数组作为 GET / POST?

    如何最好地获取数组 item gt value 对作为 GET POST 参数 在 PHP 中 我可以这样做 网址 这得到的参数为 Array a gt Array one gt 100 two gt 200 有什么方法可以在 ASP NE
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同
  • 隐式类型转换 - 编译器错误

    这个问题与this https stackoverflow com questions 3529449 can i make the ternary operator treat my class like a bool问题 下面的代码在V
  • 以编程方式连接和断开 USB,“无需拔出和重新插入”

    我需要以编程方式连接和断开 USB 也就是说 我已经插入了USB设备 我需要使用 C NET 应用程序传输文件 该应用程序将监视特定文件夹并将文件从该文件夹传输到 USB 驱动器 我需要在文件传输后断开 USB 设备的连接 并在需要时连接
  • wpf中的图像问题(图像不显示)

    我不明白为什么我无法在 WPF 中显示图像 也许我不小心修改了我的资源文件夹 这就是我没有显示的原因 所以我创建了一个新的 wpf 应用程序 我有这个 当我运行该程序时 我的图片显示为 为什么当我尝试在程序中执行相同的操作时 图像没有显示
  • 如何获取打印机设备上下文?

    我在 Windows 上尝试使用以下命令打印增强型图元文件 EMF 播放增强元文件 http msdn microsoft com en us library dd162800 28VS 85 29 aspx 我当前正在使用屏幕上窗口的设备
  • 文件按文件名模式存在

    我在用 File Exists filepath 我想做的是将其替换为模式 因为文件名的第一部分发生了变化 例如 该文件可以是 01 peach xml 02 peach xml 03 peach xml 如何根据某种搜索模式检查文件是否存

随机推荐

  • Corrgram 包装水平和垂直标签

    我正在尝试使用 Corrgram 包中的 labels 参数来绘制垂直轴和水平轴 但遇到了严重的困难 我尝试通过 labels 参数传递我的变量名称 但我的标签仍然在对角线上 我的代码如下 correlations lt c var1 va
  • 在没有模型的数据存储中查询

    我正在尝试在 appengine 中创建一个应用程序来搜索键列表 然后使用此列表从数据存储中删除这些记录 此服务必须是通用服务 因此我无法使用仅按名称搜索的模型当然 可以通过应用程序引擎功能来做到这一点吗 下面是我的代码 但它要求我有一个模
  • Add() 方法为 Code-First 实体框架中的链接模型添加重复行

    以下是将贷款请求添加到数据库的操作 HttpPost public ActionResult Add Models ViewModels Loans LoanEditorViewModel loanEditorViewModel if Mo
  • 如何在 PDO 准备语句中使用 LIKE 子句? [复制]

    这个问题在这里已经有答案了 我有一个这样的sql查询 SELECT FROM tbl name WHERE title Like needle 当我使用此语句手动查询 MySQL 数据库时 它起作用了 但是当我将它与 PDO 一起使用并使用
  • 在 Windows 上安装 git:Git Bash Here 或 git-cheetah shell 扩展?

    我正在 Windows XP 上安装 Git 在安装过程中 安装程序会询问我是否想要 1 上下文菜单条目 Git Bash Here 以及 Git GUI Here 选项 or 2 git cheetah shell 扩展 仅限 32 位
  • Pyspark:自定义窗口函数

    我目前正在尝试提取 PySpark 数据框中连续出现的一系列事件 并对它们进行排序 排名 如下所示 为了方便起见 我已通过以下方式对初始数据框进行了排序 user id and timestamp df ini user id timest
  • 移位是 O(1) 还是 O(n)?

    是否轮班操作O 1 or O n 计算机通常需要更多的操作来移动 31 位而不是移动 1 位 这是否有意义 或者说这是否有意义操作次数换档所需的是constant不管我们需要转移多少地方 PS 想知道是否hardware是一个合适的标签 某
  • 使用 AWS amplify 和 graphql 创建新用户时出现“未经授权”错误

    所以我认为这个问题来自于我不太理解 AWS cognito 用户池和 graphql 模式中的身份验证规则之间的关系 当我运行下面的代码时 我收到消息 未授权访问 User 类型上的 createUser import React from
  • 从模板中获取 Django 表单小部件的类型

    我正在迭代表单的字段 对于某些字段 我想要稍微不同的布局 需要更改 HTML 为了准确地做到这一点 我只需要知道小部件类型 它的类名或类似的名称 在标准 python 中 这很容易 field field widget class name
  • AS3中dispatchEvent()可以带参数吗?

    看这个例子 addEventListener myEventType myFunction argument function myFunction args String Function return function evt Even
  • 使用 Json.NET 读取大整数

    我有一些带有巨大整数的 json 大约有几百位数字 我想将它们解析为 BouncyCastle 的BigInteger https github com onovotny BouncyCastle PCL blob pcl crypto s
  • 如何在 Mac Os X 上将用户添加到 apache 组?

    我实际上正在尝试在我的 MacBook Pro Mac OS X 10 6 上运行 Symfony2 当我通过 apache 启动应用程序时 所有缓存和日志文件都是由 www www 用户 组创建的 但是 我已经必须使用我自己的用户在 CL
  • 使用 rvest 跟随带有相对路径的“下一个”链接

    我正在使用rvest从页面中抓取信息的包http www radiolab org series podcasts http www radiolab org series podcasts 抓取第一页后 我想点击底部的 下一步 链接 抓取
  • 可以将PreparedStatement.addBatch()用于SELECT查询吗?

    想象一下 我有 100 个 SELECT 查询 它们因一个输入而异 可以使用PreparedStatement 作为该值 我在网上看到的所有文档都是关于批量插入 更新 删除的 我从未见过用于 select 语句的批处理 这可以做到吗 如果是
  • 有哪些好的实体框架替代品[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我现在正在使用实体框架 并且经常需要编写内联sql 因为实体框架不支持全文搜索和其他功能 是否有一个 ORM 具有许多支持高级查询的功能
  • Wix 和 .NET Framework(先决条件)

    当客户端计算机上尚未安装所需的 NET Framework 时 如何让 Wix 包下载该包 我已经有条件检查已安装的 NET 版本 但我不确定如何在找不到时下载并安装它 ClickOnce 通过检查属性页中的先决条件自动执行此操作 由于一些
  • android-viewflipper 的简单淡出和淡入动画

    我是android新手 对android动画了解不多 我有一个取景器 我想在其中的图像之间制作动画 这是代码 runnable new Runnable public void run handler postDelayed runnabl
  • Oracle,向字符串(不是数字)添加前导零

    我正在使用 Oracle 工作空间是 TOAD 我需要将字符串设置为短接 10 个字符 然后添加前导零以使它们全部为 10 位数字字符串 例如 如果我有一个像这样的字符串 12H89 需要是 0000012H89 或者 1234 变为 00
  • C++中**是什么意思? [复制]

    这个问题在这里已经有答案了 例如 bool insertInFront IntElement head int data IntElement newElem new IntElement if newElem return false n
  • Google 通讯录 api (gdata) 同步低分辨率照片

    我正在使用 google 联系人 api gdata 在 google 联系人中设置联系人的照片 我正在使用 fiddler 我看到请求是根据Google 通讯录示例 https developers google com google a