Pertanyaan Asli

Saya mendaftarkan saluran tontonan untuk folder Google Drive dan menerima pemberitahuan bahwa saluran tersebut telah diperbarui. (Menggunakan Google Drive API Node.js SDK v3)

{
  host: 'my-development-host.example.com',
  'user-agent': 'APIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html)',
  'content-length': '0',
  accept: '*/*',
  'accept-encoding': 'gzip,deflate,br',
  'x-forwarded-for': 'xxx.xxx.xxx.xxx',
  'x-forwarded-proto': 'https',
  'x-goog-changed': 'children',
  'x-goog-channel-expiration': 'Tue, 11 May 2021 10:21:53 GMT',
  'x-goog-channel-id': '8f76c160-b229-11eb-a810-93ba607a525b',
  'x-goog-message-number': '1356107',
  'x-goog-resource-id': 'li76v1_bIpI23HBJ13dAqo66pYQ',
  'x-goog-resource-state': 'update',
  'x-goog-resource-uri': 'https://www.googleapis.com/drive/v3/files/1_ihmP2rHCBMXe7aQkW32bjZMccXzsPjE?acknowledgeAbuse=false&supportsAllDrives=false&supportsTeamDrives=false&alt=json'
}

ID file dari folder yang saya tonton adalah 1_ihmP2rHCBMXe7aQkW32bjZMccXzsPjE dan saya tahu bahwa itu termasuk dalam x-goog-resource-uri, sehingga saya dapat mengakses folder dengan ID file tersebut.

Dalam dokumen resmi, ID resource tidak bergantung pada versi.

Catatan: Properti resourceId adalah pengidentifikasi independen versi yang stabil untuk sumber daya. Properti resourceUri adalah URI kanonik dari sumber daya yang ditonton dalam konteks versi API saat ini, jadi ini khusus versi.

Saya ingin mendapatkan data sumber daya versi-independen. Namun, saya tidak tahu cara mendapatkan data sumber daya dengan x-goog-resource-id, ID sumber daya.

Adakah yang bisa menyarankan saya, tolong? Jika memungkinkan tidak pada Node.js SDK tetapi pada gaya API, itu akan baik-baik saja.

Sunting

Menurut contoh dalam dokumen resmi, resourceId sama dengan yang ada di URI sumber daya dan komentarnya mengatakan bahwa itu adalah ID of the watched resource. Saya pikir sumber daya yang ditonton berarti sumber daya file.

Contoh di bawah ini disalin darinya:

{
  "kind": "api#channel",
  "id": "01234567-89ab-cdef-0123456789ab"", // ID you specified for this channel.
  "resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
  "resourceUri": "https://www.googleapis.com/drive/v3/files/o3hgv1538sdjfh", // Version-specific ID of the watched resource.
  "token": "target=myApp-myFilesChannelDest", // Present only if one was provided.
  "expiration": 1426325213000, // Actual expiration time as Unix timestamp (in ms), if applicable.
}

Dalam kasus saya, saya menerima respons serupa, tetapi gaya URI dan penggunaan ID sumber daya(?) mungkin berbeda dari sampel.

{
  kind: 'api#channel',
  id: '8f76c160-b229-11eb-a810-93ba607a525b',
  resourceId: 'li76v1_bIpI23HBJ13dAqo66pYQ',
  resourceUri: 'https://www.googleapis.com/drive/v3/files/1_ihmP2rHCBMXe7aQkW32bjZMccXzsPjE?acknowledgeAbuse=false&supportsAllDrives=false&supportsTeamDrives=false&alt=json',
  expiration: '1620728513000'
}
0
Anselmo Park 11 Mei 2021, 12:06

1 menjawab

Jawaban Terbaik

x-goog-resource-id tidak sama dengan ID file/folder yang Anda tonton.

Dari dokumentasi:

Nilai buram yang mengidentifikasi sumber daya yang ditonton. ID ini stabil di seluruh versi API.

Memahami format pesan notifikasi

Ini berarti bahwa Google akan membuat ID baru untuk sumber daya yang ditonton yang unik untuk file/folder, tetapi tidak sama dengan ID file/folder. Bagian buram berarti bahwa ini hanyalah ID lain bagi Anda untuk mengidentifikasi saluran tontonan. Google mungkin menggunakannya secara internal, tetapi menjadi buram berarti itu bukan sesuatu yang bisa kita lihat cara kerjanya.

Untuk mengidentifikasi sumber daya yang telah berubah, Anda dapat menyimpan ID ini dari pembuatan saluran, Anda dapat menggunakan x-goog-channel-id atau x-goog-resource-id untuk membandingkannya dengan toko lokal Anda.

Toko lokal Anda mungkin JSON sederhana:

{
    '2iPJp6kI2131231245543aQ_rIFGwE' : '[FILE_ID]'
}

Atau Anda bisa mengurai x-goog-resource-uri untuk mendapatkan ID seperti yang telah Anda lakukan.

Untuk selanjutnya mendapatkan lebih banyak data tentang revisi dan data yang bergantung pada versi/independen, Anda cukup menggunakan permintaan GET normal ke API Drive setelah menerima pemberitahuan push.

Sampel yang Anda tautkan

Ini menunjukkan respons permintaan watch:

{
  "kind": "api#channel",
  "id": "01234567-89ab-cdef-0123456789ab"", // ID you specified for this channel.
  "resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
  "resourceUri": "https://www.googleapis.com/drive/v3/files/o3hgv1538sdjfh", // Version-specific ID of the watched resource.
  "token": "target=myApp-myFilesChannelDest", // Present only if one was provided.
  "expiration": 1426325213000, // Actual expiration time as Unix timestamp (in ms), if applicable.
}

Ini adalah respons satu kali yang Anda dapatkan saat membuat saluran notifikasi. Ini bukan format pemberitahuan push yang Anda dapatkan saat sumber daya berubah.

Dokumen

1
iansedano 11 Mei 2021, 12:54