2016-04-15 89 views
0

我正尝试在cron作业中创建一个从shell脚本运行命令行的java应用程序。既然如此,我不会让用户在场表示同意允许在浏览器中进行访问。此应用程序将查询目录,并将此目录中的视频上传到YouTube。我对YouTube api和Oauth2.0也很陌生。在我所做的所有研究中,我看到了很多关于如何完成我想要做的事情的相互冲突的信息。服务器端应用程序的Google OAuth 2.0

这里是我的代码。请让我知道你看到我出错的地方。提前致谢!

公共静态证书授权(名单范围,字符串credentialDatastore)抛出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

我意识到如果事情最终结束,我会不会使用localReceiver来产生浏览器..我甚至可以做我想在这里做的事情。由于我只是专门发布我们的视频,因此我总是会使用同一个youTube帐户。 – james

回答

相关问题