pendakBot Telegram menggunakan webhook GAS (google apps script) dan melakukan grabbing data pada website https://pendak.nizamkomputer.com/
Dalam membuat bot telegram / whatsapp idealnya sumber datanya berupa api dalam format json, agar mudah dalam input dan output datanya.
Website diatas tidak menyediakan API, maka kita lakukan teknik grabbing dengan cara scraping :
Dengan membuat script scrapping dan output data berupa data json, kita bisa mengintegrasikan didalam Bot
function doGet(e) {
// Mendefinisikan tanggal, bulan, dan tahun
var nama = e.parameter.nama || '';
var tgl = e.parameter.tgl || '';
// URL target
var url = 'https://pendak.nizamkomputer.com/ajax.php';
// Data yang akan dikirimkan dalam request
var data = {
'nama': nama,
'tanggal-meninggal': tgl
};
// Konversi data ke format URL-encoded
var dataString = [];
for (var key in data) {
dataString.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
}
dataString = dataString.join('&');
// Set opsi request
var options = {
'method': 'post',
'payload': dataString,
'muteHttpExceptions': true
};
// Eksekusi request dan simpan respon
var response = UrlFetchApp.fetch(url, options).getContentText();
// Parsing respon untuk mendapatkan informasi yang diinginkan
var regex = /Almarhum (.*?)<\/span> sampai saat ini sudah meninggal selama (.*?)<\/span> hari./s;
var matches = response.match(regex);var regex2 = /(.*?)<\/th>\s+(.*?)<\/td>\s+(.*?)<\/td>\s+(?:(Lewat)<\/del>|(Belum))<\/td>/g;
var matches2 = [];
var match;
while ((match = regex2.exec(response)) !== null) {
matches2.push(match);
}var regex3 = /]*>([^<]+)<\/th>\s+([^<]+)<\/td>\s+([^<]+)<\/td>\s+(?:(Lewat)<\/del>|(Belum))<\/td>/g;
var matches3 = [];
while ((match = regex3.exec(response)) !== null) {
matches3.push(match);
}
// Struktur data hasil parsing
var result = {
'nama': matches ? matches[1] : '',
'jumlah_hari_meninggal': matches ? matches[2] : '',
'ritual': []
};
// Proses data pengulangan ritual dari matches2
matches2.forEach(function(match) {
var hari_meninggal = match[3];
var status = match[4] ? match[4] : match[5]; // Tentukan status berdasarkan hasil regex
result['ritual'].push({
'selamatan': match[1],
'pasaran': match[2],
'tanggal': hari_meninggal,
'status': status
});
});
// Proses data pengulangan ritual dari matches3
matches3.forEach(function(match) {
var hari_meninggal = match[3];
var status = match[4] ? match[4] : match[5]; // Tentukan status berdasarkan hasil regex
result['ritual'].push({
'selamatan': match[1],
'pasaran': match[2],
'tanggal': hari_meninggal,
'status': status
});
});
// Mengambil hanya 8 entri pertama dari array 'ritual'
result['ritual'] = result['ritual'].slice(0, 8);
// Konversi hasil ke format JSON
var jsonResult = JSON.stringify(result);
// Tampilkan hasil
return ContentService.createTextOutput(jsonResult).setMimeType(ContentService.MimeType.JSON);
}
Tampilannya seperti ini jika dilakukan get data
const BOT_TOKEN = '
';
const SHEET_ID = ''; // Replace with your Google Sheet ID // Function to send a message
function sendMessage(chatId, text, replyMarkup = null, replyToMessageId = null) {
const url = 'https://api.telegram.org/bot' + BOT_TOKEN + '/sendMessage';
const data = {
chat_id: chatId,
text: text
};
if (replyMarkup) {
data.reply_markup = replyMarkup;
}
if (replyToMessageId) {
data.reply_to_message_id = replyToMessageId;
}const options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(data)
};UrlFetchApp.fetch(url, options);
}// Function to save log to Google Sheets sheet chat_pendak)
function saveLog(chatId, message) {
const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('chat_pendak');
sheet.appendRow([new Date(), chatId, message]);
}// Function to handle commands
function handleCommand(update) {
const message = update.message;
const chatId = message.chat.id;
const text = message.text;
const messageId = message.message_id;// Save log to Google Sheets
saveLog(chatId, text);// Check command
if (text === '/start') {
const replyMarkup = JSON.stringify({
keyboard: [
['PETUNJUK'],
['pendak#Puguh Hendarto#2021-7-26']
],
resize_keyboard: true
});
sendMessage(chatId, 'Silakan pilih opsi di bawah ini:', replyMarkup, messageId);
} else if (text === 'PETUNJUK') {
sendMessage(chatId, 'PETUNJUK \n\npendak#Puguh Hendarto#2021-7-26 \n\nSetelah menerima perintah, bot akan mengirimkan balasan yang berisi informasi yang ditemukan, seperti 3 hari, 40 hari dan detail informasi lainnya.', null, messageId);
} else if (text.startsWith('pendak#')) {
const keyword = text.substring(7);
const keywordParts = keyword.split('#');
if (keywordParts.length === 2) {
const nama = encodeURIComponent(keywordParts[0].trim());
const tglMeninggal = encodeURIComponent(keywordParts[1].trim());
const jsonUrl = `https://script.google.com/macros/s/AKfycbynFZdB5nNwmOWTj2qfVufh3lhX1VHSzLyDlaPXNIfKMYlM7hBNPh89wXvmo-J4s2tP/exec?nama=${nama}&tgl=${tglMeninggal}`;
const responseData = UrlFetchApp.fetch(jsonUrl).getContentText();
const decodedData = JSON.parse(responseData);if (decodedData) {
let responseText = `Halo ${chatId} \n\nalm/almh *${decodedData.nama}*, \nsampai saat ini sudah meninggal selama \`${decodedData.jumlah_hari_meninggal}\` hari.\n\n`;
decodedData.ritual.forEach(ritual => {
responseText += `Selamatan: \`${ritual.selamatan}\`\nPasaran: ${ritual.pasaran}\nTanggal: ${ritual.tanggal}\nStatus: *${ritual.status}*\n\n`;
});
sendMessage(chatId, responseText, null, messageId);
} else {
sendMessage(chatId, 'Maaf, ada masalah dengan data yang diterima atau data tidak tersedia.', null, messageId);
}
} else {
sendMessage(chatId, "Format keyword tidak valid. Pastikan formatnya adalah 'nama#tgl_meninggal'. Contoh: pendak#Puguh Hendaro#2021-7-26", null, messageId);
}
}
}// Utility function to check if a date is valid
function isValidDate(d, m, y) {
const date = new Date(y, m - 1, d);
return date.getFullYear() === parseInt(y) && date.getMonth() + 1 === parseInt(m) && date.getDate() === parseInt(d);
}// Main function to handle the webhook
function doPost(e) {
const update = JSON.parse(e.postData.contents);
if (update) {
handleCommand(update);
}// Log the incoming messages
const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName('telegram_log');
sheet.appendRow([new Date(), JSON.stringify(update)]);
}
Dibawah ini script GAS melalui browser
Selanjutnya melakukan deploy bot telegram, seperti mengaktifkan link webhook
Dibawah ini Bot yang sudah kita uji coba menggunakan 2 script GAS diatas
Bagi kawan-kawan butuh bantuan dalam membuat bot telegram dengan harga terjangkau, bisa kontak kita melalui whatsapp 081241314446