Комментарии — это обратная связь пользователя с файлом, например, когда пользователь текстового редактора предлагает перефразировать предложение. Существует два типа комментариев: закреплённые и незакреплённые . Закреплённый комментарий связан с определённым местом, например, с предложением в текстовом редакторе, в определённой версии документа. Напротив, незакреплённый комментарий связан только с документом.
Ответы прикрепляются к комментариям и представляют собой реакцию пользователя на комментарий. 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