web-dev-qa-db-fra.com

Ajouter un média avec WP-Rest-API v2

J'ai besoin de votre aide pour télécharger une image multimédia dans mon blog wordpress via l'authentification Wp-rest-api v2 et Oauth2.

Je n'ai pas trouvé dans la documentation de l'API REST le moyen d'envoyer mes données d'image (nom du champ, mode d'envoi ...?).

require('OAuth2/Client.php');
require('OAuth2/GrantType/IGrantType.php');
require('OAuth2/GrantType/AuthorizationCode.php');

const CLIENT_ID     = 'XXX';
const CLIENT_SECRET = 'XX';

const REDIRECT_URI           = 'http://127.0.0.1/test_api_wp/test.php';

const AUTHORIZATION_ENDPOINT = 'http://wordpress.local/oauth/authorize';
const TOKEN_ENDPOINT         = 'http://wordpress.local/oauth/token';

$client = new OAuth2\Client(CLIENT_ID, CLIENT_SECRET);

if (!isset($_GET['code']))
{
    $auth_url = $client->getAuthenticationUrl(AUTHORIZATION_ENDPOINT, REDIRECT_URI);
    header('Location: ' . $auth_url);
    die('Redirect');
}
else
{
    $params = array('code' => $_GET['code'], 'redirect_uri' => REDIRECT_URI);
    $response = $client->getAccessToken(TOKEN_ENDPOINT, 'authorization_code', $params); //authorization_code
    $token = $response['result']['access_token'];
    $client->setAccessToken($token);
    $client->setAccessTokenType(OAuth2\Client::ACCESS_TOKEN_BEARER);

}

$values = array(
    "date" => "2015-11-26 10:00:00",
    "date_gmt" => "2015-11-26 09:00:00",
    "modified" => "2015-11-26 10:00:00",
    "modified_gmt" => "2015-11-26 09:00:00",
    "status" => "future",
    "title" => "Titre media",       
    "description" => "description media",
    "media_type" => "image",
    "source_url" => "https://www.base64-image.de/build/img/mr-base64-482fa1f767.png"
);

$data = $client->fetch("wordpress.local/wp-json/wp/v2/media", $values, "POST");
echo "<pre>";print_r($data);echo "</pre>";

La réponse :

Array
(
    [result] => Array
        (
            [code] => rest_upload_no_data
            [message] => No data supplied
            [data] => Array
                (
                    [status] => 400
                )

        )

    [code] => 400
    [content_type] => application/json; charset=UTF-8
)

Une idée? Merci beaucoup

10
kain34440

ALORS! C'est marrant!.

Gardez à l'esprit que l'API WP est toujours un travail en cours.

Contenu-Disposition

J'ai trouvé un problème signalé dans la file d'attente des problèmes de WP-API à propos de Content-Disposition. Il s’agit d’un en-tête obligatoire pour l’affichage de nouveaux contenus multimédias. Il existe des exigences très très strictes s’agissant de les fournir au format approprié.

Objectif de la création d'un point de terminaison du média

Premièrement, prenons un pas en arrière. L'API suppose à ce stade que vous avez déjà téléchargé un nouveau fichier dans le bon répertoire. Ce noeud final crée le contenu multimédia dans la base de données qui référence ce fichier.

La solution

Vous devez spécifier le nom du fichier multimédia à associer à votre nouveau contenu. Cela ne peut pas être une URL distante. Comme vous pouvez le constater dans la documentation v2 , source_url et link sont en lecture seule. Pour soumettre correctement votre nouveau contenu, il vous suffit d'ajouter les éléments suivants à votre en-tête:

'Content-Disposition' => 'filename=name-of-file.jpg',

Comme indiqué dans le ticket, vous ne pouvez pas ajouter de devis ou spécifier la méthode que vous utilisez pour envoyer le fichier. Il doit être dans le format ci-dessus. Du moins, c'est le cas jusqu'à ce qu'ils le changent complètement.

Assurez-vous que le type de fichier est l'un des types de fichiers acceptés et que vous incluez l'extension du fichier est incluse dans la demande. Merci à Dr Deo dans les commentaires.

Pour mémoire, j'ai ri de joie lorsque j'ai enfin compris que celui-ci était… effrayé par ma femme.

8
MikeNGarrett

Pour plus de "références croisées", consultez mon réponse associée ici sur StackOverflow sur le téléchargement de média et l'utilisation de ce média en tant que "média vedette" pour un article.

2
pHiL