Мне нужно найти DriveItem из API Microsoft Graph, имея только URL-адрес документа в таком формате:
https://tenant.sharepoint.com/sites/somesite/somefolder/somedocument.doc
Я знаю, что можно сделать наоборот, например. получить URL-адрес документа из DriveItem, но как мне получить DriveItem, если у меня есть только URL-адрес документа?
Для примера я создал папку на сайте SharePoint и загрузил в нее документ:
Чтобы получить идентификатор элемента диска, используя только URL-адрес документа через API Microsoft Graph, проверьте следующее:
https://graph.microsoft.com/v1.0/sites/SiteID/drive/root/search(q='Document.docx')
Чтобы убедиться в том же, я передал идентификатор диска и идентификатор элемента диска, чтобы проверить, получает ли он документ:
https://graph.microsoft.com/v1.0/drives/DriveID/items/DriveItemID
Если у вас нет идентификатора сайта, вы можете передать имя сайта, чтобы получить идентификатор сайта:
https://graph.microsoft.com/v1.0/sites?search=YourSiteName
Вы можете получить идентификатор сайта по последнему запросу, который я опубликовал в ответе.
Рад узнать, что другое решение сработало для вас :)
Вы можете использовать API поиска, фильтровать driveItem
тип объекта и указывать URL-адрес документа в queryString
POST https://graph.microsoft.com/v1.0/search/query
{
"requests": [
{
"entityTypes": [
"driveItem"
],
"query": {
"queryString": "path:\"https://tenant.sharepoint.com/sites/somesite/somefolder/somedocument.doc\""
}
}
]
}
Ответ будет содержать свойство resource
с внутренним id
, которое driveItemId
вам нужно. Свойство parentReference
содержит дополнительные сведения, например driveId
.
Другой способ — получить файл по относительному пути, но он требует знания siteId
и driveId
, связанных с определенной библиотекой документов.
GET https://graph.microsoft.com/v1.0/sites/{siteId}/drives/{driveId}/root:/somefolder/somedocument.doc:/
В 2024 году вышеописанное работало без префикса path:
. с этим префиксом он вернул 0 результатов на конечной точке версии 1.0.
Для меня это не очень хорошее решение, у меня нет идентификатора сайта, и он найдет несколько документов, если они имеют одно и то же имя, но находятся в разных подпапках.