Dans ce tutoriel, nous allons couvrir comment implémenter l’approche asynchrone de Image Converter. Il vous suffit d’envoyer l’image source à SubmitWebPConversionTask ou à toute autre méthode d’API de soumission telle que SubmitBmpConversionTask, SubmitDicomConversionTask, etc. pour recevoir l’identificateur de tâche en réponse.

Après avoir reçu l’identificateur de tâche, vous devez vérifier l’état de la tâche en appelant la méthode GetConversionTaskStatus. Vous devez appeler la même méthode après quelques secondes de retard tant que l’état de la tâche est égal à « Waiting ». Une fois que vous avez reçu « Completed » de la méthode GetConversionTaskStatus, vous pouvez appeler la méthode DownloadResult pour télécharger l’image finale. Vous pouvez utiliser l’implémentation Python ci-dessous.

 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')