Комментарии — это обратная связь пользователя с файлом, например, когда пользователь текстового редактора предлагает перефразировать предложение. Существует два типа комментариев: закреплённые и незакреплённые . Закреплённый комментарий связан с определённым местом, например, с предложением в текстовом редакторе, в определённой версии документа. Напротив, незакреплённый комментарий связан только с документом.
Ответы прикрепляются к комментариям и представляют собой реакцию пользователя на комментарий. API Drive позволяет пользователям добавлять комментарии и ответы к документам, созданным в вашем приложении. Совокупность комментариев и ответов называется обсуждением .
Используйте параметр fields
Для всех методов (кроме delete ) ресурса comments необходимо задать системный параметр fields , чтобы указать поля, возвращаемые в ответе. В большинстве методов ресурсов Диска это действие требуется только для возврата полей, отличных от полей по умолчанию, но для ресурса comments оно является обязательным. Если параметр fields пропущен, метод вернёт ошибку. Подробнее см. в разделе Возврат определённых полей .
Ограничения комментариев
При работе с закрепленными и незакрепленными комментариями с помощью API Диска применяются следующие ограничения:
| Тип комментария | Тип файла |
|---|---|
| На якоре |
|
| Незакрепленный |
|
Добавить закрепленный комментарий к последней версии документа
При добавлении комментария может потребоваться привязать его к определённой области файла. Якорь определяет область файла, на которую ссылается комментарий. Ресурс comments определяет поле anchor как строку JSON.
Чтобы добавить закрепленный комментарий:
(Необязательно). Вызовите метод
listресурсаrevisionsчтобы получить список всехrevisionIDдокумента. Выполняйте этот шаг только в том случае, если вы хотите привязать комментарий к любой ревизии, кроме последней. Если вы хотите использовать последнюю ревизию, используйтеheadдляrevisionID.Вызовите метод
createдля ресурсаcommentsс параметромfileID, ресурсcomments, содержащий комментарий, и якорную строку JSON, содержащуюrevisionID(r) и регион (a).
В следующем примере кода показано, как создать закрепленный комментарий:
Питон
from google.oauth2.credentials import Credentials
from googleapiclient.errors import HttpError
# --- Configuration ---
# The ID of the file to comment on.
# Example: '1_aBcDeFgHiJkLmNoPqRsTuVwXyZ'
FILE_ID = 'FILE_ID'
# The text content of the comment.
COMMENT_TEXT = 'This is an example of an anchored comment.'
# The line number to anchor the comment to.
# Note: Line numbers are based on the revision.
ANCHOR_LINE = 10
# --- End of user-configuration section ---
SCOPES = ["https://www.googleapis.com/auth/drive"]
creds = Credentials.from_authorized_user_file("token.json", SCOPES)
def create_anchored_comment():
"""
Create an anchored comment on a specific line in a Google Doc.
Returns:
The created comment object or None if an error occurred.
"""
try:
# Build the Drive API service
service = build("drive", "v3", credentials=creds)
# Define the anchor region for the comment.
# For Google Docs, the region is typically defined by 'line' and 'revision'.
# Other file types might use different region classifiers.
anchor = {
'region': {
'kind': 'drive#commentRegion',
'line': ANCHOR_LINE,
'rev': 'head'
}
}
# The comment body.
comment_body = {
'content': COMMENT_TEXT,
'anchor': anchor
}
# Create the comment request.
comment = (
service.comments()
.create(fileId=FILE_ID, fields="*", body=comment_body)
.execute()
)
print(f"Comment ID: {comment.get('id')}")
return comment
except HttpError as error:
print(f"An error occurred: {error}")
return None
create_anchored_comment()
API Диска возвращает экземпляр объекта ресурса comments , который включает строку anchor .
Добавить незакрепленный комментарий
Чтобы добавить непривязанный комментарий, вызовите метод create с параметром fileId и ресурсом comments , содержащим комментарий.
Комментарий вставляется как обычный текст, но тело ответа содержит поле htmlContent , содержащее контент, отформатированный для отображения.
В следующем примере кода показано, как создать непривязанный комментарий:
Питон
from google.oauth2.credentials import Credentials
from googleapiclient.errors import HttpError
# --- Configuration ---
# The ID of the file to comment on.
# Example: '1_aBcDeFgHiJkLmNoPqRsTuVwXyZ'
FILE_ID = 'FILE_ID'
# The text content of the comment.
COMMENT_TEXT = 'This is an example of an unanchored comment.'
# --- End of user-configuration section ---
SCOPES = ["https://www.googleapis.com/auth/drive"]
creds = Credentials.from_authorized_user_file("token.json", SCOPES)
def create_unanchored_comment():
"""
Create an unanchored comment on a specific line in a Google Doc.
Returns:
The created comment object or None if an error occurred.
"""
try:
# Build the Drive API service
service = build("drive", "v3", credentials=creds)
# The comment body. For an unanchored comment,
# omit the 'anchor' property.
comment_body = {
'content': COMMENT_TEXT
}
# Create the comment request.
comment = (
service.comments()
.create(fileId=FILE_ID, fields="*", body=comment_body)
.execute()
)
print(f"Comment ID: {comment.get('id')}")
return comment
except HttpError as error:
print(f"An error occurred: {error}")
return None
create_unanchored_comment()
Добавить ответ на комментарий
Чтобы добавить ответ на комментарий, используйте метод create ресурса replies с параметрами fileId и commentId . В теле запроса для добавления ответа используется поле content .
Ответ вставляется как обычный текст, но тело ответа содержит поле htmlContent , содержащее контент, отформатированный для отображения.
Метод возвращает поля, перечисленные в поле fields .
Запрос
В этом примере мы предоставляем параметры пути fileId и commentId , а также несколько полей.
POST https://www.googleapis.com/drive/v3/files/FILE_ID/comments/COMMENT_ID/replies?fields=id,comment
Текст запроса
{
"content": "This is a reply to a comment."
}Разрешить комментарий
Комментарий может быть решен только путем публикации ответа на комментарий.
Чтобы разрешить комментарий, используйте метод create в ресурсе replies с параметрами fileId и commentId .
В теле запроса поле action используется для разрешения комментария. Вы также можете настроить поле content для добавления ответа, закрывающего комментарий.
Когда комментарий разрешён, Диск отмечает ресурс comments как resolved: true . В отличие от удалённых комментариев , разрешённые комментарии могут включать поля htmlContent или content .
Когда ваше приложение обрабатывает комментарий, ваш пользовательский интерфейс должен показывать, что комментарий был обработан. Например, ваше приложение может:
- Запретить дальнейшие ответы и скрыть все предыдущие ответы, а также исходный комментарий.
- Скрыть решенные комментарии.
Запрос
В этом примере мы предоставляем параметры пути fileId и commentId , а также несколько полей.
POST https://www.googleapis.com/drive/v3/files/FILE_ID/comments/COMMENT_ID/replies?fields=id,comment
Текст запроса
{
"action": "resolve",
"content": "This comment has been resolved."
}Получить комментарий
Чтобы получить комментарий к файлу, используйте метод get ресурса comments с параметрами fileId и commentId . Если вы не знаете идентификатор комментария, вы можете получить список всех комментариев с помощью метода list .
Метод возвращает экземпляр ресурса comments .
Чтобы включить удаленные комментарии в результаты, установите для параметра запроса includedDeleted значение true .
Запрос
В этом примере мы предоставляем параметры пути fileId и commentId , а также несколько полей.
GET https://www.googleapis.com/drive/v3/files/FILE_ID/comments/COMMENT_ID?fields=id,comment,modifiedTime,resolved
Список комментариев
Чтобы вывести список комментариев к файлу, используйте метод list ресурса comments с параметром fileId . Метод возвращает список комментариев.
Передайте следующие параметры запроса для настройки пагинации или фильтрации комментариев:
includeDeleted: Установите значениеtrue, чтобы включить удалённые комментарии. Удалённые комментарии не включают поляhtmlContentиcontent.pageSize: максимальное количество комментариев, возвращаемых на странице.pageToken: токен страницы, полученный при предыдущем вызове списка. Укажите этот токен для получения следующей страницы.startModifiedTime: минимальное значение поляmodifiedTimeдля комментариев к результату.
Запрос
В этом примере мы предоставляем параметр пути fileId , параметр запроса includeDeleted и несколько полей.
GET https://www.googleapis.com/drive/v3/files/FILE_ID/comments?includeDeleted=true&fields=(id,comment,kind,modifiedTime,resolved)
Обновить комментарий
Чтобы обновить комментарий к файлу, используйте метод update ресурса comments с параметрами fileId и commentId . В теле запроса для обновления комментария используется поле content .
Поле resolved » в ресурсе comments доступно только для чтения. Комментарий можно разрешить, только отправив ответ на другой комментарий. Подробнее см. в разделе «Решить проблему комментария» .
Метод возвращает поля, перечисленные в параметре запроса fields .
Запрос
В этом примере мы предоставляем параметры пути fileId и commentId , а также несколько полей.
PATCH https://www.googleapis.com/drive/v3/files/FILE_ID/comments/COMMENT_ID?fields=id,comment
Текст запроса
{
"content": "This comment is now updated."
}Удалить комментарий
Чтобы удалить комментарий к файлу, используйте метод delete ресурса comments с параметрами fileId и commentId .
При удалении комментария Диск отмечает ресурс комментария как deleted: true . Удалённые комментарии не содержат поля htmlContent и content .
Запрос
В этом примере мы предоставляем параметры пути fileId и commentId .
DELETE https://www.googleapis.com/drive/v3/files/FILE_ID/comments/COMMENT_ID