Dans ce tutoriel, nous allons expliquer comment implémenter l’approche asynchrone de Web Renderer. Il vous suffit d’envoyer du contenu HTML aux méthodes d’API SubmitPDFFromHTMLTask ou SubmitImageFromHTMLTask pour recevoir l’identificateur de tâche en réponse. Il existe également des méthodes SubmitPDFFromUrlTask et SubmitImageFromUrlTask pour restituer un FICHIER PDF ou une image à partir d’un URI Web public.

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 GetRenderingTaskStatus. 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 GetRenderingTaskStatus, vous pouvez appeler la méthode DownloadResult pour télécharger le fichier final. 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
77
78
79
80
81
82
import requests
import time


def submit_pdf_from_html_task(htmlContent, uri, rapid_api_key):
    multipart_form_data = {
        'uri': (None, uri),
        'useCompression': (None, 'false'),
        'pageLabel': (None, 'Home Page'),
        'messageLabel': (None, 'Initial Capture'),
        'browserHeight': (None, '768'),
        'browserWidth': (None, '1024'),
        'htmlContent': (None, htmlContent)
    }

    headers = {
        'X-RapidAPI-Key': rapid_api_key
    }

    response = requests.post('https://web-renderer.p.rapidapi.com/SubmitPDFFromHTMLTask',
                             files=multipart_form_data, headers=headers)
    if response.status_code != 200:
        raise Exception('Cannot create task')

    return response.text


def get_rendering_task_status(task_id, rapid_api_key):
    params = {
        'taskId': task_id
    }

    headers = {
        'X-RapidAPI-Key': rapid_api_key
    }

    response = requests.get('https://web-renderer.p.rapidapi.com/GetRenderingTaskStatus',
                            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://web-renderer.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>'
    html_content = '<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body><h1>Hello World!</h1></body></html>'
    uriOfHtmlContent = 'https://www.google.com?hl=en'
    task_id = submit_pdf_from_html_task(html_content, uriOfHtmlContent, rapid_api_key)
    retry_count = 0
    while retry_count < 100:
        retry_count += 1
        time.sleep(5)
        status = get_rendering_task_status(task_id, rapid_api_key)
        if status == 'Completed':
            file_bytes = download_result(task_id, rapid_api_key)
            with open('html_from_html.pdf', mode='wb') as binary_pdf:
                binary_pdf.write(file_bytes)
            break
        elif status == 'Waiting':
            continue
        elif status == 'Failed':
            raise Exception('Cannot render html')
        else:
            raise Exception('Invalid status')