استفاده از WordPress JSON API با Java

json_and_android_friendship

یکی از کارهایی که این روزها اکثر دارندگان سایت برای سایتشان انجام می دهند درست کردن اپلیکیشن موبایل است. اپلیکیشنی که محتوای سایت را سریع و متناسب با اندازه ی دستگاه های موبایل به کاربر نشان دهد و کاربر بتواند محتوای سایت را بدون کم و کاست و بدون استفاده از یک لپ تاپ یا کامپیوتر بخواند. اگر سایت شما با وردپرس نوشته شده باشد و بخواهید برای سایتتان یک اپ اندروید بسازید، مهم ترین و پایه‏‏‎ای ترین کاری که این اپ باید بکند نشان دادن پست های منتشر شده روی سایت، کامنت گذاشتن زیر هر پست و اگر پست ها، قابلیت لایک شدن هم داشته باشد، لایک کردن پست ها است. پس برای وصل شدن به وردپرس به یک کتابخانه در جاوا نیاز دارید.

اولین تجربه ی کاری من در کار کردن با وردپرس همین یک ماه پیش بود که استارت ساختن اپلیکیشن موبایل تحت پلتفرم اندروید برای سایت بردوک را زدم. تا چند روز اول، تحقیقاتم روی وصل شدن به وردپرس و دریافت اطلاعات پست ها بود و اینکه از چه کتابخانه ای برای این کار استفاده کنم که هم سرعت پردازش داده های بالایی داشته باشد و هم بتواند از نسخه های قدیمی اندروید پشتیبانی کند.

 

بعد از چندین جستجو در گوگل و سایت رسمی وردپرس کتابخانه ی Jwordpress را برای کار انتخاب کردم. قابلیت Writability بالای این کتابخانه و منظم شدن کدهای من، خیلی مرا به استفاده از این کتابخانه ترغیب کرد. انگار در حال کد زدن داشتم با یک انسان صحبت می کردم! تصور کنید تنها کاری که باید می کردم این بود:

 

	String username = args[0];
	String password = args[1];
	String xmlRpcUrl = args[2];
	wordpress wp = new wordpress(username, password, xmlRpcUrl);
	List <page> recentposts = wp.getRecentPosts(10);

 

اما بعد از کمی کار کردن با این کتابخانه متوجه شدم که محدودیت های زیادی دارد. اول از همه شما نیاز به یک اکانت با دسترسی ادمین دارید. نیاز نیست که کاربر این اکانت را داشته باشد، فقط کافیست از این اکانت برای وصل شدن به سایتتان و دریافت پست ها استفاده کنید.

 

محدودیت دیگری که این کتابخانه دارد این است که شما با داشتن شناسه ی یک پست قادر نیستید آن پست را از سایت بگیرید. به زبان خودمان متد getPost(ID) وجود ندارد! البته طبیعی است چون این کتابخانه هنوز عمر زیادی ندارد و مسلما خیلی از قابلیت ها هنوز به این کتابخانه اضافه نشده است. در سایت وردپرس اسم JSON را دیده بودم و بعد کمی جستجو فهمیدم این پلاگین وردپرس بسیار قدرتمند است و امکانات زیادی در اختیار برنامه نویسان قرار می دهد.

 

اساس کار این پلاگین، رشته است. یعنی تمام اطلاعات را در قالب یک رشته به برنامه ی شما می دهد و شما باید آن رشته را تفسیر کنید. خوشبختانه تمام زبان های برنامه نویسی معروف امروز، یک کتابخانه برای کار با JSON را دارند و کار شما بسیار راحت است. از طرفی خود پلاگین JSON API با زبان php نوشته شده و می توان به راحتی آن را تغییر داد و بنا به نیازتان، قابلیت هایی به این پلاگین اضافه کنید.

از دیگر مزیت هایی که JSON API  دارد این است که شما برای وصل شدن به این پلاگین نیاز به اکانتی در وردپرس سایتتان ندارید و منطقی هم هست، زیرا کسی که سایت شما را باز می کند بدون داشتن حساب کاربری می تواند سایت را ببیند‍! همچنین درخواست ها می توانند هم به صورت GET باشند و هم POST.

 

به راحتی با داشتن کمی اطلاعات راجع به php می توانید متدهای مورد نیازتان را به این پلاگین اضافه کنید و از آنها استفاده کنید.

 

جاوا ، یک کتابخانه برای کار با JSON  دارد. کار با این کتابخانه بسیار ساده است.

 

در پنل وردپرس سایتتان و در قسمت تنظیمات JSON API می توانید urlهای مربوط به این پلاگین را پیدا کنید. تنها کاری که باید بکنید این است که به url مورد نظرتان یک request بفرستید.

 

JSON API Setting

 

با کمک کتابخانه ای که JSON  برای استفاده در جاوا آماده کرده است، می توانید رشته ی دریافت شده را به سادگی تفسیر کنید و اطلاعات را از آن استخراج کنید. رشته ای که دریافت می کنید به صورت جفت هایی از کلید و مقدار است و همیشه یکی از اینها کلید status است. اولین بار که با JSON کار می کنید ممکن است تفاوت بین JSON Object و JSON Array کمی شما را گیج کند اما کمی دقت که به خرج دهید می بینید همه چیز به صورت منظم در اختیار شما قرار گرفته است.هر JSON Object آرایه ای از کلید و مقدار ها است و هر JSON  Array آرایه ای از JSON Objectها است! شاید شکل زیر بتواند تا حدودی تفاوت این دو را نشان دهد.

 

JsonArrayAndObject

 

رشته ی دریافت شده از یک JSON url را می توانید با سازنده ی کلاس JSON Object به یک شیء JSON تبدیل کنید.

 

JSONObject obj = new JSONObject(myJsonString);

 

و بعد از آن تمام اطلاعاتی که از Request گرفتید داخل این شیء موجود است، تنها باید بدانید که چه مقداری با چه کلیدی ذخیره شده است. برای مشاهده ی جزئیات یک رشته ی JSON در مرورگر خودتان پیشنهاد من استفاده از یک JSON Viewer است که هم به صورت آنلاین می توانید بسیاری از این Viewerها را پیدا کنید هم افزونه های زیادی برای کروم و فایرفاکس برای این کار موجود است. فرض کنید می خواهیم یک رشته ی JSON از متد getPosts دریافت کنیم و این رشته را در جاوا تفسیر کنیم و در دستگاه اندرویدی به کاربر نمایش دهیم. ابتدا از یک Viewer در مرورگر کامپیوترتان کمک بگیرید تا کلیدهای هر بخش را ببینید و متوجه شوید که اجزاء مختلف یک پست (موضوع، خلاصه، تگ، نویسنده و …) دقیقا با چه نظمی درون این رشته ذخیره شده اند.

 

JSON_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);

برنامه نویس اندروید سارینا، عاشق گجت های اندرویدی و گیتار