作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用授权码将视频上传到 Youtube。
public Credential authorize(List scopes, String credentialDatastore) throws IOException, URISyntaxException {
// Load client secrets.
URI filePath = new URI (GOOGLE_APIKEY);
Reader clientSecretReader =new InputStreamReader(new FileInputStream(filePath.toString()));
//Reader clientSecretReader = new InputStreamReader(Auth.class.getResourceAsStream(GOOGLE_APIKEY));
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}
FileDataStoreFactory fileDataStoreFactory = new FileDataStoreFactory(new File(System.getProperty("user.home") + "/" + CREDENTIALS_DIRECTORY));
DataStore datastore = fileDataStoreFactory.getDataStore(credentialDatastore);
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, scopes).setCredentialDataStore(datastore).build();
// Build the local server and bind it to port 8080
LocalServerReceiver localReceiver = new LocalServerReceiver.Builder().setPort(8080).build();
// Authorize.
return new AuthorizationCodeInstalledApp(flow, localReceiver).authorize("user");
}
这是有效的,每次上传视频时用户都必须进行身份验证。现在我想要使用从我已经拥有的刷新 token 生成的访问 token 上传视频。但需要集成到我的 Auth 文件中,该文件具有 LocalServerReceiver,因为在内部使用 Jetty 服务器。
我已经编写了从刷新 token 中获取访问 token 的代码。请帮助我集成它。
public GoogleCredential getCredentials(String clientId,String clientSecret,JsonFactory jsonFactory,HttpTransport transport,String refreshToken) throws IOException{
GoogleCredential credential = new GoogleCredential.Builder()
.setClientSecrets(clientId, clientSecret)
.setTransport(transport)
.setJsonFactory(jsonFactory)
.build();
credential.setRefreshToken(refreshToken);
// Do a refresh so we can fail early rather than return an unusable credential
credential.refreshToken();
String authCode=credential.getAccessToken();
return credential;
}
最佳答案
在使用 google-java-api 上传 Youtube 视频时,我特别遇到了两个问题
new LocalServerReceiver.Builder()
类中有一个名为 setHost()
的函数负责创建本地 jetty 服务器实例,但它通过一个 每次给出主机名时都无法分配请求的地址错误,无论端口如何,这无关紧要。整个授权过程在AuthorizationCodeInstalledApp类的authorize方法中完成,主要功能如下
为了分离整个过程,我创建了一个新类ExtendedAuthorizationCodeInstalledApp,它扩展了原始的AuthorizationCodeInstalledApp,并为类中的每个函数创建了每个方法。方法如下
代码实现是here
感谢@KENdi 的建议...
关于java - 如何在 java 中使用 refreshtoken 在 Youtube 中上传视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39575017/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!