iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
生成式 AI

用AI寫程式也是要點本事的系列 第 22

外部API果然沒這麼簡單順利....

  • 分享至 

  • xImage
  •  

不行不行!此路暫時不通!

簡單來說,AI提供的CloudConvertAPI的使用方式是過時的!
這裡還有一個新版,但結果一樣不可行!


import 'dart:convert';
import 'dart:typed_data';
import 'package:http/http.dart' as http;

class WaveConvert {
  String apiKey = 'your_cloudconvert_api_key';

  Future<void> convertAudioToWave(Uint8List inputData) async {
    // Step 1: Create an upload task
    final createTaskResponse = await http.post(
      Uri.parse('https://api.cloudconvert.com/v2/import/upload'),
      headers: {
        'Authorization': 'Bearer $apiKey',
        'Content-Type': 'application/json',
      },
      body: jsonEncode({
        'operation': 'import/upload',
      }),
    );

    if (createTaskResponse.statusCode != 200) {
      throw Exception('Failed to create upload task: ${createTaskResponse.body}');
    }

    final createTaskResponseBody = jsonDecode(createTaskResponse.body);
    final uploadUrl = createTaskResponseBody['result']['url'];
    final taskId = createTaskResponseBody['id'];

    // Step 2: Upload your file to CloudConvert
    final uploadResponse = await http.put(
      Uri.parse(uploadUrl),
      headers: {
        'Content-Type': 'application/octet-stream',
      },
      body: inputData,
    );

    if (uploadResponse.statusCode != 200) {
      throw Exception('Failed to upload file: ${uploadResponse.body}');
    }

    // Step 3: Create a convert task and reference your uploaded file
    final convertResponse = await http.post(
      Uri.parse('https://api.cloudconvert.com/v2/convert'),
      headers: {
        'Authorization': 'Bearer $apiKey',
        'Content-Type': 'application/json',
      },
      body: jsonEncode({
        'input': taskId,
        'output_format': 'wav',
        'engine': 'ffmpeg',
      }),
    );

    if (convertResponse.statusCode != 200) {
      throw Exception('Failed to convert audio file: ${convertResponse.body}');
    }
  }
}

簡單來說,它的服務不是一次到位,而是要多次使用多種服務,最後才能順利取到轉檔。

1.取得一組「任務」編號碼。
2.用「任務」編號碼上傳檔案。
3.用「任務」編號碼取回檔案處理結果。

這部分...(我偷跑了,跑去用人力肉眼看官方的API說明,)似乎概念上是正確的,但API的使用方式卻不對!

新產生Key時,忘了開啟task.read和task.write的權限,(回去重新生產一組有全線的Key。)
「uploadResponse.statusCode」不只能接受200,同時也要能接受201。(這地方有點頭疼啊!試了半天,都抓不到讓AI按照我的期望去修改程式的辦法。)
但即使這樣,依然不能順利獲得回傳。

一天又這樣過去了!
(習慣就好,寫程式就是這樣。)
(所以這年頭很多公司討厭「研發」,都會希望工程師能夠帶來現成、保證百分之百立刻成功的各種知識經驗,然後投入專案中。)


上一篇
API是什麼?
下一篇
原來錄音功能可以指定「產生的資料類型」
系列文
用AI寫程式也是要點本事的30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言