على الرغم من أن منصة Sina Weibo Open توفر تنزيلات SDK Development بلغات مختلفة ، إلا أن كل منها يأتي مع بعض مستندات الوصف التجريبي والواجهة لمكالمات الواجهة الأساسية. ومع ذلك ، بعد المحاولة بصبر هذه الأيام ، أشعر أن إرشادات المقدمة على منصة سينا ويبو المفتوحة لا تتفق إلى حد ما مع تعليقات الاستخدام التجريبي في حزمة تطوير Java Development Weibo4J. بالإضافة إلى ذلك ، فإن قدرتي الفهمية محدودة ، مما يؤدي إلى العديد من المشكلات غير الواضحة. لحسن الحظ ، لم أتخلى عن محاولة فهمها. أقل هراء ، ما يلي هو عملية التعلم الخاصة بي.
إذا كنت ترغب في تطوير تطبيق Weibo الخاص بك عن طريق الاتصال بـ Sina Weibo Open Platform API ، فإن الخطوة الأولى هي الحصول على حساب Sina Weibo وحساب CSDN ، لأننا بحاجة إلى استخدام هذين الحسابين لإنشاء تطبيقات Weibo في نفس الوقت للحصول على مفتاح التطبيق والمفتاح السري. إذن ما هي استخدامات مفتاح التطبيق والمفتاح السري؟
في الواقع ، لقد قرأت للتو سلسلة من التفسيرات على المنصة المفتوحة لـ Sina Weibo ، لكنني لم أفهم كيف يكون مفتاح التطبيق والمفتاح السري مفيدين. لأن الشيء الأكثر أهمية هو فهم عملية مصادقة وترخيص OAUTH بأكملها ، وكذلك دور العديد من الرموز و 4 عناوين URL في عملية مصادقة وترخيص OAUTH بأكملها.
عندما قابلت Oauth لأول مرة ، والتي لم يكن لدي أي فكرة ، اعتقدت أنني لن أتمكن من مواصلة التعلم. لحسن الحظ ، وجدت المقالات التالية ، والتي هي مفيدة للغاية لفهم OAuth. الرابط كما يلي:
هناك 3 مشاركين في OAUTH ، أي المستخدم ومزود الخدمة والمستهلك. لنفترض أنني أرغب في تطوير تطبيق (APP) استنادًا إلى منصة Sina Weibo المفتوحة لمستخدمي Sina Weibo الآخرين لاستخدامه. مراسلاتهم على النحو التالي:
في الواقع ، فإن تطبيقنا يعادل تطبيق الطرف الثالث للمستخدم والمزود (Sina Weibo Platform). كتطبيق من طرف ثالث ، إذا كنت ترغب في الوصول إلى الموارد التي يحفظها المستخدم على منصة Sina Weibo ، فيجب عليك الخضوع لسلسلة من المصادقة والترخيص قبل أن تتمكن من العمل.
فيما يلي رسم بياني يعتمد على فهمي لعملية مصادقة وترخيص OAUTH بأكملها (يمكنك إلقاء نظرة وتخطيها. بعد أن يكون لديك فهم معين لبعض المفاهيم أدناه ، سوف تنظر إلى الوراء في مخطط التدفق هذا):
الجمع بين المخطط الانسيابي أعلاه ، هنا هو فهمي لهذه المصطلحات ووصف كل عملية:
مفتاح المستهلك وسرية المستهلك: تسمى المنصات المفتوحة على Sina Weibo مفتاح التطبيق والمفتاح السري على التوالي. ينطبق المستهلك على مقدم الخدمة ليكون قادرًا على استدعاء واجهة برمجة التطبيقات المفتوحة. بعد الموافقة على الطلب ، سيتم تعيين المزود للمستهلك الذي يلبي متطلباته ، والذي يتم استخدامه لتحديد فريد أن المستهلك يلبي متطلبات المزود.
المقابلة للتدفقات 1 و 2 في الشكل أعلاه.
طلب الرمز المميز ، طلب السر: عندما يصل المستخدم إلى المستهلك ويريد الحصول على خدمته الخاصة ، يتم إرجاع الخدمة من قبل المستهلك بعد دمج الموارد المخزنة في المستخدم نفسه. في هذا الوقت ، يطلب المستهلك أن يحصل مقدم الخدمة على رمز طلب ، والذي يتم استخدامه لتحديد الارتباط المحدد بين المستهلك والمستخدم بشكل فريد.
المقابلة للتدفقات 3 و 4 و 5 في الشكل أعلاه.
للمعالجة 6 ، يجب على المستهلك توجيه المستخدم إلى صفحة مصادقة وترخيص OAUTH المقدمة من المزود. في الواقع ، يقوم المتصفح بإعادة توجيه إلى المصادقة مع الرمز المميز للطلب وطلب المعلمات السرية المرفقة. يتم توفير عنوان URL هذا من قبل المزود.
بعد ذلك ، في العملية 7 و 8 ، يصرح المستخدم للمستهلك (عادةً ما يقوم بتسجيل الدخول عن طريق إدخال الحساب وكلمة المرور) ، وسيقوم المزود بإعادة توجيه Callback_url الذي يوفره المستهلك في العملية 1 ، ويعلق رمز Oauth و Oauth على معلمات URL.
العملية 9 هي المستهلك الذي يطلب من مقدم الخدمة مرة أخرى الحصول على رمز الوصول من خلال الرمز المميز للطلب الذي تم الحصول عليه من مزود من قبل.
الرمز المميز للوصول ، سرية Access: إذا قام الموفر بإرجاع رمز الوصول دون إذن المستخدم في العملية 10 ، يتم استخدامه لتحديد الموارد والمعلومات المخزنة بشكل فريد في مزود المستهلك معين. ثم يمكن للمستهلك البدء في استخدام رمز الوصول الذي تم الحصول عليه وسر الوصول للوصول إلى الموارد المخزنة في المزود من قبل المستخدم المقابل.
بعد دمج معلومات المستخدم وتشغيله في العملية 11 ، يمكن إرجاع نتائج الخدمة المحددة إلى المستخدم.
من خلال الفهم المذكور أعلاه لعملية OAUTH ، نعلم أن المستخدم لم يسرب الحساب وكلمة المرور وما إلى ذلك المطلوب لتسجيل الدخول إلى المزود إلى المستهلك الطرف الثالث. في الوقت نفسه ، يمكن للمستخدم استخدام الخدمات الخاصة للمستهلك. يا لها من عملية عملية ذكية وآمنة!
بالإضافة إلى ذلك ، في الشكل أعلاه ، قدم المستهلك طلبات مختلفة من المزود. في الواقع ، يوفر مقدم الخدمة 3 عناوين URL مع وظائف مختلفة للوصول إلى المستهلك. لقطات شاشة عناوين URL هذه الثلاثة في منصة Sina Weibo المفتوحة هي كما يلي:
استخدم التحقق من OAUTH ونشره على منصة Sina Weibo المفتوحة
لاستخدام واجهة برمجة التطبيقات لمنصة Sina Weibo المفتوحة ، يجب عليك أولاً الحصول على مفتاح التطبيق وسرية التطبيق التي تم تعيينها بواسطة Sina. فيما يلي مفتاح التطبيق وسرية التطبيق التي تم تعيينها بواسطة Sina بعد أن قمت بإنشاء التطبيق (يجب أن يكون هذا سريًا).
ثم قم بتنزيل Weibo SDK ، أستخدم Weibo4J في Java.
قم بتعديل مفتاح التطبيق وسرية التطبيق لفئة Weibo.java في حزمة SDK إلى مفتاح التطبيق وسرية التطبيق التي حصلت عليها للتو ، كما هو موضح في الإرشادات التالية للاستخدام:
بعد الانتهاء من هذه ، يمكنك البدء في كتابة التعليمات البرمجية بناءً على العرض التوضيحي المقدم. على النحو التالي:
يتم استخدام Weboauth.java لتهيئة مفتاح التطبيق وسرية التطبيق المطلوبة لفئة Weibo.java ، ويوفر طرقًا لـ GetRequestToken () و GetTaccessToken () للحصول على الرمز المميز للطلب والوصول. يتم عرض المعلمات المطلوبة في الكود. بالإضافة إلى ذلك ، يتم توفير طريقة لنشر نص WEIBO أيضًا إلى تحديث ().
حزمة weibo4j.examples ؛ استيراد weibo4j.status ؛ استيراد weibo4j.weibo ؛ استيراد weibo4j.weiboException ؛ استيراد weibo4j.http.accesstoken ؛ استيراد weibo4j.http.requesttoken ؛ استيراد java.io.unsupportedencodingException ؛ // مصادقة الويب الفئة العامة weboauth {private Weibo Weibo ؛ Weboauth العام () {// إعداد مفتاح المستهلك وسرية المستهلك // المقابلة لتطبيق Sina Weibo هو التطبيق الذي تقدمت إليه على مفتاح المفتاح والمفتاح السري. System.SetProperty ("Weibo4j.oauth.consumersecret" ، Weibo.consumer_secret) ؛ Weibo = New Weibo () ؛ } // الحصول على طلب request requertoken وفقًا لـ Callback_url requesttoken getRequestToken (String backurl) {try {// حدد callback_url واحصل على طلب requertoken requestToken = weibo.getoauthrequesttoken (backurl) ؛ system.out.println ("request request token:" + requestToken.getToken ()) ؛ System.out.println ("طلب الرمز المميز:" + requestToken.getTokenSecret ()) ؛ Report requesttoken ؛ } catch (استثناء e) {system.out.println ("حدث استثناء عند الحصول على رمز الطلب!") ؛ E.PrintStackTrace () ؛ العودة لاغية. }} // احصل على الرمز المميز للوصول بناءً على الرمز المميز للطلب الواردة والتحقق من AccessToken getTaccessToken (requestToken requestToken ، agring agripier) {try {AccessToken AccessToken = Weibo.getoauthaccessToken (requestToken .getoken () ، requertoken.gettokenscret () ، verivier) ؛ System.out.println ("Access Token:" + AccessToken.getToken ()) ؛ System.out.println ("Access Token Secret:" + AccessToken.getTokenSecret ()) ؛ إرجاع AccessToken ؛ } catch (استثناء e) {system.out.println ("حدث استثناء عند الحصول على رمز الوصول!") ؛ E.PrintStackTrace () ؛ العودة لاغية. }} // post weibo استنادًا إلى رمز الوصول الواردة والمحتوى public void update (AccessToken Access ، string content) {try {weibo.settoken (Access.getToken () ، Access.getTokenSecret ()) ؛ content = new string (content.getBytes ("GBK") ، "UTF-8") ؛ حالة الحالة = weibo.updatestatus (المحتوى) ؛ System.out.println ("تم نشره بنجاح على Weibo:" + status.getText () + ".") ؛ } catch (UnsupportedEncodingException e) {system.out.println ("حدث استثناء عندما تم تحويل محتوى Weibo إلى الترميز!") ؛ E.PrintStackTrace () ؛ } catch (weiboexception e) {system.out.println ("حدث استثناء عند نشر Weibo استثناء!") ؛ E.PrintStackTrace () ؛ }}} يتم استخدام request.jsp لتوفير callback_url (هنا نقوم بتخصيصه على أنه callback.jsp في ما يلي). بعد الحصول على requertoken ، احفظ طلب الطلب في الجلسة وأعد توجيه الصفحة إلى callback.jsp للتحقق والترخيص. <٪@ page contentType = "text/html ؛ charset = utf-8" ٪> <٪@ page language = "java" import = "weibo4j. id = "webboauth" scope = "session"/> <٪ if ("1" .equals (request.getParameter ("OPT"))) {// pass in callback_url string callback_url = "http: // localhost: 8080/sinaweibo/callback.jsp" ؛ requestToken requestToken = Weboauth.getRequestToken (Callback_url) ؛ if (requestToken! = null) {out.println (requestToken.getToken ()) ؛ Out.println (requestToken.getTokenSecret ()) ؛ Session.setAttribute ("requestToken" ، requestToken) ؛ String url = requestToken.getAuthorizationurl ()+"& oauth_callback ="+callback_url ؛ System.out.println ("Oudantizationurl:" + url) ؛ //barebonesbrowserlaunch.openurl(callback_url) ؛ //response.sendRedirect (requestToken.getAuthorizationUrl ()) ؛ // إعادة توجيه إلى صفحة مصادقة سينا ويبو مع عنوان رد الاتصال Callback_url المرفق بـ Response.sendRedirect (url) ؛ } آخر {out.println ("خطأ الطلب") ؛ }} else {٪> <a href = "request.jsp؟ opt = 1"> يرجى النقر على مصادقة OAuth في طريقة الويب! </a> <٪} ٪>
callback.jsp. بعد إعادة التوجيه في الخطوة السابقة ، سيتم إرفاق معلمة OAUTH_VERIFIER بـ CALLECBACK_URL. في هذا الوقت ، نتقدم بطلب للحصول على AccessToken استنادًا إلى requertoken المحفوظة في الجلسة ومعلمة OAUTH_VERIFIER التي تم الحصول عليها. بمجرد الحصول على AccessToken ، نقوم بإعادة توجيه الصفحة إلى WriteWeibo.html ، الصفحة التي تكتب Weibo.
<٪@ page contentType = "text /html ؛ charset = utf-8" ٪> <٪@ page language = "java" import = "weibo4j.http.*" ٪> <٪@ page language = "java" import = "weibo4j. في http request string exerier = request.getParameter ("oauth_verifier") ؛ out.println ("Oauth_verifier:"+everifier) ؛ System.out.println ("OAuth_verifier:"+exerier) ؛ if (exerier! = null) {requestToken requestToken = (requestToken) session.getAttribute ("requestToken") ؛ if (requestToken! = null) {AccessToken AccessToken = Weboauth.getTaccessToken (requestToken ، exerier) ؛ if (AccessToken! = null) {try {session.setAttribute ("AccessToken" ، AccessToken) ؛ out.println ("5 اذهب إلى Writeweibo.html") ؛ thread.sleep (5000) ؛ Response.SendRedirect ("http: // localhost: 8080/sinaweibo/writeweibo.html") ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} آخر {out.println ("خطأ في طلب الرمز المميز") ؛ }} آخر {out.println ("خطأ في جلسة الرمز المميز") ؛ }} else {out.println ("خطأ سلسلة Verifier") ؛ } ٪> Writeweibo.html ، ملف HTML بسيط للغاية. <html> <head> <title> تم نشر sina weibo </title> </head> <bgcolor = "#d0d0d0"> <form action = "updateweibo.jsp" method = "post"> يرجى كتابة النص داخل 140 حرفًا هنا: </br> <textarea name = "weibotext" rows = "3" cols = "30" </swertarea> </br> <input type = "president" value = "publish"> <input type = "reset" value = "clear"> </br> </part> </body> </html> updatewebo.jsp ، يستخدم لنشر النص weibo ، وهذا هو ، لاستدعاء طريقة التحديث في weboauth.java. <٪@ page contentType = "text /html ؛ charset = utf-8" ٪> <٪@ page language = "java" import = "weibo4j.http.*" ٪> <٪@ page language = "java" import = "weibo4j.* (AccessToken) Session.getAttribute ("AccessToken") ؛ string weibotext = (string) request.getParameter ("weibotext") ؛ // نشر مستمر لنفس محتوى Weibo سيعيد 400 خطأ webboauth.update (AccessToken ، Weibotext) ؛ Out.println ("WeiBotext نشرت بنجاح!") ؛ ٪>
قبل التشغيل ، نحتاج إلى إعداد Tomcat ووضع الملف المصدر أعلاه في الدليل الصحيح. بالإضافة إلى ذلك ، يجب عليك أيضًا إضافة حزمة Commons-HTTPClient-3.1.jar في حزمة SDK في دليل /web-inf /lib ، بالإضافة إلى Weibo4j.jar قمت بتجميعها وتعبئتها (وهو تطبيق Java المحدد في منصة Sina Weibo المفتوحة).
قم بتشغيل tomcat والوصول إلى صفحة request.jsp في متصفحك ، كما هو موضح في الشكل أدناه:
انقر على الرابط الموجود فيه ، كما هو موضح في الشكل أدناه (لاحظ التغييرات في شريط العناوين):
عنوان URL في شريط العناوين كما يلي:
http://api.t.sina.com.cn/oauth/authorize؟oauth_token=efda6f2499877d0e6d814f8c3d31a1d1d1&oauth_callback=http://localhost:8080/sinaweibo/callback
املأ حساب Sina Weibo المحدد والصالح ومرور كلمة المرور وتفويضه. فيما يلي نتائج ملء حساب Weibo الخاص بي لاختبارها وتفويضها:
عنوان URL في شريط العناوين كما يلي:
http: // localhost: 8080/sinaweibo/writeweibo.html
انقر فوق "نشر" ، كما هو موضح أدناه:
قم بتسجيل الدخول إلى Weibo لعرضه ، كما هو موضح أدناه:
تحقق من قائمة التطبيقات المصرح بها في هذا الحساب:
في هذه المرحلة ، من المحتمل أن تكون هذه العملية حول طريقة Oauth لاستخدام منصة Sina Weibo Open لنشر Weibo.
ملخص:
1. في الواقع ، لا يزال هناك العديد من التفاصيل التي لم أذكرها. لقد حاولت عدة مرات قبل أن أكتشف المشكلة ، وفهمت المشكلة ، ثم حلت المشكلة ؛
2. إذا تم حفظ ملفات تعريف الارتباط الخاصة بتسجيل الدخول إلى معلومات حساب Sina Weibo في المتصفح ، فأنت لا تحتاج إلى إدخال معلومات الحساب عند التصريح بها. بالطبع ، يمكنك أيضًا تعديله دون استخدام الحساب الجاري للترخيص ؛
3. هناك أيضًا بعض المعلومات التي أدخلتها وحدة التحكم ، مثل معلومات إرجاع الرمز المميز وعنوان URL وعودة الخادم ، والتي لم يتم تقديمها في لقطات الشاشة.