Microsoft 365 & Microsoft Graph Library para Python
Usa pip:
pip install Office365-REST-Python-Client
Alternativamente, la última versión podría instalarse directamente a través de GitHub:
pip install git+https://github.com/vgrem/Office365-REST-Python-Client.git
Para los siguientes ejemplos, se pueden encontrar credenciales relevantes en el portal de Azure.
Pasos para acceder:
El cliente ClientContext
proporciona el soporte para un Legacy SharePoint REST y ONEDRIVE para las API de REST Business, la lista de versiones compatibles:
Se admiten los siguientes flujos de autores:
Este método de autenticación es compatible con SharePoint en las instalaciones y sigue siendo un modelo relevante en ambos SharePoint en las instalaciones como SharePoint Online, los siguientes métodos están disponibles:
ClientContext.with_credentials(client_credentials)
ClientContext.with_client_credentials(client_id, client_secret)
Uso:
client_credentials = ClientCredential('{client_id}','{client_secret}')
ctx = ClientContext('{url}').with_credentials(client_credentials)
Documentación:
Ejemplo: Connect_With_App_principal.py
Uso:
user_credentials = UserCredential('{username}','{password}')
ctx = ClientContext('{url}').with_credentials(user_credentials)
Ejemplo: Connect_with_user_credential.py
Documentación:
Ejemplo: Connect_with_client_certificate.py
Para iniciar sesión interactivamente, es decir, a través de un navegador local
Requisito previo:
En Azure Portal, configure el URI de redirección de su "aplicación móvil y de escritorio" como
http://localhost
.
Ejemplo: conectar_interactive.py
Uso:
from office365 . sharepoint . client_context import ClientContext
ctx = ClientContext ( "{site-url}" ). with_interactive ( "{tenant-name-or-id}" , "{client-id}" )
me = ctx . web . current_user . get (). execute_query ()
print ( me . login_name )
Hay dos enfoques disponibles para realizar consultas API:
ClientContext class
: donde se dirige a los recursos de SharePoint como Web
, ListItem
y etc (recomendado) from office365 . runtime . auth . user_credential import UserCredential
from office365 . sharepoint . client_context import ClientContext
site_url = "https://{your-tenant-prefix}.sharepoint.com"
ctx = ClientContext ( site_url ). with_credentials ( UserCredential ( "{username}" , "{password}" ))
web = ctx . web
ctx . load ( web )
ctx . execute_query ()
print ( "Web title: {0}" . format ( web . properties [ 'Title' ]))
o alternativamente a través del encadenamiento del método (también conocido como interfaz fluida):
from office365 . runtime . auth . user_credential import UserCredential
from office365 . sharepoint . client_context import ClientContext
site_url = "https://{your-tenant-prefix}.sharepoint.com"
ctx = ClientContext ( site_url ). with_credentials ( UserCredential ( "{username}" , "{password}" ))
web = ctx . web . get (). execute_query ()
print ( "Web title: {0}" . format ( web . properties [ 'Title' ]))
SharePointRequest class
: donde construye consultas REST (y no hay modelo involucrado)
El ejemplo demuestra cómo leer las propiedades Web
:
import json
from office365 . runtime . auth . user_credential import UserCredential
from office365 . sharepoint . request import SharePointRequest
site_url = "https://{your-tenant-prefix}.sharepoint.com"
request = SharePointRequest ( site_url ). with_credentials ( UserCredential ( "{username}" , "{password}" ))
response = request . execute_request ( "web" )
json = json . loads ( response . content )
web_title = json [ 'd' ][ 'Title' ]
print ( "Web title: {0}" . format ( web_title ))
La lista de ejemplos:
Trabajando con archivos
Trabajar con listas y elementos de lista
Consulte la sección Ejemplos de otros escenarios
Actualmente se está implementando el soporte para entornos de SharePoint no estándar. Actualmente compatible:
Para habilitar la autenticación a los puntos finales de GCC, agregue el parámetro environment='GCCH'
al llamar a la ClientContext class
con .with_user_credentials
, .with_client_credentials
o .with_credentials
Ejemplo:
from office365 . sharepoint . client_context import ClientContext
client_credentials = ClientCredential ( '{client_id}' , '{client_secret}' )
ctx = ClientContext ( '{url}' ). with_credentials ( client_credentials , environment = 'GCCH' )
La lista de API compatibles:
Dado que las API de Outlook REST están disponibles tanto en Microsoft Graph como en el punto final de la API de Outlook, los siguientes clientes están disponibles:
GraphClient
que se dirige a la versión API de Outlook v2.0
( preferible hoy en día, consulte la transición a la API REST de Outlook basada en Microsoft Graph para obtener detalles)OutlookClient
, que se dirige a la versión API v1.0
de Outlook (no se recomienda para el uso, ya que la versión v1.0
se está desactivando).La Biblioteca de Autenticación de Microsoft (MSAL) para Python, que viene como dependencia, se usa como una biblioteca predeterminada para obtener tokens para llamar a la API de Microsoft Graph.
Uso de la biblioteca de autenticación de Microsoft (MSAL) para Python
Nota: El token de acceso se está adquiriendo a través del flujo de credenciales del cliente en los ejemplos proporcionados. Se pueden encontrar otras formas de adquisición de tokens aquí: https://msal-python.readthedocs.io/en/latest/
import msal
from office365 . graph_client import GraphClient
def acquire_token ():
"""
Acquire token via MSAL
"""
authority_url = 'https://login.microsoftonline.com/{tenant_id_or_name}'
app = msal . ConfidentialClientApplication (
authority = authority_url ,
client_id = '{client_id}' ,
client_credential = '{client_secret}'
)
token = app . acquire_token_for_client ( scopes = [ "https://graph.microsoft.com/.default" ])
return token
client = GraphClient ( acquire_token )
Pero en términos de autenticación de la API de Microsoft Graph, también son compatibles con otras bibliotecas que cumplen con las especificaciones de OAuth, como Adal.
Usando Adal Python
Uso
import adal
from office365 . graph_client import GraphClient
def acquire_token_func ():
authority_url = 'https://login.microsoftonline.com/{tenant_id_or_name}'
auth_ctx = adal . AuthenticationContext ( authority_url )
token = auth_ctx . acquire_token_with_client_credentials (
"https://graph.microsoft.com" ,
"{client_id}" ,
"{client_secret}" )
return token
client = GraphClient ( acquire_token_func )
El ejemplo demuestra cómo enviar un correo electrónico a través de Microsoft Graph Endpoint.
Nota: El token de acceso se está adquiriendo a través del flujo de credenciales del cliente
from office365 . graph_client import GraphClient
client = GraphClient ( acquire_token_func )
client . me . send_mail (
subject = "Meet for lunch?" ,
body = "The new cafeteria is open." ,
to_recipients = [ "[email protected]" ]
). execute_query ()
Ejemplos y escenarios adicionales:
Consulte la sección Ejemplos de otros escenarios
Referencia de API de Graph OneDrive
La Biblioteca de Autenticación de Microsoft (MSAL) para Python, que viene como dependencia, se utiliza para obtener token
import msal
def acquire_token_func ():
"""
Acquire token via MSAL
"""
authority_url = 'https://login.microsoftonline.com/{tenant_id_or_name}'
app = msal . ConfidentialClientApplication (
authority = authority_url ,
client_id = '{client_id}' ,
client_credential = '{client_secret}'
)
token = app . acquire_token_for_client ( scopes = [ "https://graph.microsoft.com/.default" ])
return token
El ejemplo demuestra cómo enumerar e imprimir la URL de la unidad que corresponde al punto final list available drives
Nota: El token de acceso se está adquiriendo a través del flujo de credenciales del cliente
from office365 . graph_client import GraphClient
tenant_name = "contoso.onmicrosoft.com"
client = GraphClient ( acquire_token_func )
drives = client . drives . get (). execute_query ()
for drive in drives :
print ( "Drive url: {0}" . format ( drive . web_url ))
from office365 . graph_client import GraphClient
client = GraphClient ( acquire_token_func )
# retrieve drive properties
drive = client . users [ "{user_id_or_principal_name}" ]. drive . get (). execute_query ()
# download files from OneDrive into local folder
with tempfile . TemporaryDirectory () as path :
download_files ( drive . root , path )
dónde
def download_files ( remote_folder , local_path ):
drive_items = remote_folder . children . get (). execute_query ()
for drive_item in drive_items :
if drive_item . file is not None : # is file?
# download file content
with open ( os . path . join ( local_path , drive_item . name ), 'wb' ) as local_file :
drive_item . download ( local_file ). execute_query ()
Ejemplos adicionales:
Consulte la sección Ejemplos OneDrive para obtener más ejemplos.
La Biblioteca de Autenticación de Microsoft (MSAL) para Python, que viene como dependencia, se utiliza para obtener token
El ejemplo demuestra cómo crear un nuevo equipo bajo un grupo que corresponde a Create team
from office365 . graph_client import GraphClient
client = GraphClient ( acquire_token_func )
new_team = client . groups [ "{group-id}" ]. add_team (). execute_query_retry ()
Ejemplos adicionales:
Consulte la sección Ejemplos de otros escenarios
La biblioteca admite la API de OneNote en términos de llamadas a los cuadernos, secciones y páginas de OneNote de un usuario en una cuenta personal u organización
Ejemplo: crea una nueva página
from office365 . graph_client import GraphClient
client = GraphClient ( acquire_token_func )
files = {}
with open ( "./MyPage.html" , 'rb' ) as f ,
open ( "./MyImage.png" , 'rb' ) as img_f ,
open ( "./MyDoc.pdf" , 'rb' ) as pdf_f :
files [ "imageBlock1" ] = img_f
files [ "fileBlock1" ] = pdf_f
page = client . me . onenote . pages . add ( presentation_file = f , attachment_files = files ). execute_query ()
El ejemplo demuestra cómo crear una nueva tarea de planificador que corresponde a Create plannerTask
:
from office365 . graph_client import GraphClient
client = GraphClient ( acquire_token_func )
task = client . planner . tasks . add ( title = "New task" , planId = "--plan id goes here--" ). execute_query ()
Las siguientes bibliotecas se instalarán cuando instale la biblioteca del cliente:
Potente Pycharm
Python ide de Jetbrains
.