استفاده از WordPress JSON API با Java
یکی از کارهایی که این روزها اکثر دارندگان سایت برای سایتشان انجام می دهند درست کردن اپلیکیشن موبایل است. اپلیکیشنی که محتوای سایت را سریع و متناسب با اندازه ی دستگاه های موبایل به کاربر نشان دهد و کاربر بتواند محتوای سایت را بدون کم و کاست و بدون استفاده از یک لپ تاپ یا کامپیوتر بخواند. اگر سایت شما با وردپرس نوشته شده باشد و بخواهید برای سایتتان یک اپ اندروید بسازید، مهم ترین و پایهای ترین کاری که این اپ باید بکند نشان دادن پست های منتشر شده روی سایت، کامنت گذاشتن زیر هر پست و اگر پست ها، قابلیت لایک شدن هم داشته باشد، لایک کردن پست ها است. پس برای وصل شدن به وردپرس به یک کتابخانه در جاوا نیاز دارید.
اولین تجربهی کاری من در کار کردن با وردپرس همین یک ماه پیش بود که استارت ساختن اپلیکیشن موبایل تحت پلتفرم اندروید برای سایت بردوک را زدم. تا چند روز اول، تحقیقاتم روی وصل شدن به وردپرس و دریافت اطلاعات پست ها بود و اینکه از چه کتابخانه ای برای این کار استفاده کنم که هم سرعت پردازش داده های بالایی داشته باشد و هم بتواند از نسخه های قدیمی اندروید پشتیبانی کند.
بعد از چندین جستجو در گوگل و سایت رسمی وردپرس کتابخانهی Jwordpress را برای کار انتخاب کردم. قابلیت Writability بالای این کتابخانه و منظم شدن کدهای من، خیلی مرا به استفاده از این کتابخانه ترغیب کرد. انگار در حال کد زدن داشتم با یک انسان صحبت می کردم! تصور کنید تنها کاری که باید می کردم این بود:
String username = args[۰];
String password = args[۱];
String xmlRpcUrl = args[۲];
wordpress wp = new wordpress(username, password, xmlRpcUrl);
List recentposts = wp.getRecentPosts(۱۰);
اما بعد از کمی کار کردن با این کتابخانه متوجه شدم که محدودیت های زیادی دارد. اول از همه شما نیاز به یک اکانت با دسترسی ادمین دارید. نیاز نیست که کاربر این اکانت را داشته باشد، فقط کافیست از این اکانت برای وصل شدن به سایتتان و دریافت پست ها استفاده کنید.
محدودیت دیگری که این کتابخانه دارد این است که شما با داشتن شناسه ی یک پست قادر نیستید آن پست را از سایت بگیرید. به زبان خودمان متد getPost(ID) وجود ندارد! البته طبیعی است چون این کتابخانه هنوز عمر زیادی ندارد و مسلما خیلی از قابلیت ها هنوز به این کتابخانه اضافه نشده است. در سایت وردپرس اسم JSON را دیده بودم و بعد کمی جستجو فهمیدم این پلاگین وردپرس بسیار قدرتمند است و امکانات زیادی در اختیار برنامه نویسان قرار می دهد.
اساس کار این پلاگین، رشته است. یعنی تمام اطلاعات را در قالب یک رشته به برنامه ی شما می دهد و شما باید آن رشته را تفسیر کنید. خوشبختانه تمام زبان های برنامه نویسی معروف امروز، یک کتابخانه برای کار با JSON را دارند و کار شما بسیار راحت است. از طرفی خود پلاگین JSON API با زبان php نوشته شده و می توان به راحتی آن را تغییر داد و بنا به نیازتان، قابلیت هایی به این پلاگین اضافه کنید.
از دیگر مزیت هایی که JSON API دارد این است که شما برای وصل شدن به این پلاگین نیاز به اکانتی در وردپرس سایتتان ندارید و منطقی هم هست، زیرا کسی که سایت شما را باز می کند بدون داشتن حساب کاربری می تواند سایت را ببیند! همچنین درخواست ها می توانند هم به صورت GET باشند و هم POST.
به راحتی با داشتن کمی اطلاعات راجع به php می توانید متدهای مورد نیازتان را به این پلاگین اضافه کنید و از آنها استفاده کنید.
جاوا ، یک کتابخانه برای کار با JSON دارد. کار با این کتابخانه بسیار ساده است.
در پنل وردپرس سایتتان و در قسمت تنظیمات JSON API می توانید urlهای مربوط به این پلاگین را پیدا کنید. تنها کاری که باید بکنید این است که به url مورد نظرتان یک request بفرستید.
با کمک کتابخانه ای که JSON برای استفاده در جاوا آماده کرده است، می توانید رشته ی دریافت شده را به سادگی تفسیر کنید و اطلاعات را از آن استخراج کنید. رشته ای که دریافت می کنید به صورت جفت هایی از کلید و مقدار است و همیشه یکی از اینها کلید status است. اولین بار که با JSON کار می کنید ممکن است تفاوت بین JSON Object و JSON Array کمی شما را گیج کند اما کمی دقت که به خرج دهید می بینید همه چیز به صورت منظم در اختیار شما قرار گرفته است.هر JSON Object آرایه ای از کلید و مقدار ها است و هر JSON Array آرایه ای از JSON Objectها است! شاید شکل زیر بتواند تا حدودی تفاوت این دو را نشان دهد.
رشته ی دریافت شده از یک JSON url را می توانید با سازنده ی کلاس JSON Object به یک شیء JSON تبدیل کنید.
JSONObject obj = new JSONObject(myJsonString);
و بعد از آن تمام اطلاعاتی که از Request گرفتید داخل این شیء موجود است، تنها باید بدانید که چه مقداری با چه کلیدی ذخیره شده است. برای مشاهده ی جزئیات یک رشته ی JSON در مرورگر خودتان پیشنهاد من استفاده از یک JSON Viewer است که هم به صورت آنلاین می توانید بسیاری از این Viewerها را پیدا کنید هم افزونه های زیادی برای کروم و فایرفاکس برای این کار موجود است. فرض کنید می خواهیم یک رشته ی JSON از متد getPosts دریافت کنیم و این رشته را در جاوا تفسیر کنیم و در دستگاه اندرویدی به کاربر نمایش دهیم. ابتدا از یک Viewer در مرورگر کامپیوترتان کمک بگیرید تا کلیدهای هر بخش را ببینید و متوجه شوید که اجزاء مختلف یک پست (موضوع، خلاصه، تگ، نویسنده و …) دقیقا با چه نظمی درون این رشته ذخیره شده اند.
اکنون باید یک Request به آدرس متد getPosts بفرستیم. (فرض کنید آدرس این متد برای کارمان mysite.com/api/getposts است) قطعه کد زیر رشته ی JSON را درون متغیر JsonString ذخیره می کند.
پس از گرفتن رشته ی JSON می توانیم اجزاء مختلف آن را مانند کد زیر از آن استخراج کنیم:
HttpGet httpGet = new HttpGet(jsonURL);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(jttpHet);
HttpEntity entity = response.getEntity();
String JsonString = new String(EntityUtils.toString(entity));
با یک تحلیل ساده و فهمیدن اینکه برنامه تان چه کلاس هایی نیاز دارد، می توانید هر رشته ی JSON را توسط متد کلاس مربوط به آن Parse کنید و به کدتان نظم دهید.
JSONObject obj = new JSONObject(JsonString);
String postTitle = obj.getString(KEY_POST_TITLE);
String postContent = obj.getString(KEY_POST_CONTENT);
String postImageUrl = obj.getString(KEY_POST_IMAGE_URL);
JSONArray commentArray = obj.getJSONArray(KEY_POST_CONTENT);
// Set TextView's text with extracted elements from JSONObject
txtPostTitle.setText(postTitle);
txtPostContent.setText(postContent);
این پلاگین وردپرس از نظر امنیتی مشکل داره اگه درست تنظیم نشه؛ مثلن update_post رو اگه بشه با یه GET ساده اجرا کرد، باید با سایتمون خداحافظی کنیم :)
ضمنن راجعبه کتابخونه اولی هم با decompile شدن برناممون ممکنه رمز ادمین سایت از دست بره؛ مگه اینکه کد رو obfuscate کرده باشیم.
ممنون محمد جان از اینکه من رو راهنمایی کردی
من خودم هم به این موضوع شک داشتم اما برای این متدی که شما گفتی لازمه که ابتدا یک nonce دریافت کنیم. راجع به این موضوع با بچه های php مشورت کردم و اونا گفتن نگران امنیتش نباشم :)
آفرین سپهر. کلی حال کردم.
مرسی سروش
لطف داری :)
برای این طور کارها تو جاوا با کتابخانهٔ retrofit آشنا هستین؟ نشونیاش اینه: http://square.github.io/retrofit
به نظرم کارهای این طوری رو خیلی راحتتر میکنه.
سلام. لینک این پلاگین را بزارید.
سلام
برای استفاده در وردپرس :
https://wordpress.org/plugins/json-api/
و کتابخانه ای که در جاوا مورد نیاز است:
http://sourceforge.net/projects/json-lib/files/
یک رفرنس خوب و قابل اعتماد هم خود گوگل برای این کتابخانه آماده کرده:
http://developer.android.com/reference/org/json/package-summary.html
با سلام واحترام
سایتم را با وردپرس ساخته شده
ایا میتونم یک برنامه اندروید بسازم مانند دیوار یا بازار
چه چیزی را باید در اختیار سازنده اپ بزارم
سلام
این موارد کاملا به نیاز شما بستگی داره، اینکه انتظار دارید برنامه ی اندرویدی سایتتون چه امکاناتی داشته باشه، برنامه نویس اندرویدتون رو مجبور میکنه که از سایت شما اطلاعات مختلفی استخراج کنه.
در پروسه ی طراحی اپ مطمئن باشیوباشید که نیازها به تدریج خودشون رو نشون میدن
موفق باشید
با سلام وتشکر بابت پست بسیار مفید
آقا داکیومنت فارسی وجود نداره برای کار با json?
سلام
ممنون که مطلبم رو خوندید، راستش من خیلی دنبال داکیومنت فارسی نبودم برای جیسون. پیشنهادم به شما اینه که از داکیومنت ها و رفرنسهای انگلیسی استفاده کنید. ممکنه اولش یکم براتون سخت باشه خوندن متن های انگلیسی ولی مطمئن باشید نتیجه ی بهتری میگیرید.
با سلام
دوستان بنده تازگی اندرود رو شروع کردم و به شدت میخام جیسون رو یاد بگیرم
بنده هم طبق راهی که بالا گفته شده برنامه نوشتم اما الان میخام با جیسون کار کنم اما هرچی میگردم نمیتونم اموزشی پیدا کنم(یوتوب و گوگل)
از طرفی نمیتونم با جیسون کار کنم و php بلد نیستم
اگه امکانش هست درمورد json در وردپرس توضیح بدید و اگه میشه اموزشی قرار بدید و همینطور کدوم پلاگین وردپرس برای استفاده از جیسون نیازه
ممنون از همگی
سلام
سورس کدش رو می تونی برام بفرستی؟
با تشکر از مطالب خوبتون
سلام من دقیقا نفهمیدم چجوری لینک خروجی جیسون سایت رو بدست بیاریم !!!
منم اصلا نفهمیدم
سلام
ممنون از شما ، استفاده کردیم.
ما این کار رو برای وب سایت http://arganian.ir بدون کتابخانه انجام دادیم. فقط به کمک کوئری خود وردپس خروجی جیسون هایی که مورد نیاز بود رو ساختیم. و البته امکان ارسال کامنت رو هم با همین قضیه اوکی کردیم.
https://cafebazaar.ir/app/ir.arganian.arganian
با سلام کد requestنیفتاده؟
سلام
وقت بخیر
عذر میخوام میخوام با متد گت پست بیام و اطلاعات یه پست بخصوص رو نمایش بدم
چجوری میشه دقیقا؟ممنون میشم راهنمایی بفرمایید
سلام ببخشید من این افزونه وردپرس رو دارم استفاده میکنم و مطالب دسته بندی های مختلف رو میخوام اما فقط ۵ تا مطلب اخر هر دسته رو نشون میده
من همه مطالب رو نیاز دارم… باید چیکار کنم؟
وقتتون بخیر
با تشکر از مطلب مفیدتون
ما قصد داریم تا از داخل اپلیکیشنی که داریم روش کار می کنیم لوگین کنیم به وردپرس و برای این کار نمیدونیم باید از چه کتابخونه و ای پی آیی استفاده کنیم و به چه صورت
ممنون میشیم راهنماییمون کنید
سلام
ممنون از مطلب مفیدتون، اما من برای یه پروژه که لازمه ارتباط بین اندروید و وردرس ایجاد بشه از افزونه wordpress rest apiاستفاده کردم میخواستم ببینم نحوه پیاده سازی ارتباط برای درخواستهای post رو میتونین اموزش بدین؟
خیلی ممنون میشم
وقتتون بخیر
با تشکر از مطلب مفیدتون
ما قصد داریم تا از داخل اپلیکیشنی که داریم روش کار می کنیم لوگین کنیم به وردپرس و برای این کار نمیدونیم باید از چه کتابخونه و ای پی آیی استفاده کنیم و به چه صورت
ممنون میشیم راهنماییمون کنید
سلام
ممنون که این مطلب رو خوندید.
کتابخانههای زیادی برای ارسال درخواست و دریافت پاسخ http برای جاوا وجود دارند. سادهترین و البته کم امکاناتترین این کتابخانهها، volley نام دارد که توسط گوگل توسعه داده شده. در صورتی که آپلود فایل نداشته باشید این کتابخانه برای کارتان کافی است.
اگر نیاز دارید درخواستهای پیچیدهتر داشته باشید و دسترسی به header و دیگر اجزای یک درخواست برایتان مهم است کتابخانه Retrofit رو بهتون پیشنهاد میکنم. قطعا یک مقدار کار با این کتابخانه پیچیدهتر است اما امکانات بسیار بسیار زیادی در اختیارتان میگذارد.
در نهایت اگر نمیخواهید از کتابخانهای استفاده کنید باید با کلاس HttpUrlConnection آشنا شوید تا بتوانید روی پروتکل http درخواستهایتان را بفرستید.
volley -> https://android.googlesource.com/platform/frameworks/volley
Retrofit -> https://square.github.io/retrofit
HttpUrlConnection -> https://developer.android.com/reference/java/net/HttpURLConnection.html
سلام دوباره ایا برای درخواستهای post هم میشهراهنمایی کنید که چجوری میشه مطالب رو از طریق rest api با لاگین یا auth آموزش بدین؟
من با jwt کار کردم اما نمیدونم چجوری میشه token رو فرستاد که تایید بشه توسط وردپرس
ممنون از مطلبتون. Json api تو سایت من فعال نیس همچنین افزونه wp reset api هم ک بهش نیاز دارم نصب میشه ولی فعال نمیشه . لطفا راهنمایی کنید
سلام..
من میخوام نسخه موبایل بسازم!
یه ایندکس دیگه دارم میخوام با اون استایل ها، پست ها نمایش داده بشه!
چطوری با فایل جیسون این کارو میتونم بکنم؟
ممنون میشم کمکم کنین…
سلام ممنون از مطالب زیباتون
یه سوال هم داشتم اگه سمت سرور با وردپرس کار کنی_ سرویس بدی مثلا جیسون به اندروید بفرستی_ لاگین و ….
یا همین مطلبی که گذاشتین لازمه که کد بنویسم و با php کار کنیم
چه چیزهایی لازمه که بدونیم
میدونم اینجا بخش سوال نیست اگه امکان باشه راهنمایی کنین و جواب رو به ایمیلم بفرستید
پیشاپیش ممنون
سلام
من به تازگی یه برنامه برای اندروید ساختم. ولی مشکلی که دارم برای فرم ورود وردپرس هست که رمز ها رو کد می کنه در تیبل. از طرفی این افزونه وردپرس دسترسی ورود و خروج کاربر نداره (ظاهرا)
چجوری برای فرم ورود رمز عبور رو مطابقت بدم؟ آیا روش یا آموزشی می شناسید خیلی هم گشتم
لطفا راهنماییم کنید …
خیلی خیلی خیلی ممنونم
موفق باشید