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
)

कोई उपाय? बहुत बहुत धन्यवाद


मैंने आपकी टिप्पणी से प्रश्न में कोडित जोड़ा है। याद रखें कि आप अधिक जानकारी जोड़ने या इसे और अधिक स्पष्ट करने के लिए किसी भी समय प्रश्न को संपादित कर सकते हैं।
साइबरमेट

अतिरिक्त ;में wordpress.local/wp-json/wp/v2/media";एक गलत टाइप यहाँ है या यह अपने वास्तविक कोड में भी है?
साइबरमेट

डॉक्स के अनुसार , WP REST API v2 को इस OAuth प्लगइन की आवश्यकता है । मुझे नहीं पता कि आप जिस पुस्तकालय (OAuth2 / Client.php) का उपयोग कर रहे हैं वह WP REST API के साथ संगत है या नहीं, लेकिन यह शायद नहीं है।
साइबरमेट

बहुत बहुत धन्यवाद! अतिरिक्त ->; मेरे वास्तविक कोड में मौजूद नहीं है! मैं आधिकारिक OAuth प्लगइन का उपयोग करता हूं, मुझे प्रमाणित करने के लिए, OAuth2.Client.php केवल आसानी से कर्ल अनुरोध करने के लिए पुस्तकालय है
kain34440

(प्रलेखन) [ v2.wp-api.org/reference/media/] में एक मीडिया सेक्शन बनाएं । मुझे लगता है कि आपका वस्तु के source_urlअंदर होना चाहिए post
ville6000 11

जवाबों:


8

इसलिए! यह मजेदार है।

ध्यान रखें कि WP-API अभी भी बहुत, बहुत काम की प्रगति है।

सामग्री-विन्यास

मुझे सामग्री- विवाद के बारे में WP-API समस्या कतार में एक समस्या मिली । नई मीडिया सामग्री पोस्ट करने के लिए यह एक आवश्यक शीर्षलेख है और उचित प्रारूप में इसे प्रदान करने के लिए कुछ बहुत, बहुत सख्त आवश्यकताएं हैं।

मीडिया एंडपॉइंट बनाएँ का उद्देश्य

सबसे पहले, चलो एक कदम वापस लेते हैं। एपीआई इस बिंदु पर मानता है कि आपने पहले ही एक नई फ़ाइल को सही निर्देशिका में अपलोड कर दिया है। यह समापन बिंदु डेटाबेस में मीडिया सामग्री बना रहा है जो इस फ़ाइल को संदर्भित करता है।

समाधान

आपको अपनी नई सामग्री से जुड़ने के लिए मीडिया फ़ाइल का फ़ाइल नाम निर्दिष्ट करना होगा। यह दूरस्थ url नहीं हो सकता है। जैसा कि आप v2 प्रलेखन से देख सकते हैं , source_urlऔर linkकेवल-पढ़ने के लिए हैं। आपको अपनी नई सामग्री को सफलतापूर्वक सबमिट करने के लिए अपने हेडर में निम्नलिखित जोड़ना होगा:

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

जैसा कि टिकट में उल्लेख किया गया है, आप उद्धरण नहीं जोड़ सकते या फ़ाइल भेजने के लिए आपके द्वारा उपयोग की जाने वाली विधि निर्दिष्ट नहीं कर सकते। यह ऊपर प्रारूप में होना चाहिए। कम से कम, यह मामला है जब तक कि वे इसे चारों ओर नहीं बदलते।

सुनिश्चित करें कि फ़ाइल प्रकार स्वीकृत फ़ाइल प्रकारों में से एक है और आप फ़ाइल के विस्तार सहित अनुरोध में शामिल हैं। टिप्पणियों में डॉ। देव का धन्यवाद ।

रिकॉर्ड के लिए, मैं अंत में इस बात का पता लगाते हुए हंसी खुशी के साथ हंसी ... मेरी पत्नी को नरक से बाहर निकाल दिया।


1
के साथ संकेत के लिए बड़ा thx Content-Disposition!
पीएचआईएल जूल

मुझे लगता है कि यह जवाब केवल एक संकेत है, और एक पूर्ण समाधान नहीं है। मैं इस सलाह का पालन कर रहा हूं और मैं त्रुटि प्राप्त करता Sorry, this file type is not permitted for security reasons
हूं

@Brethlosze यह एक असंबंधित मुद्दे की तरह लगता है। सामान्य अपलोड प्रक्रिया में वर्डप्रेस कुछ प्रकार के मीडिया को ब्लॉक करता है।
माइकनेजरट

3
@Brethlosze फ़ाइल एक्सटेंशन को स्वीकृत प्रकारों में से एक होना चाहिए। उदाहरण के लिए यह काम करता है 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लेकिन अगर आप pngफ़ाइल नाम से चूक जाते हैं tmp.png, तो आपको मिलता हैerror sorry, this file type is not permitted for security reasons
डॉ। देव

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.