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


10

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

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

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
)

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


あなたのコメントからコード化されたものを質問に追加しました。いつでも質問を編集して、情報を追加したり、より明確にすることができます。
cybmeta 2015年

余分;ではwordpress.local/wp-json/wp/v2/media";、ここでミスタイプであるか、それはあまりにも、あなたの実際のコードにありますか?
cybmeta 2015年

ドキュメントによると、WP REST API v2にはこのOAuthプラグインが必要です。使用しているライブラリ(OAuth2 / Client.php)がWP REST APIと互換性があるかどうかはわかりませんが、おそらくそうではありません。
cybmeta 2015年

どうもありがとう!追加->; 私の実際のコードには存在しません!私は公式のOAuthプラグインを使用して私を認証しています。ファイルOAuth2.Client.phpは、カールリクエストを簡単に作成するための唯一のライブラリです
kain34440

(ドキュメント)[ v2.wp-api.org/reference/media/]に Create a Mediaセクションがあります。私はあなたsource_urlpostオブジェクトの中にあるべきだと思います。
ville6000

回答:


8

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

WP-APIはまだ非常に進行中であることに注意してください。

コンテンツの処分

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

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

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

ソリューション

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

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

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

ファイルタイプが承認されたファイルタイプの 1つであり、ファイルの拡張子がリクエストに含まれていることを確認してください。コメントでDeo博士に感謝します。

ちなみに、私はついにこれを見つけたとき、私はめまいがするような喜びで笑いました...妻の地獄を怖がらせました。


1
とのヒントのための大きなTHX Content-Disposition
pHiL 2016

この答えは単なるヒントであり、完全な解決策ではないと思います。私はこのアドバイスに従い、エラーが発生しますSorry, this file type is not permitted for security reasons
Brethlosze

@Brethloszeそれは無関係な問題のように聞こえます。WordPressは、通常のアップロードプロセスで特定のタイプのメディアをブロックします。
MikeNGarrett

3
@Brethloszeファイル拡張子は、受け入れられるタイプの1つである必要があります。たとえば、これは機能します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" --locationpng、ファイル名からを省略するとtmp.png、次のようになりますerror sorry, this file type is not permitted for security reasons
Dr Deo

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.