2016-04-15 1 views
0

Ich versuche, eine Java-Anwendung zu erstellen, die Befehlszeile aus einem Shell-Skript in einem Cron-Job ausführt. In diesem Fall werde ich keinen Benutzer haben, der zustimmt, den Zugriff in einem Browser zu erlauben. Diese Anwendung fragt ein Verzeichnis ab und lädt Videos in diesem Verzeichnis auf YouTube hoch. Ich bin neu in der YouTube API und auch in Oauth2.0. Bei all den Recherchen, die ich gemacht habe, sehe ich viele widersprüchliche Informationen darüber, wie ich erreichen kann, was ich versuche zu tun.Google OAuth 2.0 auf serverseitige Anwendung

Hier ist mein Code. Bitte lassen Sie mich wissen, wo Sie mich falsch liegen sehen. Danke im Voraus!

public static Credential autorisieren (List Tive, String credentialDatastore) throws IOException {

// Load client secrets. 
    //Reader clientSecretReader = new InputStreamReader(Auth.class.getResourceAsStream("/main/resources/client_secrets.json")); 
    Reader clientSecretReader = new InputStreamReader(Auth.class.getResourceAsStream("/main/resources/client_secret_file.apps.googleusercontent.com.json")); 
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, clientSecretReader); 

    // Checks that the defaults have been replaced (Default = "Enter X here"). 
    if (clientSecrets.getDetails().getClientId().startsWith("Enter") 
      || clientSecrets.getDetails().getClientSecret().startsWith("Enter ")) { 
     System.out.println(
       "Enter Client ID and Secret from https://console.developers.google.com/project/_/apiui/credential " 
         + "into src/main/resources/client_secrets.json"); 
     System.exit(1); 
    } 

    // This creates the credentials datastore at ~/.oauth-credentials/${credentialDatastore} 
    // THIS IS WHERE I NEED TO CHANGE, TO WORK WITH THIS APP!!!! 
    // FileDataStoreFactory fileDataStoreFactory = new FileDataStoreFactory(new File(System.getProperty("user.home") + "/" + CREDENTIALS_DIRECTORY)); 
    FileDataStoreFactory fileDataStoreFactory = new FileDataStoreFactory(new File("." + "/" + CREDENTIALS_DIRECTORY)); 
    DataStore<StoredCredential> datastore = fileDataStoreFactory.getDataStore(credentialDatastore); 

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
      HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, scopes).setCredentialDataStore(datastore).setAccessType("offline") 
      .build(); 

    // Build the local server and bind it to port 8080 
    // LocalServerReceiver localReceiver = new LocalServerReceiver.Builder().setPort(8080).build(); 
    LocalServerReceiver localReceiver = new LocalServerReceiver.Builder().setPort(8080).build(); 

    // Authorize. 
    try { 
     Credential returnCreds = new AuthorizationCodeInstalledApp(flow, localReceiver).authorize("xxxxxxxxxxxxxxxxxxx"); 
     returnCreds.refreshToken(); 

     return returnCreds; 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    // if not authorized, will return a null credential 
    return null; 
} 
+0

Ich weiß, wenn die Dinge so enden, wie ich möchte, werde ich diesen localReceiver nicht verwenden, um den Browser zu erzeugen. Kann ich sogar tun, was ich hier machen will. Ich werde IMMER den gleichen youTube-Account nutzen, da ich ausschließlich unsere Videos posten werde. – james

Antwort