Search code examples
phpvimeovimeo-api

Vimeo: how to use php official client to add a domain whitelist for a video?


I am using official Vimeo PHP client.

I can upload a video, and set privacy.embed to whitelist.

Then doc tells me:

To add a domain to the whitelist, send a PUT request to /videos/{video_id}/privacy/domains/{domain}.

I tried

$privacy_uri = $uri . "/privacy/domains/testdomain.tld";
$domain_add_response = $client->request($privacy_uri);

where - $uri is the /vimeo/<video_id> - $client is born from new Vimeo(CLIENT_ID, CLIENT_SECRET, VIMEO_TOKEN);

Problem

Printing the $domain_add_response I get a 405 error, probably because of Allow (see the following response dump)

Array
(
    [body] => 
    [status] => 405
    [headers] => Array
        (
            [Server] => nginx
            [Content-Type] => application/json
            [Allow] => PUT,DELETE,OPTIONS
            [X-Vimeo-DC] => ge
            [Accept-Ranges] => bytes
            [Via] => 1.1 varnish
            [Content-Length] => 0
            [Date] => Mon, 15 Apr 2019 08:30:47 GMT
            [Connection] => keep-alive
            [X-Served-By] => cache-bwi5125-BWI, cache-mxp19820-MXP
            [X-Cache] => MISS, MISS
            [X-Cache-Hits] => 0, 0
            [X-Timer] => S1555317047.232635,VS0,VE148
            [Vary] => Accept-Encoding
        )

)

I imagine I must set the PUT method in my request, but ... how ?


Solution

  • Solution found looking at api source code: https://github.com/vimeo/vimeo.php/blob/master/src/Vimeo/Vimeo.php#L88

    where the signature of request is

    public function request($url, $params = array(), $method = 'GET', $json_body = true, array $headers = array()): array
    

    I understand that I can fix the problem, simply passing an empty $params array and specifing PUT as request $method

    I changed this line

    $domain_add_response = $client->request($privacy_uri);
    

    Into this form

    $domain_add_response = $client->request($privacy_uri, [], 'PUT');
    

    And it works as expected