SharePoint 使用 SharePoint online REST 获取所有站点和所有子站点 API
SharePoint Get all sites and all sub sites using SharePoint online REST API
对于 SharePoint Online 连接器,我们使用以下步骤来获取所有网站:
步骤 1: 使用以下权限在 SharePoint 实例上创建加载项 xml
<AppPermissionRequests>
<AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl"/>
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Read"/>
</AppPermissionRequests>
第 2 步: 下面使用 API 获取所有站点和子站点
https://<site_name>.sharepoint.com/_api/search/query?querytext='contentclass:STS_Site' &rowlimit=100
我们面临的问题 –
- 以上端点返回全部
sites, sub sites along with user’s
personal site(One drive)
,而我们需要全部 sites and sub sites
只有.
- 请建议读取所有站点、所有子站点、所有文件夹和文件元数据所需的最低权限
我们参考了以下链接:
Joel Dsouza 的方法供您参考。
1.The首先Ajax是获取根站点标题和相对URL.
$.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + "/_api/site/rootweb?$select=Title,ServerRelativeUrl",
method: "GET",
headers: {
"Accept": "application/json; odata=verbose"
},
success: function(rootsite) {
},
error: function(rootsite) {},
async: false
});
2.The其次AJAX是获取Root Site下的所有子站点
$.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/webinfos?$select=ServerRelativeUrl,Title",
method: "GET",
headers: {
"Accept": "application/json; odata=verbose"
},
success: function(subsites) {
$.each(subsites.d.results, function() {
getSubSites(this.ServerRelativeUrl, this.Title);
});
},
error: function(subsites) {},
async: false
});
3.This 是循环遍历子站点并检查更多子站点的递归函数。
function getSubSites(SubSiteUrl, SubSiteTitle) {
console.log(SubSiteUrl);
$.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + SubSiteUrl + "/_api/web/webinfos?$select=ServerRelativeUrl,Title",
method: "GET",
headers: {
"Accept": "application/json; odata=verbose"
},
success: function(subsites) {
$.each(subsites.d.results, function(index) {
getSubSites(this.ServerRelativeUrl, this.Title);
});
},
error: function(subsites) {},
async: false
});
}
您应该在端点中添加路径过滤器。
普通网站集的路径类似于 https://tenant.sharepoint.com
,而个人(One Drive)网站集的路径类似于 https://tenant-my.sharepoint.com/personal/*
。
因此,按如下方式修改您的端点:
https://<site_name>.sharepoint.com/_api/search/query?querytext='contentclass:STS_Site
Path:"https://<site_name>.sharepoint.com/*"'&rowlimit=500
这将仅 return 以 https://<site_name>.sharepoint.com
路径开头的网站集,并将排除位于不同路径的 One Drive 网站集。
https://yoursharepointsite.com/_api/search/query?querytext='(contentclass:STS_Site) (contentclass:STS_Web)'&trimduplicates=false&rowlimit=5000&selectproperties='Title,Url,Path,ParentLink'"
以上其余部分 url 应该为您提供用户有权访问的所有站点和子站点。您可能需要 trim 份副本。
对于 SharePoint Online 连接器,我们使用以下步骤来获取所有网站:
步骤 1: 使用以下权限在 SharePoint 实例上创建加载项 xml
<AppPermissionRequests>
<AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl"/>
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Read"/>
</AppPermissionRequests>
第 2 步: 下面使用 API 获取所有站点和子站点
https://<site_name>.sharepoint.com/_api/search/query?querytext='contentclass:STS_Site' &rowlimit=100
我们面临的问题 –
- 以上端点返回全部
sites, sub sites along with user’s personal site(One drive)
,而我们需要全部sites and sub sites
只有. - 请建议读取所有站点、所有子站点、所有文件夹和文件元数据所需的最低权限
我们参考了以下链接:
Joel Dsouza 的方法供您参考。
1.The首先Ajax是获取根站点标题和相对URL.
$.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + "/_api/site/rootweb?$select=Title,ServerRelativeUrl",
method: "GET",
headers: {
"Accept": "application/json; odata=verbose"
},
success: function(rootsite) {
},
error: function(rootsite) {},
async: false
});
2.The其次AJAX是获取Root Site下的所有子站点
$.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/webinfos?$select=ServerRelativeUrl,Title",
method: "GET",
headers: {
"Accept": "application/json; odata=verbose"
},
success: function(subsites) {
$.each(subsites.d.results, function() {
getSubSites(this.ServerRelativeUrl, this.Title);
});
},
error: function(subsites) {},
async: false
});
3.This 是循环遍历子站点并检查更多子站点的递归函数。
function getSubSites(SubSiteUrl, SubSiteTitle) {
console.log(SubSiteUrl);
$.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + SubSiteUrl + "/_api/web/webinfos?$select=ServerRelativeUrl,Title",
method: "GET",
headers: {
"Accept": "application/json; odata=verbose"
},
success: function(subsites) {
$.each(subsites.d.results, function(index) {
getSubSites(this.ServerRelativeUrl, this.Title);
});
},
error: function(subsites) {},
async: false
});
}
您应该在端点中添加路径过滤器。
普通网站集的路径类似于 https://tenant.sharepoint.com
,而个人(One Drive)网站集的路径类似于 https://tenant-my.sharepoint.com/personal/*
。
因此,按如下方式修改您的端点:
https://<site_name>.sharepoint.com/_api/search/query?querytext='contentclass:STS_Site
Path:"https://<site_name>.sharepoint.com/*"'&rowlimit=500
这将仅 return 以 https://<site_name>.sharepoint.com
路径开头的网站集,并将排除位于不同路径的 One Drive 网站集。
https://yoursharepointsite.com/_api/search/query?querytext='(contentclass:STS_Site) (contentclass:STS_Web)'&trimduplicates=false&rowlimit=5000&selectproperties='Title,Url,Path,ParentLink'"
以上其余部分 url 应该为您提供用户有权访问的所有站点和子站点。您可能需要 trim 份副本。