thanks, I’d overlooked it, so here’s the simplified example
import clr
import sys
import System
#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
import traceback
import json
import urllib.request
import urllib.error
import json
import ssl
from base64 import b64encode
def get_auth_token(client_id, secret_id):
url = "https://developer.api.autodesk.com/authentication/v2/token"
client_credentials = f"{client_id}:{secret_id}"
b_64_pass = b64encode(client_credentials.encode("utf-8")).decode("utf-8")
#
token = None
payload = {
"grant_type": "client_credentials",
"scope": "data:read data:search" ,
}
#
json_data = urllib.parse.urlencode(payload).encode('utf-8')
# Create request with headers
request = urllib.request.Request(
url,
data=json_data,
headers={
"Authorization": "Basic {}".format(b_64_pass),
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json",
},
method='POST'
)
try:
# Send request
with urllib.request.urlopen(request) as response:
status_code = response.getcode()
response_data = json.loads(response.read().decode('utf-8'))
token_type = response_data["token_type"]
token = response_data["access_token"]
#
except urllib.error.HTTPError as e:
print(f"Status Code: {e.code}")
print(traceback.format_exc())
try:
error_data = json.loads(e.read().decode('utf-8'))
print(f"Response: {error_data}")
except:
print(f"Response: Error {e.code} - {e.reason}")
#
except Exception as e:
print(traceback.format_exc())
return token
def get_request_data_management(url):
global token
response_data = None
# Prepare headers
headers = {"Authorization": f"Bearer {token}", "Accept": "application/json" }
# Build the request
request = urllib.request.Request(url, headers=headers, method='GET' )
try:
# Send request
with urllib.request.urlopen(request) as response:
resultA = response.read().decode('utf-8')
response_data = json.loads(resultA)
except urllib.error.HTTPError as e:
print(f"Status Code: {e.code}")
try:
error_data = json.loads(e.read().decode('utf-8'))
print(f"Response: {error_data}")
except:
print(f"Response: Error {e.code} - {e.reason}")
except Exception as e:
print(traceback.format_exc())
return response_data
#Preparing input from dynamo to revit
linkInstance = UnwrapElement(IN[0])
linkdoc = linkInstance.GetLinkDocument()
path = linkdoc.GetCloudModelPath()
model_urn = linkdoc.GetCloudModelUrn()
project_id = linkdoc.GetProjectId()
my_project_Guid = path.GetProjectGUID()
model_Guid = path.GetModelGUID()
data_link = {}
# get token
token_type = None
token = get_auth_token("CLIENT_ID_KEY", "CLIENT_SECRET_KEY")
#
# get file fom urn
jobject_versions = get_request_data_management(f"https://developer.api.autodesk.com/data/v1/projects/{project_id}/items/{model_urn}/versions")
data_versions_array = jobject_versions["data"]
for j_version in data_versions_array:
data_extension = j_version["attributes"]["extension"]["data"]
if data_extension["modelGuid"] == model_Guid.ToString():
data_link = j_version["attributes"]
break
OUT = data_link