WP-Rest-API v2 ile ortam ekleyin


10

Wp-rest-api v2 ve Oauth2 kimlik doğrulaması aracılığıyla wordpress bloguma bir medya görüntüsü yüklemek için yardımınıza ihtiyacım var.

REST API belgelerinde görüntü verilerimi (alan adı, gönderme modu ...?) Gönderme yolunu bulamadım.

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

Yanıt:

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
)

Herhangi bir fikir? Çok teşekkürler


Kodunuzu yorumunuzdan soruya ekledim. Daha fazla bilgi eklemek veya daha açık hale getirmek için soruyu istediğiniz zaman düzenleyebileceğinizi unutmayın.
cybmeta

Ekstra ;içinde wordpress.local/wp-json/wp/v2/media";burada yanlış yazmanız ya da çok gerçek kod nedir?
cybmeta

Dokümanlara göre , WP REST API v2 bu OAuth eklentisini gerektirir . Kullandığınız kitaplığın (OAuth2 / Client.php) WP REST API ile uyumlu olup olmadığını bilmiyorum, ama muhtemelen değil.
cybmeta

Çok teşekkürler! gerçek kodumda yok! Beni doğrulamak için resmi OAuth eklentisini kullanıyorum, dosyalar OAuth2.Client.php kolayca kıvırmak talepleri yapmak için sadece kütüphane
kain34440 26:15

(Belgeler) [ v2.wp-api.org/reference/media/] ' da Medya Oluştur bölümü vardır . Bence senin nesnenin source_urliçinde olmalısın post.
ville6000

Yanıtlar:


8

YANİ! Bu eğlenceli.

WP-API'nin hala çok, çok devam eden bir çalışma olduğunu unutmayın.

İçerik Eğilimi

WP-API sorun kuyruğunda Content-Disposition ile ilgili bir sorun buldum . Bu, yeni medya içeriği yayınlamak için gerekli bir başlıktır ve bunu uygun biçimde sağlama söz konusu olduğunda bazı çok, çok katı gereksinimler vardır.

Medya Bitiş Noktası Oluşturmanın Amacı

İlk olarak, bir adım geriye gidelim. API, bu noktada doğru dizine zaten yeni bir dosya yüklediğinizi varsayar. Bu uç nokta, veritabanında bu dosyaya başvuran medya içeriğini oluşturur.

Çözüm

Yeni içeriğinizle ilişkilendirilecek medya dosyasının dosya adını belirtmeniz gerekir. Bu bir uzak url olamaz. Eğer görebileceğiniz gibi v2 belgeleri , source_urlve linksalt okunur bulunmaktadır. Yeni içeriğinizi başarıyla göndermek için yapmanız gereken tek şey başlığınıza aşağıdakileri eklemek:

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

Bilette belirtildiği gibi, teklif ekleyemez veya dosyayı göndermek için kullandığınız yöntemi belirtemezsiniz. Bu gerekir yukarıdaki biçiminde olması. En azından, her şeyi değiştirene kadar durum böyle.

Dosya türünün kabul edilen dosya türlerinden biri olduğundan ve dosyanın uzantısını isteğe dahil ettiğinizden emin olun . Yorumlarda Dr Deo'ya teşekkürler .

Kayıt için, nihayet bunu çözdüğümde sersem sevinçle güldüm ... karımdan cehennemden korktum.


1
İle ipucu için büyük thx Content-Disposition!
pHiL

Bence bu cevap sadece bir ipucu ve tam bir çözüm değil. Bu tavsiyeye Sorry, this file type is not permitted for security reasons
uyuyorum

@Brethlosze İlgisiz bir konu gibi geliyor. WordPress, normal yükleme işleminde belirli ortam türlerini engeller.
MikeNGarrett

3
@Brethlosze dosya uzantısının kabul edilen türlerden biri olması gerekir. Örneğin, bu işe 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" --locationyarar ama pngdosya adından çıkarırsanız tmp.png,error sorry, this file type is not permitted for security reasons
Deo

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.