Crumple: Collect.RevitLinks

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
3 Likes