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()