2012-11-05 6 views
11

Ho un'applicazione in cui, con un account di servizio di Google , raccolgo molte informazioni sul mio sito dall'API di Analytics. Il mio prossimo passo è creare un foglio di calcolo con l'account di servizio e condividere il documento con un paio di utenti.Come posso creare un foglio di calcolo di Google con un account di servizio e condividere con altri utenti google in java?

Ho controllato la documentazione allo https://developers.google.com/google-apps/spreadsheets/ ma non riesco a trovare nulla lì sugli account di servizio e sulla condivisione dei documenti.

Quindi la mia prima domanda è possibile? In caso contrario, devo implementare l'opzione "usa il mio account personale" come esemplificato nella documentazione? Se sì, potresti per favore fornirmi un esempio?

Grazie!

+0

qualsiasi soluzione finale hai provato? –

risposta

15

E 'possibile, vedere l'esempio seguente (l'esempio ha bisogno di un po' di tweaking):

creare il servizio di azionamento:

GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT).setJsonFactory(JSON_FACTORY) 
      .setServiceAccountId(confBean.getServiceAccountId()).setServiceAccountScopes("https://www.googleapis.com/auth/drive") 
      .setServiceAccountPrivateKeyFromP12File(new File("path to the P12File")) 
      .setServiceAccountUser("[email protected]") 
      .build(); 

    Drive drive = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).build(); 

Creare il foglio di calcolo:

com.google.api.services.drive.model.File file = new com.google.api.services.drive.model.File(); 
    file.setTitle("test");  
    file.setMimeType("application/vnd.google-apps.spreadsheet"); 
    Insert insert = this.drive.files().insert(file); 
    file = insert.execute(); 

Creare un servizio di foglio di calcolo:

GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT).setJsonFactory(JSON_FACTORY) 
     .setServiceAccountId(confBean.getServiceAccountId()).setServiceAccountScopes("https://spreadsheets.google.com/feeds") 
     .setServiceAccountPrivateKeyFromP12File(new File("path to the P12File")) 
     .setServiceAccountUser("[email protected]") 
     .build(); 
SpreadsheetService service = new SpreadsheetService("MySpreadsheetIntegration-v1"); 
service.setOAuth2Credentials(credential); 

Recuperare il foglio:

SpreadsheetService s = googleConn.getSpreadSheetService(); 
String spreadsheetURL = "https://spreadsheets.google.com/feeds/spreadsheets/" + file.getId(); 
SpreadsheetEntry spreadsheet = s.getEntry(new URL(spreadsheetURL), SpreadsheetEntry.class); 

aggiungere i dati:

WorksheetFeed worksheetFeed = s.getFeed(spreadsheet.getWorksheetFeedUrl(), WorksheetFeed.class); 
List<WorksheetEntry> worksheets = worksheetFeed.getEntries(); 
WorksheetEntry worksheet = worksheets.get(0); 

URL cellFeedUrl= worksheet.getCellFeedUrl(); 
CellFeed cellFeed= s.getFeed (cellFeedUrl, CellFeed.class); 

CellEntry cellEntry= new CellEntry (1, 1, "aa"); 
cellFeed.insert (cellEntry); 

Inoltre, si veda questo correlato question

+0

Grazie per la risposta, ma ho riscontrato alcuni problemi con l'impl. Quando si esegue setServiceAccountUser ("[email protected]") ottengo un TokenResponseException: 400 Richiesta errata "errore": "access_denied" indietro dall'API. Se rimuovo la parte setServiceAccountUser ottengo un errore del server interno 500. Ho attivato l'API di Google Drive e l'SDK di Google Drive nella console dei servizi di Google. Cosa mi manca qui? Non c'è alcun problema con l'analisi come descrivo qui: http://stackoverflow.com/questions/9084840/google-analytics-authorization-in-java/12892390#12892390 – jakob

+0

Assicurati di abilitare sia l'unità che i documenti api nel api console e autorizza l'applicazione per: https://docs.google.com/feeds https://spreadsheets.google.com/feeds https://www.googleapis.com/auth/drive. E presumo che tu abbia cambiato [email protected] in un vero utente nel dominio? –

+0

Hmm Mi sembra che mi manchi una parte cruciale qui. – jakob

Problemi correlati