首页 > 解决方案 > 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)))

标签: google-contacts-apigoogle-people-api

解决方案


我能够使用API explorer成功更新 userDefined 字段。看起来文档中的字段列表需要更新。

要找出代码中的问题,请添加引发的错误。


推荐阅读