Kode berikut berfungsi dengan baik ketika saya mencari video menggunakan API YouTube Google (versi 3) tetapi gagal ketika mencoba:
Playlist youTubePlaylist = new Playlist();
youTubePlaylist.setSnippet(playlistSnippet);
youTubePlaylist.setStatus(playlistStatus);
YouTube.Playlists.Insert command = youTube.playlists().insert("snippet,status", youTubePlaylist);
youTubePlaylist.setKey("AI...1IU");
youTubePlaylist.execute();
Pada langkah kredensial saya mendapatkan accessToken tetapi kegagalan terjadi di youTubePlaylist.execute():
{
"access_token" : "ya29...DSoQ",
"expires_in" : 3600,
"token_type" : "Bearer"
}
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Insufficient Permission",
"reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
at ...publication.youtube.YouTubeAPIVersion3Connector.execute(YouTubeAPIVersion3Connector.java:107)
at ...publication.youtube.YouTubeAPIVersion3ServiceImpl.createPlaylist(YouTubeAPIVersion3ServiceImpl.java:119)
Otentikasi dilakukan sebagai berikut:
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
File privateKeyP12 = new File(getYouTubeConfigDirectory(), "/private-key-youtube-v3.p12");
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId("[email protected]")
.setServiceAccountScopes(Collections.list(YouTubeScopes.YOUTUBE_READONLY, YouTubeScopes.YOUTUBE_UPLOAD))
.setServiceAccountPrivateKeyFromP12File(privateKeyP12)
.setClientSecrets("9...42.apps.googleusercontent.com", "DH...w8")
.setRefreshListeners(getRefreshListeners())
.build();
}
return new YouTube.Builder(httpTransport, jsonFactory, credential).setApplicationName(googleAppAccountName).build();
Perlu diingat, Saya TIDAK melakukan operasi YouTube atas nama pengguna lain. Aplikasi web saya mengelola video di saluran YouTube-nya sendiri. Apa yang sudah saya lakukan:
- melalui Google Cloud Console, saya mengaktifkan YouTube v3 API, membuat aplikasi dengan izin untuk mengedit
- Saya membuat file kunci pribadi p12 yang dimuat oleh kode di atas
- Saya menggunakan kunci API pada semua operasi
Apa yang saya lewatkan? Misalnya: - apa yang harus saya lakukan dengan Sidik Jari Kunci Publik yang disediakan oleh Google Cloud Console? - apakah saya menyetel setServiceAccountScopes() dengan benar hanya dengan YouTubeScopes.YOUTUBE_READONLY dan YouTubeScopes.YOUTUBE_UPLOAD? - Apakah ada cara agar saya dapat mengontrol izin selain menyetel "Dapat Mengedit" di Cloud Console untuk email: [email protected]?
Bagian dari rasa frustrasi saya adalah bahwa semua contoh kode yang disediakan oleh situs API YouTube v3 melibatkan pembuatan toolkit AWT "tanpa kepala". Yang ingin dilakukan aplikasi saya hanyalah mengautentikasi menggunakan akun YouTube-nya sendiri.
Terima kasih atas saranmu.