Tambahkan media dengan WP-Rest-API v2

10

Saya butuh bantuan Anda untuk mengunggah gambar media di blog wordpress saya melalui otentikasi Wp-rest-api v2 dan Oauth2.

Saya tidak menemukan dalam dokumentasi REST API cara mengirim data gambar saya (nama bidang, mode pengiriman ...?).

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

Responnya :

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
)

Ada ide? Terima kasih banyak

kain34440
sumber
Saya telah menambahkan kode dari komentar Anda ke pertanyaan. Ingatlah bahwa Anda dapat mengedit pertanyaan kapan saja untuk menambahkan lebih banyak informasi atau membuatnya lebih jelas.
cybmeta
Ekstra ;dalam wordpress.local/wp-json/wp/v2/media";adalah salah ketik di sini atau itu adalah dalam kode nyata Anda juga?
cybmeta
Menurut dokumen , WP REST API v2 memerlukan plugin OAuth ini . Saya tidak tahu apakah perpustakaan yang Anda gunakan (OAuth2 / Client.php) kompatibel dengan WP REST API atau tidak, tetapi mungkin tidak.
cybmeta
Terima kasih banyak! Ekstra ->; tidak ada dalam kode asli saya! Saya menggunakan plugin OAuth resmi untuk mengotentikasi saya, file OAuth2.Client.php hanya pustaka untuk membuat permintaan curl dengan mudah
kain34440
Ada bagian Buat Media di (dokumentasi) [ v2.wp-api.org/reference/media/] . Saya pikir Anda source_urlharus berada di dalam postobjek.
ville6000

Jawaban:

8

BEGITU! Ini menyenangkan.

Perlu diingat WP-API masih sangat, sangat banyak dalam proses.

Konten-Disposisi

Saya menemukan masalah yang dilaporkan pada antrian masalah WP-API tentang Content-Disposition. Ini adalah tajuk yang diperlukan untuk memposting konten media baru dan ada beberapa persyaratan yang sangat, sangat ketat ketika harus menyediakan ini dalam format yang tepat.

Tujuan Membuat Media Endpoint

Pertama, Mari kita mundur selangkah. API mengasumsikan pada titik ini Anda telah mengunggah file baru ke direktori yang benar. Titik akhir ini membuat konten media dalam database yang mereferensikan file ini.

Solusinya

Anda harus menentukan nama file file media untuk dikaitkan dengan konten baru Anda. Ini bukan url jarak jauh. Seperti yang Anda lihat dari dokumentasi v2 , source_urldan linkhanya-baca. Yang harus Anda lakukan agar berhasil mengirimkan konten baru adalah menambahkan yang berikut ke tajuk Anda:

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

Seperti yang disebutkan dalam tiket, Anda tidak dapat menambahkan kutipan atau menentukan metode yang Anda gunakan untuk mengirim file. Itu harus dalam format di atas. Setidaknya, inilah masalahnya sampai mereka mengubahnya di sekitar.

Pastikan jenis file adalah salah satu jenis file yang diterima dan Anda termasuk ekstensi file yang termasuk dalam permintaan. Terima kasih kepada Dr Deo dalam komentarnya.

Sebagai catatan, saya tertawa kegirangan ketika akhirnya saya menemukan yang ini ... menakuti istri saya.

MikeNGarrett
sumber
1
Terima kasih untuk petunjuknya Content-Disposition!
pHiL
Saya pikir jawaban ini hanya isyarat, dan bukan solusi lengkap. Saya mengikuti saran ini dan saya mendapatkan kesalahanSorry, this file type is not permitted for security reasons
Brethlosze
@Brethlosze Kedengarannya seperti masalah yang tidak terkait. WordPress memblokir jenis media tertentu dalam proses unggah normal.
MikeNGarrett
3
@Brethlosze ekstensi file harus menjadi salah satu jenis yang diterima. Misalnya ini berfungsi 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" --locationtetapi jika Anda menghilangkan pngdari nama file tmp.png, Anda dapaterror sorry, this file type is not permitted for security reasons
Dr Deo
2

Demi "referensi silang", lihat jawaban terkait saya di sini di StackOverflow tentang unggahan media dan menggunakan media itu sebagai "media unggulan" untuk pos.

pHl
sumber