Google Keep: gkeepapi -> не может добавлять ярлыки

У кого-то еще есть проблемы с добавлением ярлыков к заметкам в gkeepapi?

import gkeepapi
keep = gkeepapi.Keep()

file = open("C:\\xxxxxxx", "r")
pwd = file.read()
keep.login('xxxxxxxx', pwd)
note = keep.createNote('title', 'text')
note.labels.add('calls')

Дает мне эту ошибку.

Traceback (most recent call last):
  File "C:/Users/Jason/Google Drive/pycharm/test.py", line 8, in <module>
    note.labels.add('calls')
  File "C:\Python27\lib\site-packages\gkeepapi\node.py", line 922, in add
    self._labels[label.id] = label
AttributeError: 'str' object has no attribute 'id'

Вот документы. https://gkeepapi.readthedocs.io/en/latest/. Я думаю, что я делаю правильные вещи.

2 ответа

Решение

Я бы сказал, что почти каждая ошибка в истории компьютеров была вызвана кем-то с мыслью: "Я думаю, я делаю правильные вещи" в своей голове:-)

Более серьезно, ярлык, который вы добавляете в заметку, должен быть ярлыком, а не строкой. Это подтверждается тем фактом, что он пытается получить ваш идентификатор метки из строкового объекта (у которого его нет):

У объекта 'str' нет атрибута 'id'

Это на самом деле описано в ссылке, которую вы предоставили, всего в трех разделах от вашей точки привязки:

Создание ярлыков
Новые ярлыки могут быть созданы с Keep.createLabel():
label = keep.createLabel('todo')

: : blah blah blah

Манипулирование метками на заметках
При работе с ярлыками и заметками необходимо помнить, что мы всегда работаем с node.Label объекты или идентификаторы.

Следовательно, вы можете создать ярлык и добавить его в заметку со строками:

callLabel = keep.createLabel('calls')
note.labels.add(callLabel)

Если у вас уже есть ярлык с таким именем, вы можете получить его с помощью:

callLabel = keep.findLabel('calls')

Так что, если вы хотите использовать обе возможности без всяких усилий, попробуйте создать ярлык внутри try/catch и, если вы получите исключение, сделайте поиск.

Пробовали синхронизировать ?

gkeepapi автоматически удаляет все заметки после входа в систему. Он заботится об обновлении токенов API, поэтому нет необходимости снова вызывать Keep.login(). После внесения каких-либо локальных изменений в заметки обязательно вызовите Keep.sync(), чтобы обновить их на сервере!:

keep.sync()

Другие вопросы по тегам