【问题标题】:Google People API does not update Person/UserDefinedGoogle People API 不更新 Person/UserDefined
【发布时间】:2018-05-09 15:50:46
【问题描述】:

我用的是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

这里是更新函数的输入,Google person 对象

#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}]}]

我可以使用用户定义的数据创建 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-api google-people-api


    【解决方案1】:

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

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

    【讨论】:

    • 更新功能正常工作,没有错误。其他属性更新成功,但 userDefined 没有。请看上面更新函数的输入
    • 嗯,这很奇怪,你试过只更新 userDefined 字段还是用 userDefined 字段创建联系人?
    • 我可以使用用户定义的数据创建 Google 联系人。请看上面的代码部分
    • 很遗憾,我无法仅使用 userDefined 字段更新同一个联系人。
    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多