web-dev-qa-db-ja.com

WP-Rest-API v2でメディアを追加する

Wp-rest-api v2およびOauth2認証を介して私のワードプレスのブログにメディア画像をアップロードするにはあなたの助けが必要です。

REST AP​​Iドキュメントで、画像データを送信する方法(フィールド名、送信モード...など)が見つかりませんでした。

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>";

応答:

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
)

何か案が?どうもありがとう

10
kain34440

そう!これは楽しいです。

WP-APIはまだ非常に非常に多くが進行中の作業です。

コンテンツ処理

WP-API issue queueで報告された問題 Content-Dispositionについてこれは新しいメディアコンテンツを投稿するための必須ヘッダーであり、これを適切な形式で提供することに関しては、非常に厳密な要件がいくつかあります。

メディアエンドポイント作成の目的

まず、一歩後退しましょう。この時点で、APIは新しいファイルを正しいディレクトリにアップロードしていると想定しています。このエンドポイントは、このファイルを参照するデータベースにメディアコンテンツを作成しています。

ソリューション

新しいコンテンツに関連付けるメディアファイルのファイル名を指定する必要があります。これをリモートURLにすることはできません。 v2のドキュメント からわかるように、source_urllinkは読み取り専用です。新しいコンテンツを正常に送信するために必要な作業は、ヘッダーに次の内容を追加することだけです。

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

チケットに記載されているように、引用符を追加したり、ファイルの送信に使用している方法を指定したりすることはできません。それは必ず上記の形式でなければなりません。少なくとも、彼らがそれを全面的に変更するまでそうです。

ファイルの種類が 承認済みのファイルの種類 のいずれかであることを確認してください。また、ファイルの拡張子が要求に含まれています。コメントの中で Dr Deo に感謝します。

記録のために、私がついにこれを考え出したとき、私は奇妙な喜びで笑った…私の妻から地獄を怖がらせた。

8
MikeNGarrett

"相互参照"のために、私の StackOverflow /へのメディアのアップロードと投稿のための "注目のメディア"としてのそのメディアの使用に関するこちらの回答を参照してください。

2
pHiL