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

json and android friendship
نویسنده:
سپهر بهروزی

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

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

بعد از چندین جستجو در گوگل و سایت رسمی وردپرس کتابخانه‌ی 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 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);

درباره نویسنده : سپهر بهروزی

ded6f051027dbda20f893d3c6e6430e3500b35684f7191bd10b7c8370067710b?s=72&r=g
برنامه نویس اندروید سارینا، عاشق گجت های اندرویدی و گیتار

هم‌رسانی در:

۲۸ نظر

  1. 959f456558959457e1504721f6d8af31678c7bf9992e7a756531dcd32731823e?s=54&r=g
    محمد ۳۰ تیر در ۰۹:۴۶- پاسخ دادن

    این پلاگین وردپرس از نظر امنیتی مشکل داره اگه درست تنظیم نشه؛ مثلن update_post رو اگه بشه با یه GET ساده اجرا کرد، باید با سایتمون خداحافظی کنیم :)

    ضمنن راجع‌به کتاب‌خونه اولی هم با decompile شدن برناممون ممکنه رمز ادمین سایت از دست بره؛ مگه این‌که کد رو obfuscate کرده باشیم.

    • ded6f051027dbda20f893d3c6e6430e3500b35684f7191bd10b7c8370067710b?s=54&r=g
      سپهر بهروزی ۳۰ تیر در ۱۳:۵۹- پاسخ دادن

      ممنون محمد جان از اینکه من رو راهنمایی کردی
      من خودم هم به این موضوع شک داشتم اما برای این متدی که شما گفتی لازمه که ابتدا یک nonce دریافت کنیم. راجع به این موضوع با بچه های php مشورت کردم و اونا گفتن نگران امنیتش نباشم :)

  2. f0e2a21bcf499cbc713c47d8f034d66e90a99f9ffcfe96466c9971dfdc5c9816?s=54&r=g
    سروش ناظمی ۳۱ تیر در ۱۶:۵۸- پاسخ دادن

    آفرین سپهر. کلی حال کردم.

  3. d26699d3d91da4926e450ba0cfa405da7f3e465d1f0f30a1e5084d9e824f6e22?s=54&r=g
    مصطفی حاجی‌زاده ۵ مرداد در ۰۹:۱۱- پاسخ دادن

    برای این طور کارها تو جاوا با کتابخانهٔ retrofit آشنا هستین؟ نشونی‌اش اینه: http://square.github.io/retrofit

    به نظرم کارهای این طوری رو خیلی راحت‌تر می‌کنه.

  4. 47003d1f4220e303fb2386973244d36a546f32d33d68eba70a94e0a40410d0e7?s=54&r=g
    vahid.dialame ۶ آذر در ۱۶:۰۷- پاسخ دادن

    سلام. لینک این پلاگین را بزارید.

  5. 1b15b446b8965cd013ea7344153c6b81d52192404614a1cd2db906a4c0e0ed28?s=54&r=g
    دانشجو ۲۰ آذر در ۱۸:۴۲- پاسخ دادن

    با سلام واحترام
    سایتم را با وردپرس ساخته شده
    ایا میتونم یک برنامه اندروید بسازم مانند دیوار یا بازار
    چه چیزی را باید در اختیار سازنده اپ بزارم

    • ded6f051027dbda20f893d3c6e6430e3500b35684f7191bd10b7c8370067710b?s=54&r=g
      سپهر بهروزی ۱۰ اسفند در ۱۲:۱۹- پاسخ دادن

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

  6. 0e424d4f9a8396246bb9719d39df92f2829c36a27e457e8e6d5cdbbe4e1188d8?s=54&r=g
    saber ۱۰ اسفند در ۱۱:۳۵- پاسخ دادن

    با سلام وتشکر بابت پست بسیار مفید
    آقا داکیومنت فارسی وجود نداره برای کار با json?

    • ded6f051027dbda20f893d3c6e6430e3500b35684f7191bd10b7c8370067710b?s=54&r=g
      سپهر بهروزی ۱۰ اسفند در ۱۲:۲۳- پاسخ دادن

      سلام
      ممنون که مطلبم رو خوندید، راستش من خیلی دنبال داکیومنت فارسی نبودم برای جیسون. پیشنهادم به شما اینه که از داکیومنت ها و رفرنسهای انگلیسی استفاده کنید. ممکنه اولش یکم براتون سخت باشه خوندن متن های انگلیسی ولی مطمئن باشید نتیجه ی بهتری میگیرید.

  7. f85bf032780a6b5e78ba0c4b53556e2d0da8ad65aef612e166a851b66f7e42cf?s=54&r=g
    Hossein kh ۱ آذر در ۱۰:۱۷- پاسخ دادن

    با سلام
    دوستان بنده تازگی اندرود رو شروع کردم و به شدت میخام جیسون رو یاد بگیرم
    بنده هم طبق راهی که بالا گفته شده برنامه نوشتم اما الان میخام با جیسون کار کنم اما هرچی میگردم نمیتونم اموزشی پیدا کنم(یوتوب و گوگل)
    از طرفی نمیتونم با جیسون کار کنم و php بلد نیستم
    اگه امکانش هست درمورد json در وردپرس توضیح بدید و اگه میشه اموزشی قرار بدید و همینطور کدوم پلاگین وردپرس برای استفاده از جیسون نیازه
    ممنون از همگی

  8. 9fcabd2c90cdc056353e672f0265a0c7002fb14a0a897e84af4d3dd75df3019a?s=54&r=g
    هادی شهرانی ۴ دی در ۲۱:۰۲- پاسخ دادن

    سلام
    سورس کدش رو می تونی برام بفرستی؟
    با تشکر از مطالب خوبتون

  9. 8bd07d293062a845f2508ca81a715b3d221941f412836c51b1dff38d051fd7a3?s=54&r=g
    بهروز ۳ اسفند در ۱۱:۵۲- پاسخ دادن

    سلام من دقیقا نفهمیدم چجوری لینک خروجی جیسون سایت رو بدست بیاریم !!!

    • 3d1a5cf9cff5fb8cb8f2705b7c68d1deca925e85bea141b7b88d5e695d125683?s=54&r=g
      دانیال ۱ اردیبهشت در ۲۲:۳۹- پاسخ دادن

      منم اصلا نفهمیدم

  10. caf453c915aff44a6a8faa907060c17d8a3d384841f3549963a19e5965002ce0?s=54&r=g
    حامد ۲۶ فروردین در ۱۴:۵۶- پاسخ دادن

    سلام
    ممنون از شما ، استفاده کردیم.
    ما این کار رو برای وب سایت http://arganian.ir بدون کتابخانه انجام دادیم. فقط به کمک کوئری خود وردپس خروجی جیسون هایی که مورد نیاز بود رو ساختیم. و البته امکان ارسال کامنت رو هم با همین قضیه اوکی کردیم.
    https://cafebazaar.ir/app/ir.arganian.arganian

  11. 2794e6b505d46c600537c32b1c934dbf5ee5e97051476a87a11427b184cb8214?s=54&r=g
    سعید ۲۲ خرداد در ۱۱:۵۱- پاسخ دادن

    با سلام کد requestنیفتاده؟

  12. f3720628985c53a359591cf0354409c12c68ca71edc4f80ebf0a2f060cb1d5f6?s=54&r=g
    میلاد امینی ۷ تیر در ۲۱:۳۶- پاسخ دادن

    سلام
    وقت بخیر
    عذر میخوام میخوام با متد گت پست بیام و اطلاعات یه پست بخصوص رو نمایش بدم
    چجوری میشه دقیقا؟ممنون میشم راهنمایی بفرمایید

  13. aa64031ad22483e4ee161155f1534be648e9801690eca65e7965f19595073847?s=54&r=g
    علی ۳۰ مرداد در ۰۹:۰۸- پاسخ دادن

    سلام ببخشید من این افزونه وردپرس رو دارم استفاده میکنم و مطالب دسته بندی های مختلف رو میخوام اما فقط ۵ تا مطلب اخر هر دسته رو نشون میده
    من همه مطالب رو نیاز دارم… باید چیکار کنم؟

  14. 5276fa631618efa0a5e912b0395afdc27205a4e568aea540723b9b7eee1c1c8e?s=54&r=g
    امیر الفت ۱۰ شهریور در ۱۴:۴۶- پاسخ دادن

    وقتتون بخیر
    با تشکر از مطلب مفیدتون
    ما قصد داریم تا از داخل اپلیکیشنی که داریم روش کار می کنیم لوگین کنیم به وردپرس و برای این کار نمیدونیم باید از چه کتابخونه و ای پی آیی استفاده کنیم و به چه صورت

    ممنون میشیم راهنماییمون کنید

  15. ae139a0db371c75b7e95109ee03ab9d6f9a6e94e9f629dc1f7500a8e14596e92?s=54&r=g
    وحید ارجمند ۲۸ آبان در ۲۳:۳۱- پاسخ دادن

    سلام
    ممنون از مطلب مفیدتون، اما من برای یه پروژه که لازمه ارتباط بین اندروید و وردرس ایجاد بشه از افزونه wordpress rest apiاستفاده کردم میخواستم ببینم نحوه پیاده سازی ارتباط برای درخواستهای post رو میتونین اموزش بدین؟
    خیلی ممنون میشم

  16. ae139a0db371c75b7e95109ee03ab9d6f9a6e94e9f629dc1f7500a8e14596e92?s=54&r=g
    وحید ارجمند ۲۸ آبان در ۲۳:۳۴- پاسخ دادن

    وقتتون بخیر
    با تشکر از مطلب مفیدتون
    ما قصد داریم تا از داخل اپلیکیشنی که داریم روش کار می کنیم لوگین کنیم به وردپرس و برای این کار نمیدونیم باید از چه کتابخونه و ای پی آیی استفاده کنیم و به چه صورت

    ممنون میشیم راهنماییمون کنید

    • ded6f051027dbda20f893d3c6e6430e3500b35684f7191bd10b7c8370067710b?s=54&r=g
      سپهر بهروزی ۱ آذر در ۱۰:۵۵- پاسخ دادن

      سلام
      ممنون که این مطلب رو خوندید.
      کتابخانه‌های زیادی برای ارسال درخواست و دریافت پاسخ ‌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

      • ae139a0db371c75b7e95109ee03ab9d6f9a6e94e9f629dc1f7500a8e14596e92?s=54&r=g
        وحید ۲۰ فروردین در ۲۳:۵۴- پاسخ دادن

        سلام دوباره ایا برای درخواستهای post هم میشهراهنمایی کنید که چجوری میشه مطالب رو از طریق rest api با لاگین یا auth آموزش بدین؟
        من با jwt کار کردم اما نمیدونم چجوری میشه token رو فرستاد که تایید بشه توسط وردپرس

  17. d321b380d5aa1e5315b6cd9a88639e7902e83dad5ee0105bfbf8c34141a6cb38?s=54&r=g
    کاوه ۶ دی در ۱۳:۰۴- پاسخ دادن

    ممنون از مطلبتون. Json api تو سایت من فعال نیس همچنین افزونه wp reset api هم ک بهش نیاز دارم نصب میشه ولی فعال نمیشه . لطفا راهنمایی کنید

  18. 93a61eaa1f8576586d0f38a11f18f31e4043d557f83bf5c168bf6cb3fbabb718?s=54&r=g
    امیرحسین آقاجانی ۲۵ بهمن در ۱۳:۱۱- پاسخ دادن

    سلام..
    من میخوام نسخه موبایل بسازم!
    یه ایندکس دیگه دارم میخوام با اون استایل ها، پست ها نمایش داده بشه!
    چطوری با فایل جیسون این کارو میتونم بکنم؟
    ممنون میشم کمکم کنین…

  19. 07e7912647bf4e32dd676ab99e8637c3f36f248534de2d1bef7710c9b0306998?s=54&r=g
    مجید ۱۹ اردیبهشت در ۱۳:۳۴- پاسخ دادن

    سلام ممنون از مطالب زیباتون
    یه سوال هم داشتم اگه سمت سرور با وردپرس کار کنی_ سرویس بدی مثلا جیسون به اندروید بفرستی_ لاگین و ….
    یا همین مطلبی که گذاشتین لازمه که کد بنویسم و با php کار کنیم
    چه چیزهایی لازمه که بدونیم
    میدونم اینجا بخش سوال نیست اگه امکان باشه راهنمایی کنین و جواب رو به ایمیلم بفرستید
    پیشاپیش ممنون

  20. 0a2f98aa9f1b19cf7cfcce025c5551b41280a4532e02d368553ce4b1542a5811?s=54&r=g
    محمد ۱۸ خرداد در ۰۷:۵۹- پاسخ دادن

    سلام
    من به تازگی یه برنامه برای اندروید ساختم. ولی مشکلی که دارم برای فرم ورود وردپرس هست که رمز ها رو کد می کنه در تیبل. از طرفی این افزونه وردپرس دسترسی ورود و خروج کاربر نداره (ظاهرا)
    چجوری برای فرم ورود رمز عبور رو مطابقت بدم؟ آیا روش یا آموزشی می شناسید خیلی هم گشتم
    لطفا راهنماییم کنید …

    خیلی خیلی خیلی ممنونم
    موفق باشید

ثبت دیدگاه