Hi kali ini admin akan share code untuk menghapus postingan di blogger dan menghapus gambar yang telah disimpan sebelumnya di blogger.
Ini adalah skrip JavaScript yang menggunakan Firebase dan API Google untuk mengelola penghapusan data gambar dan postingan yang sudah kedaluwarsa. Berikut adalah penjelasan rinci dari setiap bagian kode tersebut:
Fungsi getRefreshToken
- Fungsi ini digunakan untuk mendapatkan refresh token dari Firestore.
- Pertama, menginisialisasi koneksi ke Firestore.
- Mengambil dokumen dengan ID 'refreshToken' dari koleksi 'tokens'.
- Jika dokumen ada, mengembalikan token yang tersimpan; jika tidak, melempar error.
Fungsi getAccessToken
- Fungsi ini digunakan untuk mendapatkan access token baru menggunakan refresh token.
- Mengirim permintaan POST ke endpoint OAuth2 Google dengan parameter yang dibutuhkan.
- Jika berhasil, mengembalikan access token; jika gagal, melempar error dengan pesan yang sesuai.
Fungsi deleteImageData
- Fungsi ini digunakan untuk menghapus data gambar dari Firestore dan Firebase Storage berdasarkan
postID
. - Mengambil dokumen dari koleksi 'images' yang memiliki
postID
yang cocok. - Jika dokumen ditemukan, menghapus gambar dari Firebase Storage dan dokumen dari Firestore.
- Menghapus baris dari tabel HTML yang sesuai.
- Mendapatkan refresh token dan access token untuk menghapus postingan dari Blogger dengan memanggil
deletePost
.
Fungsi deletePost
- Fungsi ini digunakan untuk menghapus postingan dari Blogger menggunakan
postID
dan accessToken
. - Mengirim permintaan DELETE ke API Blogger.
- Jika berhasil, menghapus baris yang sesuai dari tabel HTML dan memuat ulang halaman.
Fungsi deleteExpiredData
- Fungsi ini digunakan untuk menghapus data gambar yang sudah kedaluwarsa dari Firestore.
- Mengambil semua dokumen dari koleksi 'images'.
- Jika
expiredDate
dari dokumen lebih kecil dari tanggal hari ini, memanggil deleteImageData
untuk menghapus data gambar yang sesuai.
Memanggil Fungsi deleteExpiredData
- Memanggil
deleteExpiredData
ketika halaman dimuat untuk menghapus data gambar yang sudah kedaluwarsa.
Dengan kode ini, sistem akan secara otomatis menghapus data gambar yang sudah kedaluwarsa dari Firestore dan Firebase Storage, serta menghapus postingan yang terkait dari Blogger.
berikut script codenya
<script>
// Fungsi untuk mendapatkan refresh token dari Firebase
async function getRefreshToken() {
var db = firebase.firestore();
const doc = await db.collection('tokens').doc('refreshToken').get();
if (doc.exists) {
return doc.data().token;
} else {
throw new Error('Token refresh tidak ditemukan di Firebase');
}
}
// Fungsi untuk mendapatkan access token baru menggunakan refresh token
async function getAccessToken(refreshToken) {
const response = await fetch('https://oauth2.googleapis.com/token', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
client_id: 'isi klient ID di google console account',
client_secret: 'isi klient secreet di google console account',
refresh_token: refreshToken,
grant_type: 'refresh_token'
})
});
const data = await response.json();
if (data.access_token) {
return data.access_token;
} else {
throw new Error('Gagal mendapatkan access token: ' + JSON.stringify(data));
}
}
// Fungsi untuk menghapus data gambar dari Firestore
async function deleteImageData(postID) {
try {
console.log('Mencoba menghapus posting dengan ID:', postID);
var db = firebase.firestore();
const imagesRef = db.collection('images');
const querySnapshot = await imagesRef.where('postID', '==', postID).get();
if (!querySnapshot.empty) {
const deletePromises = querySnapshot.docs.map(async (doc) => {
const data = doc.data();
const imageUrl = data.imageUrl;
const storageRef = firebase.storage().refFromURL(imageUrl);
// Hapus gambar dari Firebase Storage
try {
await storageRef.delete();
console.log(`Gambar dihapus: ${imageUrl}`);
} catch (error) {
console.error(`Error menghapus gambar: ${imageUrl}`, error);
}
// Hapus dokumen dari Firestore
try {
await imagesRef.doc(doc.id).delete();
console.log(`Dokumen dengan ID terhapus: ${doc.id}`);
} catch (error) {
console.error(`Error menghapus dokumen dengan ID: ${doc.id}`, error);
}
});
await Promise.all(deletePromises);
// Hapus baris dari tabel
const rows = document.querySelectorAll('#imageDataList tr');
rows.forEach(row => {
if (row.cells[3].textContent === postID) {
row.remove();
}
});
console.log('Data gambar berhasil dihapus');
const refreshToken = await getRefreshToken();
const accessToken = await getAccessToken(refreshToken);
await deletePost(postID, accessToken);
} else {
console.log('Dokumen tidak ditemukan');
}
} catch (error) {
console.error('Terjadi kesalahan dalam menghapus data gambar:', error);
}
}
// Fungsi untuk menghapus postingan dari Blogger
async function deletePost(postID, accessToken) {
const blogId = '3012...'; // Ganti dengan ID Blog Anda
const apiKey = 'AIza...'; // Ganti dengan API Key Anda
try {
const response = await fetch(`https://www.googleapis.com/blogger/v3/blogs/${blogId}/posts/${postID}?key=${apiKey}`, {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${accessToken}`
},
});
if (response.ok) {
console.log('Postingan berhasil dihapus');
//alert("Postingan berhasil dihapus");
var row = document.querySelector(`tr[data-post-id="${postID}"]`);
if (row) {
row.remove();
}
location.reload();
} else {
console.error('Gagal menghapus postingan. Status:', response.status);
alert("Postingan gagal dihapus");
}
} catch (error) {
console.error('Error:', error);
}
}
// Fungsi untuk menghapus data gambar yang sudah kedaluwarsa
async function deleteExpiredData() {
try {
var db = firebase.firestore();
const imagesRef = db.collection('images');
const snapshot = await imagesRef.get();
const today = new Date();
const deletePromises = snapshot.docs.map(async (doc) => {
const data = doc.data();
const expiredDate = new Date(data.expiredDate);
if (today > expiredDate) {
await deleteImageData(data.postID);
}
});
await Promise.all(deletePromises);
console.log('Proses penghapusan data kedaluwarsa selesai');
} catch (error) {
console.error('Terjadi kesalahan dalam menghapus data kedaluwarsa:', error);
}
}
// Memanggil fungsi untuk menghapus data gambar yang sudah kedaluwarsa saat halaman dimuat
deleteExpiredData();
</script>
Post a Comment