ডাব্লুপি-রেস্ট-এপিআই ভি 2 সহ মিডিয়া যুক্ত করুন


10

আমার ওয়ার্ডপ্রেস ব্লগে ডাব্লুপি-রেস্ট-এপিআই ভি 2 এবং Oauth2 প্রমাণীকরণের মাধ্যমে একটি মিডিয়া চিত্র আপলোড করতে আমার আপনার সহায়তা দরকার।

আমি আমার ইমেজ ডেটা (ক্ষেত্রের নাম, প্রেরণ মোড ...?) প্রেরণ করার জন্য আরআরপিআইপি ডকুমেন্টেশনে খুঁজে পাইনি।

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";একটি mistype এখানে অথবা আপনার আসল কোডে করার ইচ্ছে?
সাইবমেটা

ডক্স অনুসারে , WP REST API v2 এর জন্য এই OAuth প্লাগইন প্রয়োজন । আমি জানি না যে আপনি যে লাইব্রেরিটি ব্যবহার করছেন (OAuth2 / Client.php) ডাব্লুপি REST এপিআই এর সাথে সামঞ্জস্যপূর্ণ কিনা, তবে সম্ভবত তা তা নয়।
সাইবমেটা

অনেক অনেক ধন্যবাদ! অতিরিক্ত ->; আমার বাস্তব কোড উপস্থিত নেই! আমি আমাকে অনুমোদন করতে অফিসিয়াল OAuth প্লাগইন ব্যবহার করি, ফাইলগুলি OAuth2.Client.php কেবল কার্ল অনুরোধগুলি সহজেই করতে লাইব্রেরি হয়
kain34440

(ডকুমেন্টেশন) এ একটি মিডিয়া বিভাগ তৈরি করুন [ v2.wp-api.org/references/media/] । আমি মনে করি আপনার source_urlজিনিস ভিতরে থাকা উচিত post
ville6000

উত্তর:


8

তাই! এটা মজা.

মনে রাখবেন ডাব্লুপি-এপিআই এখনও খুব, একটি কার্য-অগ্রগতি।

সামগ্রী-স্বভাব

আমি ডাব্লুপি-এপিআই-এর ইস্যুতে সারিবদ্ধভাবে বিষয়বস্তু-বিশৃঙ্খলা সম্পর্কিত প্রতিবেদনটিতে একটি প্রতিবেদন পেয়েছি । এটি নতুন মিডিয়া সামগ্রী পোস্ট করার জন্য একটি প্রয়োজনীয় শিরোনাম এবং এটি যথাযথ ফর্ম্যাটে সরবরাহ করার ক্ষেত্রে কিছু খুব, খুব কঠোর প্রয়োজনীয়তা রয়েছে।

মিডিয়া এন্ডপয়েন্টটি তৈরির উদ্দেশ্য

প্রথমে একটি পদক্ষেপ পিছনে নেওয়া যাক। এপিআই এই মুহূর্তে ধরে নিয়েছে আপনি ইতিমধ্যে সঠিক ডিরেক্টরিতে একটি নতুন ফাইল আপলোড করেছেন। এই শেষ পয়েন্টটি ডাটাবেজে মিডিয়া সামগ্রী তৈরি করছে যা এই ফাইলটিকে উল্লেখ করে।

সমাধান

আপনার নতুন সামগ্রীতে সংযুক্ত করতে আপনাকে মিডিয়া ফাইলের ফাইলের নামটি নির্দিষ্ট করতে হবে। এটি কোনও দূরবর্তী url হতে পারে না। আপনার কাছ থেকে দেখতে পারেন v2 ডকুমেন্টেশন , source_urlএবং linkশুধুমাত্র পাঠযোগ্য হয়। সফলভাবে আপনার নতুন সামগ্রীটি জমা দেওয়ার জন্য আপনাকে যা করতে হবে তা হ'ল নিম্নলিখিতটি আপনার শিরোনামে যুক্ত করুন:

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

টিকিটে উল্লিখিত হিসাবে, আপনি ফাইলটি প্রেরণের জন্য কোট যোগ করতে বা পদ্ধতিটি নির্দিষ্ট করতে পারবেন না। এটি অবশ্যই উপরের ফর্ম্যাটে থাকতে হবে। কমপক্ষে, যতক্ষণ না তারা এটিকে চারদিকে পরিবর্তন করে change

নিশ্চিত করুন যে ফাইল টাইপটি গ্রহণযোগ্য ফাইলগুলির মধ্যে একটি এবং আপনি ফাইলটির প্রসারকে অনুরোধের অন্তর্ভুক্ত করছেন। ধন্যবাদ ড দেও মন্তব্য।

রেকর্ডটির জন্য, আমি অবাক হয়ে হাসি দিয়েছিলাম যখন অবশেষে আমি এটিটি খুঁজে পেলাম ... আমার স্ত্রীর কাছ থেকে ভয় পেয়েছিলাম।


1
ইঙ্গিতটির জন্য বিগ থেক্স Content-Disposition!
পিএইচআইএল

আমি মনে করি এই উত্তরটি কেবল একটি ইঙ্গিত, এবং একটি সম্পূর্ণ সমাধান নয়। আমি এই পরামর্শটি অনুসরণ করছি এবং আমি ত্রুটিটি Sorry, this file type is not permitted for security reasons
পেয়েছি

@ ব্র্যাথলজ এটি একটি সম্পর্কহীন সমস্যার মতো মনে হচ্ছে। ওয়ার্ডপ্রেস সাধারণ আপলোড প্রক্রিয়ায় নির্দিষ্ট ধরণের মিডিয়াকে অবরুদ্ধ করে।
মাইকএনগারেট

3
@ ব্রথ্লোজে ফাইল এক্সটেনশনটি গ্রহণযোগ্য ধরণের একটি হতে হবে। উদাহরণস্বরূপ এটি কাজ করে 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
ড। দেও

2

"ক্রস-রেফারেন্সিং" এর স্বার্থে, মিডিয়া আপলোড সম্পর্কে এবং পোস্টের জন্য সেই মিডিয়াটিকে "বৈশিষ্ট্যযুক্ত মিডিয়া" হিসাবে ব্যবহার করার বিষয়ে স্ট্যাক ওভারফ্লোতে আমার সম্পর্কিত উত্তরটি দেখুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.