Sabtu, 28 Juni 2025
Minggu, 22 Juni 2025
Aplikasi Web Service Android Menggunakan PHP dan Database MariaDB
Satu hal yang paling menyenangkan dari Bahasa Pemrograman Pascal Modern (Free Pascal) adalah kemampuannya untuk membuat berbagai macam aplikasi lintas platform. Saat ini, Free Pascal sudah dapat membuat aplikasi Windows, Linux, MacOS bahkan Android dan IOS sehingga tidak perlu repot mempelajari bahasa pemrograman lain untuk kebutuhan pengembangan aplikasi di platform-platform tersebut. Mempelajari Bahasa Pemrograman Baru tentu memerlukan effort yang tidak sederhana terutama dari sisi efisiensi waktu.
Pada contoh ini saya akan sharing cara pembuatan aplikasi Web Service menggunakan Free Pascal - PHP - MariaDB. Terlebih dahulu silahkan pasang tools yang diperlukan, jika anda baru pertama kali menggunakan Lazarus dan LAMW, saya sangat menyarankan anda memasangnya menggunakan fpcupdeluxe. Pasang versi stable yang disarankan oleh aplikasi tersebut. Prosesnya memang memakan waktu cuku lama, anda hanya perlu menunggu hingga prosesnya selesai. Jika anda ingin mempelajari langkah-langkah instalasi secara mandiri, silahkan baca postingan saya di sini.
Pertama-tama, untuk menyamakan persepsi, pada contoh ini saya menggunakan versi alat pendukung (tools) untuk kebutuhan pembuatan aplikasi sebagai berikut:
- Lazarus 3.6 + FPC 3.2.2 + LAMW 0.8.6.4 (seluruh perkakas dipasang menggunakan tools fpcupdeluxe)
- XAMPP (PHP 8.2.4 and MariaDB 10.4.28)
- Java 21 (Zulu), set JAVA_HOME pada saat instalasi
- Android NDK r22b (untuk versi yang lebih tinggi perlu melakukan build toolchains secara mandiri)
- Android SDK (diperoleh melalui android studio/install platform, platform tools dan build tools yang diperlukan setidaknya versi >=33 yang disyaratkan oleh Google Play Service)
Note : Nonaktifkan firewall agar koneksi dari Android tidak diblok oleh Windows.
Rabu, 18 Juni 2025
Aplikasi Database Client Server dengan Free Pascal dan Lazarus
Hallo guys,
Di era yang semakin canggih ini, kebutuhan untuk menghubungkan aplikasi melalui jaringan komputer semakin tidak dapat dinafikan. Bahkan tidak berlebihan jika dikatakan kemampuan aplikasi untuk dapat terhubung satu-sama lain menjadi sebuah keharusan. Tidak hanya aplikasi komputer, aplikasi berbasis smartphone juga rata-rata sudah dapat terhung dengan server yang umumnya menggunakan antarmuka Application Programming Interface atau yang juga dikenal dengan istilah API.
Pada implementasinya, pendekatan yang banyak digunakan untuk melakukan pertukaran data pada aplikasi database berbasis client server adalah melalui HTTP Request. Para pengembang aplikasi biasanya membuat aplikasi kecil yang sering disebut dengan istilah mikro service atau umumnya disebut API, selanjutnya aplikasi client akan meminta dan mengirimkan informasi (melalukan pertukaran data) melalui service atau API tersebut.
Pada postingan ini saya akan share source code aplikasi database client server menggunakan bahasa pemrograman pascal. Aplikasi ini dapat melakukan pertukaran data melalui protokol HTTP, baik proses pengambilan atau pengiriman data. Seluruh data yang dikirim dan diterima dibungkus ke dalam format JSON agar lebih mudah untuk diproses. Berikut sedikit informasi terkait aplikasi ini.
- Menggunakan FPC 3.2.2 + Lazarus 4.0
- Mengimplementasikan HTTP Request (Multithread)
- Menggunakan SQLite Database
- Server App as a Service (Start, Stop and Logging) , implementasi HTTP Server.
- Client App (Retrieve, Insert, Update, Delete, Upload and Download File), implementasi HTTP Client.
Aplikasi ini masih sederhana, kemampuan yang dimiliki hanya sebatas Insert, Update, Delete, mengambil data dari server untuk ditampilkan pada komponen String Grid serta proses pengiriman file baik upload dan download dari aplikasi client. Meski demikian, rasanya sudah cukup mewakili untuk memahami konsep pertukaran data melalui HTTP request pada Free Pascal dan Lazarus. Jika anda tertarik mengembangkannya silahkan cek di github pada link ini. Anda dapat mengembangkan dengan menambahkan fitur-fitur lainnya sesuai kebutuhan. Selamat mencoba.
Selasa, 20 Februari 2024
Scrape Data dari Website KPU dengan Free Pascal dan Lazarus
Robot : TWebDriver; kabupaten_kota, kecamatan, kelurahan_desa, tps : TWebElements; urlkab, urlkec, urldesa, urltps : String; i : integer; const main_url = 'https://pemilu2024.kpu.go.id';
{$IFDEF WINDOWS} Robot := TChromeDriver.Create(nil); Robot.StartDriver(ExtractFileDir(Paramstr(0)) + '\chromedriver.exe'); {$ELSE} //Robot := TChromeDriver.Create(nil); Robot := TFireFoxDriver.Create(nil); //Robot.StartDriver(ExtractFileDir(Paramstr(0)) + '/chromedriver'); Robot.StartDriver(ExtractFileDir(Paramstr(0)) + '/geckodriver'); {$ENDIF} Robot.NewSession; Robot.Implicitly_Wait(1000); Robot.Set_Window_Size(640, 640); Robot.GetURL(main_url+'/pilpres/hitung-suara/52'); Sleep(2000); kabupaten_kota := Robot.FindElementsByXPath('//*[@id="main"]/div[3]/div[2]/div[2]/div[2]/div/div/table/tbody/tr/td[1]/a'); Memo1.Clear; Memo1.Append('=== Data Kabupaten/Kota ==='); for i := 0 to kabupaten_kota.Count - 1 do begin Memo1.Append(kabupaten_kota.Items[i].Text); if (kabupaten_kota.Items[i].Text='KOTA MATARAM') then urlkab:=kabupaten_kota.Items[i].AttributeValue('href'); end;
Robot.GetURL(main_url+urlkab); Sleep(2000); kecamatan := Robot.FindElementsByXPath('//*[@id="main"]/div[3]/div[2]/div[2]/div[2]/div/div/table/tbody/tr/td[1]/a'); Memo1.Append('=== Data Kecamatan ==='); for i := 0 to kecamatan.Count - 1 do begin Memo1.Append(kecamatan.Items[i].Text); if (kecamatan.Items[i].Text='SELAPARANG') then urlkec:=kecamatan.Items[i].AttributeValue('href'); end;
Robot.GetURL(main_url+urlkec); Sleep(2000); kelurahan_desa := Robot.FindElementsByXPath('//*[@id="main"]/div[3]/div[2]/div[2]/div[2]/div/div/table/tbody/tr/td[1]/a'); Memo1.Append('=== Data Kelurahan/Desa ==='); for i := 0 to kelurahan_desa.Count - 1 do begin Memo1.Append(kelurahan_desa.Items[i].Text); if (kelurahan_desa.Items[i].Text='REMBIGA') then urldesa:=kelurahan_desa.Items[i].AttributeValue('href'); end;
Robot.GetURL(main_url+urldesa); Sleep(2000); tps := Robot.FindElementsByXPath('//*[@id="main"]/div[3]/div[2]/div[2]/div[2]/div/div/table/tbody/tr/td[1]/a'); Memo1.Append('=== Data TPS ==='); for i := 0 to tps.Count - 1 do begin Memo1.Append(tps.Items[i].Text); if (tps.Items[i].Text='TPS 002') then urltps:=tps.Items[i].AttributeValue('href'); end;
var anies, prabowo, ganjar : TWebElement; begin Robot.GetURL(main_url+urltps); Sleep(2000); anies := Robot.FindElementByXPath('/html/body/div/div[1]/div/div[3]/div[2]/div[2]/div/div/div[1]/table[2]/tbody/tr[1]/td[3]'); prabowo := Robot.FindElementByXPath('/html/body/div/div[1]/div/div[3]/div[2]/div[2]/div/div/div[1]/table[2]/tbody/tr[2]/td[3]'); ganjar := Robot.FindElementByXPath('/html/body/div/div[1]/div/div[3]/div[2]/div[2]/div/div/div[1]/table[2]/tbody/tr[3]/td[3]'); Memo1.Append('=== Hasil Perhitungan ==='); Memo1.Append('Anies-Muhaimain : '+anies.Text); Memo1.Append('Prabowo-Gibran : '+prabowo.Text); Memo1.Append('Ganjar-Mahfud : '+ganjar.Text); end;
Robot.ExecuteScript('var xpath = "/html/body/div/div[1]/div/div[3]/div[2]/div[2]/div/div/button";'+ 'function getElementByXpath(path) {'+ 'return document.evaluate('+ ' path,'+ ' document,'+ ' null,'+ ' XPathResult.FIRST_ORDERED_NODE_TYPE,'+ ' null'+ ').singleNodeValue;'+ '}'+ 'var element = getElementByXpath(xpath);'+ 'if (!element) {'+ 'throw new Error("Error: cannot find an element with XPath(" + xpath + ")");'+ '}'+ 'element.click();');
var c1_hasil : TWebElements; httpClient: THTTPSend; begin c1_hasil := Robot.FindElementsByXPath('/html/body/div/div[1]/div/div[3]/div[2]/div[2]/div/div/div[4]/div[2]/div/div/a'); Memo1.Append('=== Download C1 Hasil ==='); for i := 0 to c1_hasil.Count - 1 do begin httpClient:= THTTPSend.Create; if httpClient.HTTPMethod('GET', c1_hasil.Items[i].AttributeValue('href')) then begin httpClient.Document.SaveToFile('Download_C1/c1_'+IntToStr(i)+'_xx.jpg'); Memo1.Append('C1 Hasil Berhasil didownload...'); end; httpClient.Free; end; end;
Selasa, 30 Januari 2024
Memprogram Bot Telegram dengan Lazarus Free Pascal
Hallo Pemirsa,
Saya akan berbagi sedikit pengetahuan tentang cara memprogram Bot Telegram menggunakan Bahasa Pemrograman Free Pascal dan Lazarus IDE. Cara ini menggunakan unit dan library murni bawaan Free Pascal dan Lazarus sehingga tidak perlu repot memasang komponen pihak ketiga atau perkakas tambahan yang lumayan merepotkan.
Memprogram Telegram Bot atau Telebot sejatinya dapat dilakukan dengan bahasa pemrograman apa saja karena pertukaran data dilakukan melalui HTTP Request menggunakan data format Javascript Object Notation alias JSON. Alhasil, kita hanya memerlukan komponen HTTP Client untuk mengambil dan mengirimkan data ke server Telegram. Sebelum lebih jauh membahas cara memprogram Telebot dengan Bahasa Pemrograman Objek Pascal dan Lazarus, mari kita mulai dengan membuat sebuah Bot Telegram.
1. Membuat Bot Telegram
Pastikan anda sudah memasang aplikasi Telegram di Smartphone. Buka aplikasi tersebut kemudian dalam kolom pencarian ketik kata kunci BotFather. Pada daftar tampilan yang muncul pilih yang bercentang biru seperti gambar di bawah ini.
Berikutnya ketik perintah /newbot kemudian balas dengan mengirimkan nama dan username bot. Pada contoh ini namanya adalah Free Pascal Bot dan usernamenya adalah freepascalbot. Perhatikan bahwa untuk pemilihan username pastikan mengandung kata bot di dalamnya dan disambung tanpa menggunakan spasi. Jika tidak ada kesalahan, bot telah berhasil dibuat dan BotFather akan membalas dengan Token yang digunakan untuk berkomunikasi dengan bot melalui layanan Application Programming Interface (API). Simpan token tersebut karena akan digunakan nantinya. Perhatikan gambar di bawah ini.
2. Memprogram Bot Telegram Menggunakan Lazarus Free Pascal
Saya akan memastikan bahwa memprogram Telegram Bot menggunakan Free Pascal sangatlah mudah karena karena semua unit dan komponen yang diperlukan telah tersedia. Seara umum, ada 2 library yang diperlukan, pertama untuk kebutuhan berkomunikasi melalui HTTP Request dan kedua untuk kebutuhan mengelola data dengan format JSON.
Pada intinya, kemampuan untuk mengelola data format JSON adalah kunci utama dalam memprogram Telegram Bot. Saya telah membuat sebuah projek sederhana yang dapat anda unduh melalui link github ini. Karena dalam proses ini kita akan memproses request dari situs https, jadi kita memerlukan library openssl untuk windows silahkan download di sini. Ekstrak kemudian masukan file libeay32.dll dan ssleay32.dll ke dalam folder projek. Projek sederhana tersebut memiliki kemampuan sbb:
b. Mengambil pesan masuk (inbox) kemudian menampilkannya ke dalam komponen ListBox
c. Mengirimkan pesan berdasarkan chat_id yang diperoleh dari pesan masuk (inbox).
fpjson, jsonparser, fphttpclient, opensslsockets, StdCtrls;
rawData : ansistring; JsonPar : TJSONParser; jsonDoc : TJSONObject; TELEGRAM_BOT_URL : string;
procedure TForm1.Button3Click(Sender: TObject); var id, first_name, username : string; begin TELEGRAM_BOT_URL := 'https://api.telegram.org/'+Token+'/getMe'; // Melakukan HTTP Request dengan TFPHTTPClient try rawData := TFPHTTPClient.SimpleGet(TELEGRAM_BOT_URL); except on E: Exception do begin ShowMessage('Gagal membaca sumber data: ' + E.Message); Exit; end; end; // Memformat/Parse Output yang diperoleh dari HTTP Request menjadi JsonDoc try JsonPar := TJSONParser.Create(rawData); JsonDoc := TJSONObject(JsonPar.Parse); except on E: Exception do begin ShowMessage('Informasi tidak valid: ' + E.Message); Exit; end; end; // Membreakdown Hasil Parse (JsonDoc) kemudian menyimpannya ke dalam variabel if jsonDoc.findpath('ok').AsBoolean then begin // Jika Result tidak kosong if (jsonDoc.findpath('result').Count <> 0) then begin if (jsonDoc.findpath('result').FindPath('id') <> nil) then id := jsonDoc.findpath('result').FindPath('id').AsString; if (jsonDoc.findpath('result').FindPath('first_name') <> nil) then first_name := jsonDoc.findpath('result').FindPath('first_name').AsString; if (jsonDoc.findpath('result').FindPath('username') <> nil) then username := jsonDoc.findpath('result').FindPath('username').AsString; // Menampilkan informasi bot dalam dialog informasi ShowMessage('Bot ID : '+id+sLineBreak+'Bot Name : '+first_name+sLineBreak+'Username : '+username); end; end; end;