Saya telah membuat kunci server di Manajer API dan mencoba menjalankan yang berikut ini di Mac saya:
curl 'https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager'
Tapi inilah yang dikembalikannya:
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
Apa yang saya lakukan salah di sini?
google-api
google-sheets
google-sheets-api
Instabrite
sumber
sumber
Jawaban:
Untuk mengatasi masalah ini, cobalah untuk:
Itu berhasil untuk saya :)
sumber
Saya tahu ini agak terlambat untuk menjawab tetapi untuk orang lain yang berjuang dengan masalah yang sama. Ubah
saja izin sheet menjadi publik di drive Anda sehingga dapat diakses tanpa otentikasi melalui panggilan API.
Untuk mengubah akses:
Kirim permintaan API untuk mengambil data dari sheet tanpa otentikasi.
Catatan: jika sheet berisi data sensitif maka tidak aman untuk membuatnya menjadi publik dan lebih baik melakukannya dengan akses yang diautentikasi.
sumber
Pastikan untuk memperhatikan komentar @ KishanPatel:
sumber
Cara termudah adalah memperbaiki menggunakan gcloud cli. Lebih banyak dokumen di sini https://cloud.google.com/pubsub/docs/quickstart-cli#before-you-begin
instal gcloud
lalu panggil
kemudian periksa proyek aktif dan kredensial Anda
Jika tidak oke, pastikan Anda diautentikasi dengan akun yang benar:
Ubah ke akun proyek jika tidak:
Bergantung pada akunnya, daftar proyek akan berbeda:
Beralih ke proyek yang dimaksud:
Kemudian Buat Kredensial Default Aplikasi dengan
gcloud auth application-default login
, lalu google-cloud akan secara otomatis mendeteksi kredensial tersebut.sumber
10 sen saya ... Contoh sederhana untuk membaca lembar menggunakan Java .
private Credential getCredentials() throws IOException { final InputStream accessKey = new ByteArrayInputStream("<credential json>"); final GoogleCredential credential = GoogleCredential.fromStream(accessKey) .createScoped(Collections.singleton(SheetsScopes.SPREADSHEETS_READONLY)); return credential; } private HttpTransport httpTransport() { try { return GoogleNetHttpTransport.newTrustedTransport(); } catch (GeneralSecurityException | IOException e) { throw new SpreadSheetServiceException(e); } } Sheets service = new Sheets.Builder(httpTransport(), JSON_FACTORY, getCredentials()) .setApplicationName("app-name") .build(); ValueRange response = service.spreadsheets().values() .get("<spread_sheet_id>", "A1:A") .execute();
sumber