Aunque la plataforma Open Sina Weibo proporciona descargas SDK de desarrollo en varios idiomas, cada uno viene con algunos documentos de descripción de demostración e interfaz para llamadas de interfaz básicas. Sin embargo, después de intentar pacientemente en estos días, creo que la guía de introducción sobre la plataforma abierta de Sina Weibo es algo inconsistente con las anotaciones de uso de demostración en el paquete de desarrollo Java descargado Weibo4j. Además, mi propia capacidad de comprensión es limitada, lo que lleva a muchos problemas discretos. Afortunadamente, no dejé de tratar de entenderlo. Menos tonterías, el siguiente es mi proceso de aprendizaje.
Si desea desarrollar su propia aplicación Weibo llamando a la API de la plataforma Open Sina Weibo, el primer paso es tener una cuenta Sina Weibo y una cuenta CSDN, porque necesitamos usar estas dos cuentas para crear aplicaciones Weibo al mismo tiempo para obtener la clave de la aplicación y la clave secreta. Entonces, ¿cuáles son los usos de la tecla APP y la clave secreta?
De hecho, acabo de leer una serie de explicaciones en la plataforma abierta de Sina Weibo, pero no entendí cómo son útiles la clave de la aplicación y la clave secreta. Porque lo más importante es comprender todo el proceso de autenticación y autorización de OAuth, así como el papel de varios tokens y 4 URL en todo el proceso de autenticación y autorización de OAUTH.
Cuando conocí a Oauth, lo que no tenía idea, pensé que no podría seguir aprendiendo. Afortunadamente, encontré los siguientes artículos, que son muy útiles para comprender OAuth. El enlace es el siguiente:
Hay 3 participantes en OAuth, a saber, el usuario, el proveedor de servicios y el consumidor. Supongamos que quiero desarrollar una aplicación (aplicación) basada en la plataforma Open Sina Weibo para que otros usuarios de Sina Weibo lo usen. Su correspondencia es la siguiente:
De hecho, nuestra aplicación es equivalente a una aplicación de terceros para el usuario y el proveedor (plataforma Sina Weibo). Como una aplicación de terceros, si desea acceder a los recursos guardados por el usuario en la plataforma Sina Weibo, debe someterse a una serie de autenticación y autorización antes de que pueda funcionar.
El siguiente es un diagrama basado en mi comprensión de todo el proceso de autenticación y autorización de OAuth (puede echar un vistazo y omitirlo. Después de tener una cierta comprensión de algunos de los conceptos a continuación, mirará hacia atrás en este diagrama de flujo):
Combinando el diagrama de flujo anterior, aquí está mi comprensión de estos términos y descripción de cada proceso:
Clave del consumidor y secreto del consumidor: las plataformas abiertas en Sina Weibo se denominan clave de aplicación y clave secreta respectivamente. El consumidor se aplica al proveedor para poder llamar a su API abierta. Después de aprobar la solicitud, el proveedor será asignado al consumidor que cumple con sus requisitos, que se utiliza para identificar de manera única que el consumidor cumpla con los requisitos del proveedor.
Correspondiente a los flujos 1 y 2 en la figura anterior.
Solicitar token, Solicitar secreto: cuando el usuario accede al consumidor y desea obtener su servicio especial, el consumidor devuelve el servicio después de integrar los recursos almacenados en el propio usuario. En este momento, el consumidor solicita al proveedor que obtenga un token de solicitud, que se utiliza para identificar de manera única la asociación específica entre el consumidor y el usuario.
Correspondiente a los flujos 3, 4 y 5 en la figura anterior.
Para el proceso 6, el consumidor debe dirigir al usuario a la página de autenticación y autorización de OAuth proporcionada por el proveedor. De hecho, el navegador redirige a la autenticación con el token de solicitud y los parámetros secretos de solicitud adjuntos. Esta URL es proporcionada por el proveedor.
A continuación, en el proceso 7 y 8, el usuario autoriza al consumidor (generalmente solo inicia sesión ingresando la cuenta y la contraseña), el proveedor redirigirá a Callback_Url proporcionado por el consumidor en el proceso 1 y adjunta el verificador de token y OAUTH a los parámetros de URL.
El proceso 9 es el proveedor del consumidor nuevamente que obtenga nuevamente el token de acceso a través del token de solicitud que se ha obtenido del proveedor antes.
Token de acceso, secreto de acceso: si el proveedor devuelve un token de acceso sin la autorización del usuario en el proceso 10, se utiliza para identificar de manera exclusiva los recursos y la información almacenados en el proveedor de cierto consumidor. Luego, el consumidor puede comenzar a usar el token de acceso obtenido y el secreto de acceso para acceder a los recursos almacenados en el proveedor por el usuario correspondiente.
Después de integrar y operar la información del usuario en el proceso 11, los resultados específicos del servicio se pueden devolver al usuario.
A través de la comprensión anterior del proceso OAuth, sabemos que el usuario no ha filtrado la cuenta, la contraseña, etc. requerida para iniciar sesión en el proveedor al consumidor de terceros. Al mismo tiempo, el usuario puede usar los servicios especiales del consumidor. ¡Qué proceso de operación tan inteligente y seguro!
Además, en la figura anterior, el consumidor ha realizado diferentes solicitudes del proveedor. De hecho, el proveedor proporciona a 3 URL diferentes funciones para el acceso al consumidor. Las capturas de pantalla de estas 3 URL en la plataforma Open Sina Weibo son las siguientes:
Use la verificación OAuth y publique en la plataforma Open Sina Weibo
Para usar la API de la plataforma Open Sina Weibo, primero debe obtener la clave de aplicación y el secreto de la aplicación asignados por SINA. A continuación se presentan la clave de la aplicación y el secreto de la aplicación asignados por SINA después de que creé la aplicación (esto debe mantenerse confidencial).
Luego descargue el SDK de Weibo, uso Weibo4j en Java.
Modifique la clave de aplicación y el secreto de la aplicación de la clase Weibo.java en el paquete SDK a la clave de la aplicación y el secreto de la aplicación que acaba de obtener, como se muestra en las siguientes instrucciones para su uso:
Después de completarlos, puede comenzar a escribir código basado en la demostración proporcionada. como sigue:
Weboauth.java se usa para inicializar la clave de la aplicación y el secreto de la aplicación requerido para la clase Weibo.java, y proporciona métodos para GetRequestToken () y getTaccessToken () para obtener request Token y Token de acceso. Los parámetros requeridos se muestran en el código. Además, también se proporciona un método para publicar un texto Weibo para actualizar ().
paquete weibo4j.examples; importe weibo4j.status; importar weibo4j.weibo; importe weibo4j.weiboException; importe weibo4j.http.accesstoken; importe weibo4j.http.requesttoken; import java.io.unsupportedencodingException; // autenticación web de clase pública WeboAuth {Weibo Weibo privado; public WeboAuth () {// Prepare la clave del consumidor y el secreto del consumidor // correspondiente a la aplicación Sina Weibo es la aplicación que solicitó para el sistema clave y secreto System.SetProperty ("Weibo4j.oauth.consumerkey", weibo.consumer_key); System.SetProperty ("weibo4j.oauth.consumersecret", weibo.consumer_secret); weibo = new Weibo (); } // Obtener solicitud Token Public SoldToken de acuerdo con el entrante llamado de Callback_url SolicToken GetRequestToken (String BackUrl) {try {// especifique callback_url y obtenga la solicitud token requestToken requestToken = weibo.getouthrequestToken (backUrl); System.out.println ("Solicitar token:" + requestToken.getToken ()); System.out.println ("Solicitar secreto de token:" + requestToken.gettokensecret ()); devolver requestToken; } Catch (Exception e) {System.out.println ("¡La excepción ocurrió al obtener el token de solicitud!"); E.PrintStackTrace (); regresar nulo; }} // Obtenga el token de acceso público basado en el token de solicitud entrante y el verificador Accesstoken getTaccessToken (requestToken requestToken, verificador de cadena) {try {accesstoken accesstoken = weibo.getOauthaccesstoken (requestToken .getToken (), requesttoken.gettokensecret (), verifier);;;;;;;;;;;;;;;;;;;;;;;; System.out.println ("Access Token:" + AccessToken.getToken ()); System.out.println ("Access Token Secret:" + Accesstoken.gettokensecret ()); regresar accesstoken; } Catch (Exception e) {System.out.println ("¡La excepción ocurrió al obtener el token de acceso!"); E.PrintStackTrace (); regresar nulo; }} // Publicar Weibo basado en el token de acceso entrante y el contenido de la actualización pública void (AccessToken Access, String Content) {try {weibo.setToken (access.getToken (), access.gettokensecret ()); content = new String (content.getBytes ("GBK"), "UTF-8"); Estado de estado = weibo.updatestatus (contenido); System.out.println ("publicado con éxito en Weibo:" + status.gettext () + "."); } Catch (UnsupportedEncodingException e) {System.out.println ("¡La excepción ocurrió cuando el contenido de Weibo se convirtió en codificación!"); E.PrintStackTrace (); } Catch (WeiboException e) {System.out.println ("¡La excepción ocurrió cuando Weibo publicó una excepción!"); E.PrintStackTrace (); }}} request.jsp se usa para proporcionar Callback_url (aquí lo personalizamos como Callback.jsp en lo siguiente). Después de obtener el request Token, guarde el SolicToken en la sesión y redirige la página a callback.jsp para verificación y autorización. < %@ page contentType = "text/html; charset = utf-8" %> < %@ page language = "java" import = "weibo4j.*" %> < %@ page lenguaje = "java" import = "weibo4j.http.*" %> < %@ page idioma = "java" import = "weibo4j.util.*" %> <jsp: us onebeean id = "weboAuth" scope = "session"/> <% if ("1" .equals (request.getParameter ("opt"))) {// pase en callback_url string callback_url = "http: // localhost: 8080/senaweibo/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 ("AutorizationUrl:" + url); //Barebonesbrowserlaunch.openurl(callback_url); //Response.Sendedirect (requestToken.getAuthorizationUrl ()); // redirigir a la página de autenticación de Sina Weibo con la dirección de devolución de llamada Callback_url adjunta a la respuesta.sendedirect (URL); } else {out.println ("Error de solicitud"); }} else { %> <a href = "request.jsp? Opt = 1"> ¡Haga clic en la autenticación OAuth en el método web! </a> < %} %>
callback.jsp. Después de redirigir en el paso anterior, el parámetro OAuth_verifier se adjuntará al Callback_url. En este momento, solicitamos obtener el AccessToken en función de la solicitud de requisito guardada en la sesión y el parámetro OAuth_verifier obtenido. Una vez que se obtiene AccessToken, redirigimos la página a WriteWeibo.html, la página que escribe Weibo.
<%@ página contentType = "text /html; charset = utf-8"%> <%@ page lenguaje = "java" import = "weibo4j.http.*"%> <%@ page lenguaje = "java" import = "weibo4j.*"%> <jsp: useBean id = "woBoaut" en http solicitud de cadena verificador = request.getParameter ("oauth_verifier"); out.println ("oauth_verifier:"+verificador); System.out.println ("oauth_verifier:"+verificador); if (verifier! = null) {requestToken requestToken = (requestToken) session.getAttribute ("requestToken"); if (requestToken! = null) {accessToken accesstoken = weboauth.gettaccesstoken (requestToken, verificador); if (accessToken! = null) {try {session.setAttribute ("accessToken", accessToken); out.println ("5 vaya a writeweibo.html"); Thread.sleep (5000); Response.sendedirect ("http: // localhost: 8080/sinaweibo/writeweibo.html"); } catch (Exception e) {E.PrintStackTrace (); }} else {out.println ("Error de solicitud de token de acceso"); }} else {out.println ("Error de sesión de token de solicitud"); }} else {out.println ("error de cadena de verificador"); } %> WriteWeibo.html, un archivo HTML muy simple. <html> <cead> <title> Publicado Sina Weibo </title> </head> <body bgcolor = "#d0d0d0"> <form de acción = "updateweibo.jsp" método = "post"> Por favor, escriba texto dentro de 140 caracteres aquí: </br> <textarea name = "weibotext" Rows = "3" Cirs = "30" </textAREA> </br> <input type = "Subt" value = "Publish"> <input type = "reset" value = "clare"> </br> </form> </body> </html> updateweibo.jsp, utilizado para publicar el texto Weibo, es decir, llamar al método de actualización en Weboauth.Java. <%@ page contentType = "text /html; charset = utf-8"%> <%@ page lenguaje = "java" import = "weibo4j.http.*"%> <%@ page lenguaje = "java" import = "weibo4j.*"%> <jsp: useBean id = "weBoAuth" scope = "session" /> <%sess "<%sessye. (AccessToken) session.getAttribute ("AccessToken"); String weibotext = (string) request.getParameter ("weibotext"); // La publicación continua del mismo contenido de Weibo devolverá 400 errores Weboauth.update (AccessToken, Weibotext); out.println ("Weibotext publicado con éxito!"); %>
Antes de ejecutar, necesitamos preparar Tomcat y poner el archivo fuente anterior en el directorio correcto. Además, también debe agregar el paquete Commons-HttpClient-3.1.JAR en el paquete SDK en el directorio /Web-INF /LIB, así como el Weibo4j.Jar que compilé y empaqueté (que es la implementación específica de Java en la plataforma Open Sina Weibo).
Ejecute Tomcat y acceda a la página request.jsp en su navegador, como se muestra en la figura a continuación:
Haga clic en el enlace en él, como se muestra en la figura a continuación (tenga en cuenta los cambios en la barra de direcciones):
La URL de la barra de direcciones es la siguiente:
http://api.t.sina.com.cn/oauth/Authorize
Complete la cuenta y contraseña de Sina Weibo específica y válida y autoríquela. Los siguientes son los resultados de completar mi cuenta de Weibo para probarlo y autorizarla:
La URL de la barra de direcciones es la siguiente:
http: // localhost: 8080/sinaweibo/writeweibo.html
Haga clic en "Publicar", como se muestra a continuación:
Inicie sesión en Weibo para verlo, como se muestra a continuación:
Consulte la lista de aplicaciones autorizadas por esta cuenta:
En este punto, probablemente sea este proceso sobre el método OAuth para usar la plataforma Open Sina Weibo para publicar Weibo.
resumen:
1. De hecho, todavía hay muchos detalles que no he mencionado. Lo he intentado muchas veces antes de descubrir el problema, entendí el problema y luego resolví el problema;
2. Si las cookies para nuestro inicio de sesión en la información de la cuenta Sina Weibo se han guardado en el navegador, entonces no necesita ingresar la información de la cuenta al autorizarla. Por supuesto, también puede modificarlo sin usar la cuenta corriente para la autorización;
3. También hay información sobre la consola, como la información de retorno de token, URL y servidor, que no se proporciona en capturas de pantalla.