Skip to content

Instantly share code, notes, and snippets.

@k1m190r
Last active September 9, 2018 04:32
Show Gist options
  • Save k1m190r/982d9be078cce258f53840d7711d457a to your computer and use it in GitHub Desktop.
Save k1m190r/982d9be078cce258f53840d7711d457a to your computer and use it in GitHub Desktop.
def reqSP(cookie, root, subsite, opn, folder, file = ''):
"""
site - site or subsite
opn - operation name {'FilesFolders, Folders, Files, FileData, Properties, ParentFolder'}
folder - folder path from site/subsite level no slashes before or after
file - file name no slashes, if not file - folder operation is assumed
"""
# constructing URL for the REST API request
# as per: https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/get-to-know-the-sharepoint-rest-service
ut = "{}/{}/_api/web/Get{}ByServerRelativeUrl('/sites/{}/{}{}'){}" # template
ops = {
'FilesFolders': '?$expand=Files,Folders',
"Folders": '/Folders',
'Files': '/Files?$select=Name',
"Properties": '/Properties',
'FileData': '/$value',
'Activities': '/Activities',
"ListItemAllFields": "/ListItemAllFields",
"ParentFolder": '/ParentFolder',
"StorageMetrics": '/StorageMetrics',
None: "", "": "",
}
op = ops[opn]
ff = ('File', 'Folder')[not file] # false = 0, true = 1
fn = ('/{}'.format(file), '')[not file]
u = ut.format(root, site, ff, site, folder, fn, op)
print(u)
h = {
'accept': 'application/json;odata=verbose',
'cookie': cookie,
'accept-encoding': 'gzip',
}
r = requests.get(u, headers = h, stream = True)
return r
# respects to: https://stackoverflow.com/a/16696317/678491
def saveFile(dest, r):
"""
dest - destination folder
r - response of the request
"""
with open(dest, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment