代码之家  ›  专栏  ›  技术社区  ›  user6631314

使用PHP从api响应中提取视频数据[复制]

  •  0
  • user6631314  · 技术社区  · 10 月前

    我在PHP中使用下面的cURL作为API请求,以获得API提供商推荐的视频文件。这就是他们文件的范围。

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $payload_json);
    
    $response = curl_exec($curl); 
    

    当我将响应保存到文件中,然后在文本编辑器中查看它时,它看起来如下:

    HTTP/1.1 200 OK
    Date: Fri, 20 Dec 2024 21:23:34 GMT
    Content-Type: application/json; charset=UTF-8
    Content-Length: 3292160
    Connection: keep-alive
    Access-Control-Allow-Origin: *
    x-request-id: a1d0850f892cb9b4fc357a3532e81b91
    Server: cloudflare
    CF-RAY: 8f52b1b34f7f8ff9-BOS
    alt-svc: h3=":443"; ma=86400
    
    {"video":"AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAlpQhtZGF0AAACrwYF//+r3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlID - 2 megs more of characters that are probably the video"}
    

    ChatGPT建议使用字符串操作提取视频,例如搜索\r\n\r\n并删除所有内容,但我觉得一定有更干净的方法。

    我如何单独抓取视频并将其放入变量中。

    提前感谢您的建议

    1 回复  |  直到 10 月前
        1
  •  3
  •   Alex Howansky    10 月前

    告诉curl您不希望在响应中包含响应标头。您不需要这样做,因为不包括标头是默认行为,但您显然会得到它们。

    curl_setopt($curl, CURLOPT_HEADER, false);
    

    那么你的回答将是:

    {"video":"..."}
    

    然后,您可以使用 json_decode() :

    $data = json_decode($response, true);
    $video = $data['video'];
    

    您可能还想检查响应代码是否成功,这将使您的脚本类似于:

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $payload_json);
    curl_setopt($curl, CURLOPT_HEADER, false);
    $info = curl_getinfo($curl);
    $response = curl_exec($curl);
    curl_close($curl);
    if ($info['http_code'] != 200) {
        throw new Exception('Unexpected HTTP response code');
    }
    $data = json_decode($response, true);
    if (empty($data)) {
        throw new Exception('Erroneous or empty JSON packet.');
    }