package crmdna.api.endpoint; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.server.spi.config.Api; import com.google.appengine.api.users.User; import com.google.gdata.client.spreadsheet.SpreadsheetService; import com.google.gdata.data.spreadsheet.ListEntry; import com.google.gdata.data.spreadsheet.ListFeed; import com.google.gdata.data.spreadsheet.SpreadsheetEntry; import com.google.gdata.data.spreadsheet.WorksheetEntry; import crmdna.common.api.APIResponse; import crmdna.common.api.APIResponse.Status; import crmdna.common.api.APIUtils; import crmdna.common.api.RequestInfo; import crmdna.gspreadsheet.GSpreadSheet; import javax.annotation.Nullable; import javax.inject.Named; import javax.servlet.http.HttpServletRequest; import java.net.URL; import java.util.List; import java.util.Map; @Api(name = "developersOnly") public class GSpreadSheetApi { public APIResponse getPublishedSpreadsheetContents(@Named("spreadSheetKey") String gsKey, @Nullable @Named("numLinesExclHeaderDefault2500") Integer numLinesExclHeader, @Nullable @Named("showStackTraceIfErrorDefaultFalse") Boolean showStackTrace, HttpServletRequest req) { try { if (numLinesExclHeader == null) numLinesExclHeader = 2500; List<Map<String, String>> listOfMap = GSpreadSheet.getPublishedSpreasheetAsListOfMap(gsKey, numLinesExclHeader); return new APIResponse().status(Status.SUCCESS).object(listOfMap); } catch (Exception ex) { return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().req(req)); } } public APIResponse readSpreadsheetContents(@Named("spreadSheetKey") String gsKey, HttpServletRequest req, User user) { try { SpreadsheetService service = new SpreadsheetService("MySpreadsheetIntegration-v1"); URL metafeedUrl = new URL( "https://spreadsheets.google.com/feeds/spreadsheets/1ce55J6l5IjXCOVfFklL9i6c0kYOHu-p9rabM9YdpBTg"); String authString = req.getHeader("Authorization"); String strBearer = "Bearer "; String accessToken = authString.substring(strBearer.length()); System.out.println(accessToken); GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken); service.setOAuth2Credentials(credential); SpreadsheetEntry spreadsheet = service.getEntry(metafeedUrl, SpreadsheetEntry.class); URL listFeedUrl = ((WorksheetEntry) spreadsheet.getWorksheets().get(0)).getListFeedUrl(); // Print entries ListFeed feed = (ListFeed) service.getFeed(listFeedUrl, ListFeed.class); for (ListEntry entry : feed.getEntries()) { System.out.println("new row"); for (String tag : entry.getCustomElements().getTags()) { System.out.println(" " + tag + ": " + entry.getCustomElements().getValue(tag)); } } // // Define the URL to request. This should never change. // URL SPREADSHEET_FEED_URL = // new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full"); // // // Make a request to the API and get all spreadsheets. // SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class); // List<SpreadsheetEntry> spreadsheets = feed.getEntries(); // // // Iterate through all of the spreadsheets returned // for (SpreadsheetEntry spreadsheet : spreadsheets) { // // Print the title of this spreadsheet to the screen // System.out.println(spreadsheet.getTitle().getPlainText()); // } return new APIResponse().status(Status.SUCCESS); } catch (Exception ex) { return APIUtils.toAPIResponse(ex, true, new RequestInfo().req(req)); } } }