Skip to content

Instantly share code, notes, and snippets.

@mik30s
Last active February 16, 2019 23:05
Show Gist options
  • Save mik30s/c3429bb330770d986ade5ff13d532c77 to your computer and use it in GitHub Desktop.
Save mik30s/c3429bb330770d986ade5ff13d532c77 to your computer and use it in GitHub Desktop.
Autodesk reality api requests in python
import requests, json, pprint
pp = pprint.PrettyPrinter(indent=4)
AUTH_URL = 'https://developer.api.autodesk.com/authentication/v1/authenticate'
PHOTO_SCENE_URL = 'https://developer.api.autodesk.com/photo-to-3d/v1/photoscene'
PHOTO_UPLOAD_URL = 'https://developer.api.autodesk.com/photo-to-3d/v1/file'
PHOTO_PROCESSOR_URL = 'https://developer.api.autodesk.com/photo-to-3d/v1/photoscene/'
config = {}
def authenticate(conf):
req = requests.post(
AUTH_URL,
headers={'Content-Type': 'application/x-www-form-urlencoded'},
data = {
'client_id': conf['client_id'],
'client_secret': conf['client_secret'],
'grant_type': 'client_credentials',
'scope': 'data:write data:read'
}
)
conf.update({'access_token':json.loads(req.content)['access_token']})
return conf
def createPhotoScene(conf):
photoSceneReq = requests.post(
PHOTO_SCENE_URL,
headers = {
'Authorization':'Bearer '+conf['access_token'],
'Content-Type': 'application/x-www-form-urlencoded'
},
data = {
'scenename':'recon_3d_scene',
'format': 'rcs,obj,ortho,fbx',
"metadata_name[0]": "orthogsd",
"metadata_value[0]": "0.1",
"metadata_name[1]": "orthocrop",
"metadata_value[1]": "0.25",
"metadata_name[2]": "targetcs",
"metadata_value[2]": "UTM84-32N"
}
)
#print(photoSceneReq,'\n', photoSceneReq.headers, photoSceneReq.content)
conf.update({'photo_scene_id':json.loads(photoSceneReq.content)['Photoscene']['photosceneid']})
return conf
def uploadImages(conf):
data = {
'photosceneid': conf['photo_scene_id'],
'type': 'image',
}
for i in range(43,94, 4):
url = 'http://rcsmike.com/assets/img/pot'+str(i)+'.jpg'
print(url)
data.update({'file['+str(i)+']': url})
print(len(data), data)
result = requests.post(
PHOTO_UPLOAD_URL,
headers = {
'Authorization':'Bearer '+conf['access_token'],
'Content-Type': 'application/x-www-form-urlencoded'
},
data = data
)
print('FILE UPLOAD', result.content)
return result.status_code == 200
def process3d(conf):
req = requests.post(
PHOTO_PROCESSOR_URL + conf['photo_scene_id'],
headers = {
'Authorization':'Bearer '+conf['access_token'],
'Content-Type': 'application/x-www-form-urlencoded'
}
)
print('process request result', req.content)
processMsg = json.loads(req.content)['msg']
if processMsg == 'No error':
# make first poll request
req = requests.get(
PHOTO_PROCESSOR_URL + conf['photo_scene_id'] +'/progress',
headers = {
'Authorization':'Bearer '+conf['access_token'],
'Content-Type': 'application/json'
}
)
# Continously process it
jsonRet = json.loads(req.content)
print('json raw', req.content)
while float(jsonRet['Photoscene']['progress']) < 100.0:
#print('progress',float(jsonRet['Photoscene']['progress']))
req = requests.get(
PHOTO_PROCESSOR_URL + conf['photo_scene_id'] +'/progress',
headers = {
'Authorization':'Bearer '+conf['access_token'],
'Content-Type': 'application/json'
}
)
print('json raw', req.content)
jsonRet = json.loads(req.content)
print('get obj url',PHOTO_PROCESSOR_URL + conf['photo_scene_id'] +'?format=obj')
# now get obj file-- make another request to download obj file
req = requests.get(
PHOTO_PROCESSOR_URL + conf['photo_scene_id'] +'?format=obj',
headers = {
'Authorization':'Bearer '+conf['access_token'],
'Content-Type': 'application/json'
}
)
#print('download request',req.content, req.status_code, json.loads(req.content))
downloadLink = json.loads(req.content)['Photoscene']['scenelink']
print("download link is", downloadLink)
return requests.get(downloadLink)
else:
print("PROCESSING_ERROR", processMsg)
return None
def main():
# read config file for authentication
config = open('../autodesk.config.json').read()
config = json.loads(config)
# authenticate app --gets access token needed for other stuff
config = authenticate(config)
# create photo scene
config = createPhotoScene(config)
pp.pprint(config)
# upload images
if uploadImages(config) == True:
print('Uploded images. Ready for processing....')
# process images
obj = process3d(config)
print(obj)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment