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
;
danswordpress.local/wp-json/wp/v2/media";
est un type erroné ici ou est-ce aussi dans votre vrai code?source_url
devriez être à l'intérieur de l'post
objet.Réponses:
DONC! C'est marrant!
Gardez à l'esprit que la WP-API est toujours très bien en cours.
Contenu-Disposition
J'ai trouvé un problème signalé dans la file d' attente de problèmes WP-API concernant Content-Disposition. Il s'agit d'un en-tête obligatoire pour la publication de nouveaux contenus multimédias et il existe des exigences très, très strictes lorsqu'il s'agit de les fournir au format approprié.
Le but de créer un point de terminaison multimédia
Tout d'abord, prenons un peu de recul. L'API suppose qu'à ce stade, vous avez déjà téléchargé un nouveau fichier dans le bon répertoire. Ce point de terminaison crée le contenu multimédia dans la base de données qui fait référence à ce fichier.
La solution
Vous devez spécifier le nom de fichier du fichier multimédia à associer à votre nouveau contenu. Il ne peut pas s'agir d'une URL distante. Comme vous pouvez le voir dans la documentation v2 ,
source_url
etlink
sont en lecture seule. Tout ce que vous avez à faire pour soumettre avec succès votre nouveau contenu est d'ajouter ce qui suit à votre en-tête:Comme mentionné dans le ticket, vous ne pouvez pas ajouter de devis ni 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 changent tout autour.
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 au Dr Deo dans les commentaires.
Pour la petite histoire, j'ai ri de joie étourdie quand j'ai finalement compris celui-ci ... effrayé l'enfer de ma femme.
la source
Content-Disposition
!Sorry, this file type is not permitted for security reasons
curl --request POST --url http://localhost/kayinjaproject/wp-json/wp/v2/media --header "cache-control: no-cache" --header "content-disposition: attachment; filename=tmp.png" --header "authorization: Basic cm9vdDppYW1haGVybw==" --header "content-type: image/png" --data-binary "@c:/gnu/png.png" --location
mais si vous omettez lepng
nom de fichiertmp.png
, vous obtenezerror sorry, this file type is not permitted for security reasons
Par souci de "recoupement", voir ma réponse connexe ici sur StackOverflow concernant le téléchargement de médias et l'utilisation de ce média comme "média en vedette" pour une publication.
la source