google-contacts-api - Google People API 不会更新 Person/UserDefined
问题描述
我使用 Google People API,我可以得到这个人的用户定义数据,Person/UserDefined,参考:
https://developers.google.com/people/api/rest/v1/people#userdefined https://developers.google.com/resources/api-libraries/documentation/people/v1/java/latest/
但是,我无法更新此人的用户定义数据。这是代码
(def update-person-fields "addresses,biographies,birthdays,emailAddresses,events,genders,imClients,interests,locales,names,nicknames,occupations,organizations,phoneNumbers,relations,residences,urls,userDefined")
(defn initialize-people-service
[user-id]
(when-let [google-token-response (tk/get-access-token user-id GOOGLE)]
(let [credential (google-credential google-token-response)]
(-> (PeopleService$Builder. (GoogleNetHttpTransport/newTrustedTransport)
(JacksonFactory/getDefaultInstance) credential)
(.setApplicationName "app")
.build))))
(defn update-google-contact
[user-id wingman-contact-id google-contact]
(try
(lg/log! :info (str "update a google contact for " user-id))
(let [people-service (initialize-people-service user-id)
resource-name (.getResourceName google-contact)
[google-contact-id etag] (get-g-contact-id-and-etag resource-name people-service)]
(.setEtag google-contact etag)
(-> people-service
.people
(.updateContact (.getResourceName google-contact) google-contact)
(.setUpdatePersonFields update-person-fields)
.execute
(update-contact-callback))
)
(catch Exception e
(lg/log! :error (.getMessage e))
false)))
请参阅https://developers.google.com/people/api/rest/v1/people/updateContact
我看到 UserDefined 不在 updatePersonFields 中。
请让我知道 Google People API 是否支持更新 Person/UserDefined
这里是更新函数的输入,谷歌人员对象
#object[com.google.api.services.people.v1.model.Person 0x1bc30f20 {addresses=[{city=, country=, formattedValue=Hoang Hoa Tham 123, poBox=, postalCode=, region=, streetAddress=Hoang Hoa Tham, type=home}],
birthdays=[{date={day=2, month=1, year=2011}}],
emailAddresses=[{displayName=WORK, type=WORK, value=emailwork@gmail.com123}, {displayName=HOME, type=HOME, value=emailhome@yahoo.com123}],
imClients=[{protocol=SKYPE, type=SKYPE, username=skype@user.com}, {protocol=AIM, type=AIM, username=iam@user.com}],
names=[{displayName=Test02 Te, familyName=BBB, givenName=Test02, honorificPrefix=, honorificSuffix=, middleName=Te}],
nicknames=[{value=}],
organizations=[{department=, name=ABC VietNam 123, startDate={day=6, month=5, year=2018}, symbol=, title=SA 123}],
phoneNumbers=[{type=Home, value=123 456 78123},{type=Work, value=333 3333 123}],
relations=[{person=Hoang Tran123, type=SPOUSE}, {person=Huong Pham123, type=MOTHER}],
resourceName=people/c2998574137780944562,
urls=[{type=profile, value=http://profile.com666 }, {type=blog,value=http://blog.com }],
userDefined=[{key=FACEBOOK, value=http://facebook.com123 }, {key=TWITTER, value=http://facebook.com } {key=customCCCCCC, value=dddd}]}]
我可以使用 userDefined 数据创建 Google 联系人
g-userdefined (conj [] (doto
(com.google.api.services.people.v1.model.UserDefined.)
(.setKey "Face Book")
(.setValue "user@facebook")))
g-userdefined-list (java.util.ArrayList. g-userdefined)
google-person (doto (com.google.api.services.people.v1.model.Person.)
(.setUserDefined g-userdefined-list)
这是我的创建方法
(defn create-contact
[user-id contact-id google-person]
(try
(lg/log! :info (str "Create google-person for " user-id))
(.setResourceName google-person nil)
(let [people-service (initialize-people-service user-id)]
(-> people-service
.people
(.createContact google-person)
.execute
(create-contact-callback user-id contact-id)))
(catch Exception e
(lg/log! :error (.getMessage e))
false)))
解决方案
我能够使用API explorer成功更新 userDefined 字段。看起来文档中的字段列表需要更新。
要找出代码中的问题,请添加引发的错误。
推荐阅读
- php - Laravel Artisan 命令:在某处存储值,但在数据库中经常运行命令
- html - 如何在同一行上对齐中心的标题和右侧的图标并且是响应式的
- curl - 使用 WGET 或 CURL 或类似方法将 foo 附加到文件名?
- android - 带有“时间”类型的 EditText 在三星设备中不显示冒号
- r - 带有多个触发表达式的 ObserveEvent :知道发生了哪一个
- sql - SQLite 书店:最后的学生和他们订购的所有书籍
- api-platform.com - api platform.com - 不受支持的媒体类型
- javascript - 使用 fetch 从流中读取并创建一个 excel 文件
- python - 为什么在直方图均衡中使用 float 16
- reactjs - React 本地视频不会在生产中加载