PHP curl POST для видеообогащения Watson - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь использовать PHP 7.2 для отправки новой работы в Watson Video Enrichment API.
Вот мой код:

//set some vars for all tasks
$apiUrl = 'https://api-dal.watsonmedia.ibm.com/video-enrichment/v2';
$apiKey =  'xxxxxxxx';

//vars for this task
$path = '/jobs';
$name = 'Test1';
$notification_url = 'https://example.com/notification.php';
$url = 'https://example.com/video.mp4';
$data = array(
    "name" => $name, 
    "notification_url" => $notification_url, 
    "preset" => "simple.custom-model",
    "upload" => array(
        "url" => $url
    )
);
$data_string = json_encode($data);

$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_URL, $apiUrl.$path );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string),
    'Authorization: APIKey '.$apiKey
));
$result = curl_exec($ch);
echo $result;

Но я не могу его получитьработать, даже с разными CURLOPT, вроде:

curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

Я продолжаю получать ответ: Bad Request.

Вот API документы .

Я неправильно настроил POST CURL?Мой массив данных $ неверен?Есть идеи как это исправить?

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Хорошо, я понял это.Спасибо @TheGentleman за указание пути.

Мой массив данных должен выглядеть так:

$data = array(
    "name" => $name, 
    "notification_url" => $notification_url, 
    "preset" => array(
        "simple.custom-model" => array(
            "video_url" => $url,
            "language" => "en-US"
        )
    ),
    "upload" => array(
        "url" => $url
    )
);
0 голосов
/ 10 июля 2019

Читая их документацию по API, похоже, что поле preset не имеет типа string. Скорее, он имеет схему, определенную здесь . Это похоже на то, как вы используете схему upload.

Вы должны изменить свой массив данных, чтобы он выглядел так:

$data = array(
    "name" => $name, 
    "notification_url" => $notification_url, 
    "preset" => array(
        "video_url" => "https://example.com/path/to/your/video"
    ),
    "upload" => array(
        "url" => $url
    )
);
...