Basicaly what im trying to do is create a Desktop app for create folders inside a shared folder from other account (ONE DRIVE) and send this new folder created with some files in it to the shared folder with python
What i did according to API App Registration AZURE is create a new register, all done, create the Secrets and Certs section and all this stuff i thinks is all good and done.
But in code what im did was this by now:
import tkinter as tk
from tkinter import filedialog, messagebox
import requests
import os
import msal
# Configuration - replace with your Azure app details
CLIENT_ID = 'XXXXXXXXXXXXXXXXXXXXXXXXX'
CLIENT_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXX'
TENANT_ID = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
AUTHORITY = f'https://login.microsoftonline.com/{TENANT_ID}'
SCOPE = ['Files.ReadWrite.All', 'Sites.ReadWrite.All']
GRAPH_API_URL = 'https://graph.microsoft.com/v1.0'
# Initialize MSAL
app = msal.ConfidentialClientApplication(
CLIENT_ID,
authority=AUTHORITY,
client_credential=CLIENT_SECRET
)
def get_access_token():
result = app.acquire_token_for_client(scopes=SCOPE)
return result.get('access_token')
def get_shared_folder_id(shared_folder_url):
access_token = get_access_token()
headers = {
'Authorization': f'Bearer {access_token}'
}
response = requests.get(f'{GRAPH_API_URL}/sites/root/shared', headers=headers)
if response.status_code == 200:
items = response.json().get('value', [])
for item in items:
if item['webUrl'] == shared_folder_url:
return item['id']
return None
def create_folder(folder_name, parent_id):
access_token = get_access_token()
url = f'{GRAPH_API_URL}/drives/{parent_id}/items/root/children'
headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json'
}
data = {
'name': folder_name,
'folder': {},
'@microsoft.graph.conflictBehavior': 'rename'
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 201:
messagebox.showinfo("Success", "Folder created successfully!")
else:
messagebox.showerror("Error", f"Failed to create folder: {response.json()}")
def upload_folder_to_shared():
folder_path = filedialog.askdirectory()
if not folder_path:
return
shared_folder_url = tk.simpledialog.askstring("Shared Folder URL", "Enter the URL of the shared folder:")
if not shared_folder_url:
return
shared_folder_id = get_shared_folder_id(shared_folder_url)
if not shared_folder_id:
messagebox.showerror("Error", "Shared folder not found.")
return
folder_name = os.path.basename(folder_path)
access_token = get_access_token()
url = f'{GRAPH_API_URL}/drives/{shared_folder_id}/items/root/children'
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
relative_path = os.path.relpath(file_path, folder_path)
file_url = f'{url}/{relative_path}:/content'
with open(file_path, 'rb') as f:
response = requests.put(file_url, headers={
'Authorization': f'Bearer {access_token}'
}, data=f)
if response.status_code not in (200, 201):
messagebox.showerror("Error", f"Failed to upload {file}: {response.json()}")
return
messagebox.showinfo("Success", "Files uploaded successfully!")
# Tkinter GUI setup
root = tk.Tk()
root.title("OneDrive Folder Manager")
# Upload folder UI
tk.Button(root, text="Upload Folder to Shared Folder", command=upload_folder_to_shared).pack()
root.mainloop()
This is what i did and it returns -> messagebox.showerror(“Error”, “Shared folder not found.”)
What am i doing wrong?