In this tutorial we will cover how to implement asynchronous approach of Image Converter. You only need to send source image to SubmitWebPConversionTask or any other submission API methods like SubmitBmpConversionTask, SubmitDicomConversionTask etc. to receive task identifier as response.
After receiving task identifier you need to check task status by calling GetConversionTaskStatus method. You need to call same method after a few seconds delay as long as task status equals to “Waiting”. Once you receive “Completed” from GetConversionTaskStatus method you can call DownloadResult method to download final image. You can use the Python implementation below.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| import requests
import time
def submit_webp_conversion_task(file_path_to_convert, rapid_api_key):
multipart_form_data = {
'file': (file_path_to_convert, open(file_path_to_convert, 'rb')),
'lossy': (None, 'true')
}
headers = {
'X-RapidAPI-Key': rapid_api_key
}
response = requests.post('https://image-converter4.p.rapidapi.com/submitWebPConversionTask',
files=multipart_form_data, headers=headers)
if response.status_code != 200:
raise Exception('Cannot create task')
return response.text
def get_conversion_task_status(task_id, rapid_api_key):
params = {
'taskId': task_id
}
headers = {
'X-RapidAPI-Key': rapid_api_key
}
response = requests.get('https://image-converter4.p.rapidapi.com/getConversionTaskStatus',
headers=headers, params=params)
if response.status_code != 200:
raise Exception("Cannot check task status")
return response.text
def download_result(task_id, rapid_api_key):
params = {
'taskId': task_id
}
headers = {
'X-RapidAPI-Key': rapid_api_key
}
response = requests.get('https://image-converter4.p.rapidapi.com/downloadResult', headers=headers,
params=params)
if response.status_code != 200:
raise Exception('Cannot download file')
return response.content
if __name__ == '__main__':
rapid_api_key = '<YOUR RAPIDAPI KEY HERE>'
file_path_to_convert = '<PATH OF SOURCE IMAGE TO CONVERT>'
task_id = submit_webp_conversion_task(file_path_to_convert, rapid_api_key)
retry_count = 0
while retry_count < 100:
retry_count += 1
time.sleep(5)
status = get_conversion_task_status(task_id, rapid_api_key)
if status == 'Completed':
file_bytes = download_result(task_id, rapid_api_key)
with open('final_image.webp', mode='wb') as binary_pdf:
binary_pdf.write(file_bytes)
break
elif status == 'Waiting':
continue
elif status == 'Failed':
raise Exception('Cannot convert file')
else:
raise Exception('Invalid status')
|