java - trucos - google calendar para pc
Acceso sin conexión al calendario de google usando java (1)
Tenemos código para sincronizar nuestro calendario de aplicaciones con el calendario de google del usuario conectado. El código está utilizando la clase AuthSub y CalendarService, pero no proporciona acceso sin conexión al calendario de Google mediante el token de acceso y el token de actualización para los que deseo utilizar OAuth v3 utilizando la clase de calendario. Tengo problemas para fusionar mi código anterior con la nueva clase de calendario v3 que no tiene la función getFeed (). Aquí hay un código de mi aplicación
if(StringUtil.isValid(request.getQueryString())) {
onetimeUseToken = AuthSubUtil.getTokenFromReply(request.getQueryString());
}
if(StringUtil.isValid(onetimeUseToken)) {
String sessionToken = AuthSubUtil.exchangeForSessionToken(onetimeUseToken,null);
CalendarService calendarService = new CalendarService("myapp");
calendarService.setAuthSubToken(sessionToken, null);
session.setAttribute("calendarServicesession",calendarService);
userIDforCalendar = (String) session.getAttribute("calendar_user_no");
}
CalendarFeed myResultsFeed1 =service.getFeed(new URL("https://www.google.com/calendar/feeds/default/allcalendars/full"),CalendarFeed.class);
for (int i = 0; i < myResultsFeed1.getEntries().size(); i++) {
CalendarEntry entry = myResultsFeed1.getEntries().get(i);
.....
}
Proporcione alguna forma de dar acceso sin conexión usando CalendarService para que no tenga que cambiar mucho mi código. Esperando una respuesta rápida.
Gracias- Dravit Gupta
Google desaprobó AuthSub desde el 20 de abril de 2012. Por lo tanto, es hora de migrar a OAuth 2.0 y Google Calendar API v3. Primero descargue los archivos jar de estos siguientes enlaces:
https://google-api-client-libraries.appspot.com/download/library/calendar/v3/java
http://google-oauth-java-client.googlecode.com/files/google-oauth-java-client-1.13.1-beta.zip
Elimine los archivos del jar viejo y del Authsub de su proyecto y agregue los archivos jar desde este enlace.
A continuación, vaya a la consola google api para obtener su ID de cliente, secreto de cliente y crear un uri de redirección. Y desde la misma consola api, habilita google calendar api.
Le proporciono un código de muestra que autentica al usuario y muestra los calendarios que tiene para guardar el token de actualización que obtiene en la salida y almacenarlo para que pueda acceder al calendario sin conexión.
La siguiente función es para la autorización de OAuth.
public void authenticate(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String client_id = "xxxx";
String redirect_uri = "xxxxxx";
String scope = "https://www.googleapis.com/auth/calendar";
String client_secret = "xxxxxx";
List <String> scopes;
HttpTransport transport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
scopes = new LinkedList<String>();
scopes.add(scope);
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(transport, jsonFactory, client_id, client_secret, scopes).build();
GoogleAuthorizationCodeRequestUrl url = flow.newAuthorizationUrl();
url.setRedirectUri(redirect_uri);
url.setApprovalPrompt("force");
url.setAccessType("offline");
String authorize_url = url.build();
response.sendRedirect(authorize_url);
}
client_secret
agregar valores a las variables client_id
, client_secret
y redirect_uri
. Todos estos valores están en tu consola google api.
La función de autorización me remite a la url de autorización que me proporciona un token de acceso y un token de actualización. Sin embargo, el token de acceso caduca después de un intervalo de tiempo. Por lo tanto, si desea el token de acceso, debe almacenar el token de actualización y usarlo para generarlo cada vez que ingrese a la API del calendario.
Esta función siguiente genera token de acceso y actualización y muestra la lista de calendarios en el calendario de usuarios de Google.
public void importCalendarList(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
HttpSession session = request.getSession();
String staffKey = (String) session.getAttribute("staffKey");
ContactJdo staffDetails = staff.getStaffDetail(staffKey);
String code = request.getParameter("code");
String calendarId="";
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(transport, jsonFactory, client_id, client_secret, scopes).build();
GoogleTokenResponse res = flow.newTokenRequest(code).setRedirectUri(redirect_uri).execute();
String refreshToken = res.getRefreshToken();
String accessToken = res.getAccessToken();
List <CalendarListEntry>list1= getCalendars(accessToken);
for(CalendarListEntry temp:list1) {
System.out.println(temp.getId());
}}
Si observa la función anterior, genera tokens de acceso y de actualización. Si desea generar token de acceso nuevamente, use esta función:
public static String getAccessToken(String refreshToken, String client_id, String client_secret) throws IOException {
HttpTransport transport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleRefreshTokenRequest req = new GoogleRefreshTokenRequest(transport, jsonFactory, refreshToken, client_id, client_secret);
GoogleTokenResponse res = req.execute();
String accessToken = res.getAccessToken();
return accessToken;
}
Guarde el token de actualización en alguna parte y puede hacer todas las operaciones que se mencionan en la documentación del calendario. Encuéntralo aquí
https://google-api-client-libraries.appspot.com/documentation/calendar/v3/java/latest/index.html