Meskipun Sina Weibo Open Platform menyediakan pengembangan unduhan SDK dalam berbagai bahasa, masing -masing dilengkapi dengan beberapa dokumen deskripsi demo dan antarmuka untuk panggilan antarmuka dasar. Namun, setelah mencoba dengan sabar akhir -akhir ini, saya merasa bahwa panduan pengantar tentang platform terbuka Sina Weibo agak tidak konsisten dengan anotasi penggunaan demo dalam paket Paket Pengembangan Java yang diunduh Weibo4j. Selain itu, kemampuan pemahaman saya sendiri terbatas, yang mengarah pada banyak masalah yang tidak mencolok. Untungnya, saya tidak menyerah mencoba memahaminya. Kurang omong kosong, berikut ini adalah proses belajar saya.
Jika Anda ingin mengembangkan aplikasi Weibo Anda sendiri dengan menghubungi API platform terbuka Sina Weibo, langkah pertama adalah memiliki akun Sina Weibo dan akun CSDN, karena kami perlu menggunakan dua akun ini untuk membuat aplikasi Weibo pada saat yang sama untuk mendapatkan kunci aplikasi dan rahasia rahasia. Jadi apa saja penggunaan tombol aplikasi dan rahasia?
Bahkan, saya baru saja membaca serangkaian penjelasan tentang platform terbuka Sina Weibo, tetapi saya tidak mengerti bagaimana kunci aplikasi dan kunci rahasia berguna. Karena hal yang lebih penting adalah memahami seluruh proses otentikasi dan otorisasi OAuth, serta peran beberapa token dan 4 URL dalam seluruh proses otentikasi dan otorisasi OAuth.
Ketika saya pertama kali bertemu Oauth, yang tidak tahu, saya pikir saya tidak akan dapat terus belajar. Untungnya, saya menemukan artikel -artikel berikut, yang sangat membantu untuk memahami Oauth. Tautannya adalah sebagai berikut:
Ada 3 peserta di OAuth, yaitu pengguna, penyedia layanan, dan konsumen. Misalkan saya ingin mengembangkan aplikasi (aplikasi) berdasarkan platform terbuka Sina Weibo untuk digunakan pengguna Sina Weibo lainnya. Korespondensi mereka adalah sebagai berikut:
Faktanya, aplikasi kami setara dengan aplikasi pihak ketiga untuk pengguna dan penyedia (platform Sina Weibo). Sebagai aplikasi pihak ketiga, jika Anda ingin mengakses sumber daya yang disimpan oleh pengguna di platform Sina Weibo, Anda harus menjalani serangkaian otentikasi dan otorisasi sebelum dapat bekerja.
Berikut ini adalah diagram berdasarkan pemahaman saya tentang seluruh proses otentikasi dan otorisasi OAuth (Anda dapat melihatnya dan melewatkannya. Setelah Anda memiliki pemahaman tertentu tentang beberapa konsep di bawah ini, Anda akan melihat kembali bagan aliran ini):
Menggabungkan diagram alur di atas, berikut adalah pemahaman saya tentang istilah dan deskripsi ini dari setiap proses:
Kunci Konsumen dan Rahasia Konsumen: Platform terbuka di Sina Weibo masing -masing disebut Kunci Aplikasi dan Kunci Rahasia. Konsumen berlaku untuk penyedia untuk dapat memanggil API terbuka. Setelah aplikasi disetujui, penyedia akan ditugaskan kepada konsumen yang memenuhi persyaratannya, yang digunakan untuk secara unik mengidentifikasi bahwa konsumen memenuhi persyaratan penyedia.
Sesuai dengan aliran 1 dan 2 pada gambar di atas.
Minta token, permintaan rahasia: Ketika pengguna mengakses konsumen dan ingin mendapatkan layanan khusus, layanan dikembalikan oleh konsumen setelah mengintegrasikan sumber daya yang disimpan dalam pengguna itu sendiri. Pada saat ini, konsumen meminta penyedia untuk mendapatkan token permintaan, yang digunakan untuk secara unik mengidentifikasi hubungan spesifik antara konsumen dan pengguna.
Sesuai dengan aliran 3, 4, dan 5 pada gambar di atas.
Untuk memproses 6, konsumen harus mengarahkan pengguna ke halaman otentikasi dan otorisasi OAuth yang disediakan oleh penyedia. Bahkan, browser mengarahkan kembali ke otentikasi dengan token permintaan dan permintaan parameter rahasia terlampir. URL ini disediakan oleh penyedia.
Selanjutnya, dalam proses 7 dan 8, pengguna mengesahkan konsumen (biasanya hanya masuk dengan memasukkan akun dan kata sandi), penyedia akan mengarahkan kembali ke callback_url yang disediakan oleh konsumen dalam proses 1, dan melampirkan token oAuth dan oAuth verifier ke parameter URL.
Proses 9 adalah penyedia yang meminta konsumen lagi untuk mendapatkan token akses melalui token permintaan yang telah diperoleh dari penyedia sebelumnya.
Akses Token, Access Secret: Jika penyedia mengembalikan token akses tanpa otorisasi pengguna dalam proses 10, digunakan untuk secara unik mengidentifikasi sumber daya dan informasi yang disimpan dalam penyedia konsumen tertentu. Kemudian konsumen dapat mulai menggunakan token akses yang diperoleh dan mengakses rahasia untuk mengakses sumber daya yang disimpan di penyedia oleh pengguna yang sesuai.
Setelah mengintegrasikan dan mengoperasikan informasi pengguna dalam proses 11, hasil layanan spesifik dapat dikembalikan ke pengguna.
Melalui pemahaman di atas tentang proses OAuth, kami tahu bahwa pengguna belum membocorkan akun, kata sandi, dll. Diperlukan untuk masuk ke penyedia ke konsumen pihak ketiga. Pada saat yang sama, pengguna dapat menggunakan layanan khusus konsumen. Proses operasi yang pintar dan aman!
Selain itu, pada gambar di atas, konsumen telah membuat permintaan yang berbeda dari penyedia. Faktanya, Penyedia memberikan 3 URL dengan berbagai fungsi untuk akses konsumen. Tangkapan layar dari 3 URL ini di platform terbuka Sina Weibo adalah sebagai berikut:
Gunakan verifikasi dan posting di platform terbuka Sina Weibo
Untuk menggunakan API dari platform terbuka Sina Weibo, Anda harus terlebih dahulu mendapatkan kunci aplikasi dan rahasia aplikasi yang ditugaskan oleh Sina. Di bawah ini adalah kunci aplikasi dan rahasia aplikasi yang ditugaskan oleh Sina setelah saya membuat aplikasi (ini harus dirahasiakan).
Kemudian unduh Weibo SDK, saya menggunakan Weibo4j di Java.
Ubah Kunci Aplikasi dan Rahasia Aplikasi dari Kelas Weibo.java di paket SDK ke tombol aplikasi dan rahasia aplikasi yang baru saja Anda peroleh, seperti yang ditunjukkan dalam instruksi berikut untuk digunakan:
Setelah menyelesaikannya, Anda dapat mulai menulis kode berdasarkan demo yang disediakan. sebagai berikut:
Weboauth.java digunakan untuk menginisialisasi kunci aplikasi dan rahasia aplikasi yang diperlukan untuk kelas Weibo.java, dan menyediakan metode untuk mendapatkan reRequestToken () dan gettaccesstoken () untuk mendapatkan requestToken dan mengakses token. Parameter yang diperlukan ditampilkan dalam kode. Selain itu, metode untuk mempublikasikan teks yang Weibo juga disediakan untuk memperbarui ().
paket weibo4j.examples; impor weibo4j.status; impor weibo4j.weibo; impor weibo4j.weiboException; impor weibo4j.http.accesstoken; impor weibo4j.http.requesttoken; impor java.io.unsupportedencodingException; // Web Authentication Public Class WeboAuth {Private Weibo Weibo; weboauth publik () {// Mempersiapkan kunci konsumen dan rahasia konsumen // sesuai dengan aplikasi Sina Weibo adalah aplikasi yang Anda terapkan untuk kunci kunci dan rahasia. System.setProperty ("weibo4j.oauth.consumersecret", weibo.consumer_secret); weibo = weibo baru (); } // Dapatkan permintaan token public requestToken sesuai dengan callback_url public yang masuk getRequestToken (string backurl) {coba {// tentukan callback_url dan dapatkan permintaan token requestToken requestToken = weibo.getoauthrequestToken (backurl); System.out.println ("Token Permintaan:" + requestToken.getToken ()); System.out.println ("Permintaan Token Secret:" + RequestToken.gettokensecret ()); pengembalian requestToken; } catch (Exception e) {System.out.println ("Pengecualian terjadi saat mendapatkan token permintaan!"); e.printstacktrace (); kembali nol; }} // Dapatkan Akses Token Publik Berdasarkan Token Permintaan yang Tidak Ada dan Verifier AccessToken GetTAccessToken (RequestToken RequestToken, String Verifier) {coba {AccessToken AccessToken = weibo.getoAuthAccessToken (requestToken .getToken (), requestToken.gettokencret () System.out.println ("Token Access:" + AccessToken.getToken ()); System.out.println ("Access Token Secret:" + AccessToken.gettokensecret ()); kembali AccessToken; } catch (Exception e) {System.out.println ("Pengecualian terjadi saat mendapatkan Token Akses!"); e.printstacktrace (); kembali nol; }} // Posting Weibo berdasarkan pada Token Akses yang masuk dan konten pembaruan public void (AccessToken Access, String Content) {coba {weibo.settoken (access.getToken (), access.gettokensecret ()); content = string baru (content.getBytes ("gbk"), "UTF-8"); Status status = weibo.updatestatus (konten); System.out.println ("berhasil diposting di weibo:" + status.gettext () + "."); } catch (UnsupportedEncodingException e) {System.out.println ("Pengecualian terjadi ketika konten Weibo dikonversi menjadi pengkodean!"); e.printstacktrace (); } catch (WeiboException e) {System.out.println ("Pengecualian terjadi ketika Weibo memposting pengecualian!"); e.printstacktrace (); }}} request.jsp digunakan untuk memberikan callback_url (di sini kita menyesuaikannya sebagai callback.jsp di berikut ini). Setelah mendapatkan RequestToken, simpan RequestToken ke dalam sesi dan arahkan ulang halaman ke Callback.jsp untuk verifikasi dan otorisasi. < %@ page contentType = "Teks/html; charset = utf-8" %> < %@ halaman bahasa = "java" import = "weibo4j.*" %> < %@ halaman bahasa = "java" impor = "weibo4j.http.*" %> < %@ page language = "java" impor = "weibo. id = "weboAuth" scope = "session"/> <% if ("1" .equals (request.getParameter ("opt"))) {// lewati di 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 ("AuthorizationUrl:" + URL); //Barebonesbrowserlaunch.openurl(callback_url); //response.sendredirect (requestToken.getauthorizationUrl ()); // Redirect ke halaman otentikasi Sina Weibo dengan alamat callback callback_url yang dilampirkan pada respons.sendredirect (url); } else {out.println ("kesalahan permintaan"); }} else { %> <a href = "request.jsp? opt = 1"> Silakan klik otentikasi oAuth dalam metode web! </a> < %} %>
callback.jsp. Setelah mengarahkan kembali pada langkah sebelumnya, parameter OAuth_Verifier akan dilampirkan ke Callback_Url. Pada saat ini, kami mengajukan permohonan untuk mendapatkan AccessToken berdasarkan permintaan yang disimpan dalam sesi dan parameter OAuth_Verifier yang diperoleh. Setelah AccessToken diperoleh, kami mengarahkan halaman ke WriteWeibo.html, halaman yang menulis Weibo.
<%@ page contentType = "Teks /html; charset = utf-8"%> <%@ halaman bahasa = "java" impor = "weibo4j.http.*"%> <%@ page language = "java" impor = "weibo4j.*"%> <jsp: usebean id = "weboiFer =" weibo4j.*"%> <jsp: usebean id iD =" weboAnon = "weibo4j."%> <jsp: usebean id iD = "weBoAnt" weibo4j. " Http request string verifier = request.getParameter ("oauth_verifier"); out.println ("oauth_verifier:"+verifier); System.out.println ("oauth_verifier:"+verifier); if (verifier! = null) {requestToken requestToken = (requestToken) session.getAttribute ("requestToken"); if (requestToken! = null) {accessToken accessToken = weboAuth.gettAccessToken (requestToken, verifier); if (accessToken! = null) {coba {session.setAttribute ("accessToken", accessToken); out.println ("5 pergi ke writeWeibo.html"); Thread.sleep (5000); response.sendredirect ("http: // localhost: 8080/sinaweibo/writeWeibo.html"); } catch (Exception e) {E.PrintStackTrace (); }} else {out.println ("Kesalahan Permintaan Token Akses"); }} else {out.println ("Permintaan Token Session Error"); }} else {out.println ("verifier string error"); } %> writeWeibo.html, file html yang sangat sederhana. <html> <head> <title> memposting sina weibo </itement> </head> <body bgcolor = "#d0d0d0"> <form Action = "updateWeibo.jsp" Metode = "POST"> Harap tulis teks dalam 140 karakter di sini: </br> <textarea name = "weibotex" baris = "3" </textarea> </br> <input type = "kirim" value = "publish"> <input type = "reset" value = "clear"> </br> </form> </body> </html> updateWeibo.jsp, digunakan untuk mengirim teks weibo, yaitu, memanggil metode pembaruan di weboauth.java. <%@ page contentType="text/html;charset=utf-8" %> <%@ page language="java" import="weibo4j.http.*" %> <%@ page language="java" import="weibo4j.*" %> <jsp:useBean id="weboauth" scope="session" /> <% AccessToken accessToken = (AccessToken) session.getAttribute ("AccessToken"); String weibotext = (string) request.getParameter ("weibotext"); // Posting berkelanjutan dari konten Weibo yang sama akan mengembalikan 400 kesalahan weboauth.update (AccessToken, Weibotext); out.println ("Weibotext diterbitkan dengan sukses!"); %>
Sebelum berjalan, kita perlu menyiapkan Tomcat dan memasukkan file sumber di atas ke direktori yang benar. Selain itu, Anda juga harus menambahkan paket Commons-httpclient- 3.1.jar dalam paket SDK di direktori /web-inf /lib, serta weibo4j.jar yang saya kumpulkan dan dikemas sendiri (yang merupakan implementasi Java spesifik dalam platform terbuka Sina Weibo).
Jalankan Tomcat dan akses halaman permintaan.jsp di browser Anda, seperti yang ditunjukkan pada gambar di bawah ini:
Klik tautan di dalamnya, seperti yang ditunjukkan pada gambar di bawah ini (perhatikan perubahan di bilah alamat):
URL bilah alamat adalah sebagai berikut:
http://api.t.sina.com.cn/oauth/authorize?oauth_token=efda6f2499877d0e6d814f8c3d31a1d1&oauth_callback=http://localhost:8080/sinawback
Isi akun dan kata sandi Sina Weibo yang spesifik dan valid dan mengizinkannya. Berikut ini adalah hasil mengisi akun Weibo saya untuk menguji dan mengesahkannya:
URL bilah alamat adalah sebagai berikut:
http: // localhost: 8080/Sinaweibo/writeWeibo.html
Klik "Publikasikan", seperti yang ditunjukkan di bawah ini:
Masuk ke Weibo untuk melihatnya, seperti yang ditunjukkan di bawah ini:
Lihat daftar aplikasi yang disahkan oleh akun ini:
Pada titik ini, mungkin proses ini tentang metode OAuth untuk menggunakan platform terbuka Sina Weibo untuk memposting Weibo.
ringkasan:
1. Faktanya, masih ada banyak detail yang belum saya sebutkan. Saya telah mencoba berkali -kali sebelum saya menemukan masalahnya, memahami masalahnya, dan kemudian menyelesaikan masalah;
2. Jika cookie untuk login kami ke Informasi Akun Sina Weibo telah disimpan di browser, maka Anda tidak perlu memasukkan informasi akun saat mengesahkannya. Tentu saja, Anda juga dapat memodifikasinya tanpa menggunakan akun saat ini untuk otorisasi;
3. Ada juga beberapa informasi yang dimasukkan oleh konsol, seperti token, URL, dan informasi pengembalian server, yang tidak diberikan dalam tangkapan layar.