في هذا البرنامج التعليمي ، سنغطي كيفية تنفيذ نهج غير متزامن لتحويل الصور. تحتاج فقط إلى إرسال صورة المصدر إلى SubmitWebPConversionTask أو أي طرق أخرى لواجهة برمجة تطبيقات الإرسال مثل SubmitBmpConversionTask، SubmitDicomConversionTask وما إلى ذلك لتلقي معرف المهمة كاستجابة.

بعد تلقي معرف المهمة ، تحتاج إلى التحقق من حالة المهمة عن طريق الاتصال بطريقة GetConversionTaskStatus. تحتاج إلى استدعاء نفس الطريقة بعد تأخير بضع ثوان طالما أن حالة المهمة تساوي “Waiting”. بمجرد تلقي “Completed” من طريقة GetConversionTaskStatus ، يمكنك الاتصال بطريقة DownloadResult لتنزيل الصورة النهائية. يمكنك استخدام تطبيق Visual Basic أدناه.

 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
Imports System
Imports System.IO
Imports System.Net.Http

Module Program
    Async Function SubmitWebPConversionTask(filePathToConvert As String, rapidApiKey As String) As Task(Of String)
        Using httpClient As New HttpClient()
            Using form As New MultipartFormDataContent()

                form.Headers.Add("X-RapidAPI-Key", rapidApiKey)
                form.Add(New StringContent("true"), "lossy")
                Dim fileBytes = Await File.ReadAllBytesAsync(filePathToConvert)
                Dim fileName = Path.GetFileName(filePathToConvert)
                form.Add(New ByteArrayContent(fileBytes, 0, fileBytes.Length), "file", fileName)

                Using response = Await httpClient.PostAsync("https://image-converter4.p.rapidapi.com/submitWebPConversionTask", form)

                    response.EnsureSuccessStatusCode()
                    Return Await response.Content.ReadAsStringAsync()
                End Using
            End Using
        End Using
    End Function
    Async Function GetConversionTaskStatus(taskId As String, rapidApiKey As String) As Task(Of String)
        Using httpClient As New HttpClient()
            httpClient.DefaultRequestHeaders.Add("X-RapidAPI-Key", rapidApiKey)
            Using response = Await httpClient.GetAsync($"https://image-converter4.p.rapidapi.com/getConversionTaskStatus?taskId={taskId}")

                response.EnsureSuccessStatusCode()
                Return Await response.Content.ReadAsStringAsync()
            End Using
        End Using
    End Function
    Async Function DownloadResult(taskId As String, rapidApiKey As String) As Task(Of Byte())
        Using httpClient As New HttpClient()
            httpClient.DefaultRequestHeaders.Add("X-RapidAPI-Key", rapidApiKey)
            Using response = Await httpClient.GetAsync($"https://image-converter4.p.rapidapi.com/downloadResult?taskId={taskId}")

                response.EnsureSuccessStatusCode()
                Return Await response.Content.ReadAsByteArrayAsync()
            End Using
        End Using
    End Function
    Public Async Function ConvertToWebPAsync() As Task
        Dim rapidApiKey = "<YOUR RAPIDAPI KEY HERE>"
        Dim filePathToConvert = "<SOURCE IMAGE FILE TO CONVERT>"
        Dim taskId = Await SubmitWebPConversionTask(filePathToConvert, rapidApiKey)
        Dim retryCount = 0
        Do While (retryCount < 100)
            retryCount += 1
            Await Task.Delay(5000)
            Dim status = Await GetConversionTaskStatus(taskId, rapidApiKey)
            If (status = "Completed") Then
                Dim fileBytes = Await DownloadResult(taskId, rapidApiKey)
                Await File.WriteAllBytesAsync("final_image.webp", fileBytes)
                Exit Do
            ElseIf (status = "Waiting") Then
                Continue Do
            ElseIf (status = "Failed") Then
                Throw New Exception("Cannot convert image")
            Else
                Throw New Exception("Invalid status")
            End If
        Loop
    End Function
    Sub Main(args As String())
        ConvertToWebPAsync().Wait()
    End Sub
End Module