Data yang dimasukkan adalah daftar kartu yang terdapat pada permainan seluler Tears of Themis. Sumber data diambil dari dari situs Tears of Themis Wiki. Penulis memilih untuk mengambil data dari website yang diberikan karena penulis suka dengan permainan ini dan penasaran seputar daftar keseluruhan kartu dan skill yang terdapat di masing-masing kartu.
Untuk DBMS, penulis memilih PostgresSQL, dengan alasan utama karena PostgresSQL merupakan RDBMS yang cenderung lebih disukai untuk melakukan deployment dengan Heroku, salah satu layanan yang familiar oleh penulis. Selain itu, Heroku juga mendukung addons Postgres dengan plan hobby-dev (free) sehingga penulis dapat memanfaatkan addons ini untuk menyimpan data hasil scraping ke dalam cloud database.
Program dalam repository ini terbagi menjadi 2 bagian, yaitu program utama untuk scraping dan menyimpan data, serta API untuk mengakses data.
Program utama untuk melakukan Data Scraping dan Data Storing terdapat pada main.py dalam folder Data Scraping, yang terdiri dari beberapa fungsi dalam folder lib. Dalam program ini, pengguna dapat memilih untuk melakukan scraping cards atau skills, dan menyimpan data baik ke dalam database atau ke dalam file json sesuai pilihan. Untuk melakukan Data Scraping, penulis menggunakan library Beautiful Soup dan request dari urllib.
Untuk melakukan Data Storing ke file, penulis menggunakan library json untuk menyimpan data hasil scraping ke dalam bentuk JSON. Untuk melakukan Data Storing ke database, penulis menggunakan library dotenv untuk mengambil konfigurasi database dari file .env
. Karena menggunakan konfigurasi database dari file .env
, pengguna dapat mengkonfigurasi program untuk menyimpan data ke database local maupun cloud.
API dibuat menggunakan FastAPI. Program utama API ini terdapat pada main.py. API ini digunakan untuk mengakses data cards dari database (remote/local) dengan konfigurasi environment yang diambil dari file .env
. Selain itu, API ini juga dilengkapi dengan dokumentasi interaktif dari Swagger UI dan ReDoc sebagai bawaan dari library FastAPI.
API dapat digunakan untuk mengambil data kartu dan skill dari database, baik keseluruhan maupun dengan id tertentu dengan menggunakan endpoint yang sesuai. Selain itu, API juga mendukung beberapa query parameter untuk melakukan pencarian/filter data.
Daftar endpoint yang tersedia:
GET /
GET /api
GET /api/cards?name=<str>&character=<str>&attribute=<str>
GET /api/cards/{id}
GET /api/skills?name=<str>
GET /api/skills/{id}
Digunakan untuk mengambil data kartu secara keseluruhan dari database. Parameter yang dapat digunakan untuk melakukan pencarian/filter data adalah 'name', 'character' dan 'attribute'. Parameter 'name' digunakan untuk mencari berdasar nama kartu, 'character' untuk mencari berdasar nama karakter dalam kartu, dan attribute untuk mencari berdasar atribut kartu.
Digunakan untuk mengambil data kartu berdasarkan id dari database.
Digunakan untuk mengambil data skill secara keseluruhan dari database. Parameter yang dapat digunakan untuk melakukan pencarian/filter data adalah 'name'. Parameter 'name' digunakan untuk mencari berdasar nama kartu.
Digunakan untuk mengambil data skill berdasarkan id dari database.
- Python 3.7+
- BeautifulSoup4
- FastAPI
- PostgresSQL
Untuk menginstal keseluruhan requirements yang dibutuhkan untuk, dapat menginstal semua paket yang terdapat pada requirements.txt.
cd "Data Scraping/src"
pip install -r requirements.txt
Agar dapat melakukan storing, pengguna perlu mengkonfigurasi program dengan menyalin file .env.example
ke .env
, dan mengubah konfigurasi database yang diperlukan.
Setelah semua konfigurasi selesai, pengguna dapat langsung menjalankan main.py.
python main.py
API dapat dijalankan secara lokal maupun melalui remote.
Untuk menginstal keseluruhan requirements yang dibutuhkan untuk menjalankan API, dapat dilakukan dengan menginstal semua paket yang terdapat pada requirements.txt.
cd API/src
pip install -r requirements.txt
Agar API dapat berjalan dengan baik di lokal, pengguna perlu mengkonfigurasi program dengan menyalin file .env.example
ke .env
, dan mengubah konfigurasi database yang diperlukan. Setelah itu, pengguna dapat menjalankan uvicorn dalam folder API/src.
uvicorn main:app --reload
Setelah dijalankan, API dapat diakses melalui localhost:8000. Selengkapnya mengenai dokumentasi API dan daftar endpoint yang tersedia dapat dilihat di localhost:8000/docs dan localhost:8000/redoc.
Remote API telah tersedia dalam tot-cards.herokuapp.com dan dapat langsung digunakan.
Selengkapnya mengenai dokumentasi API dan daftar endpoint yang tersedia dapat dilihat di tot-cards.herokuapp.com/docs dan https://tot-cards.herokuapp.com/redoc.
{
"id": ...,
"name": ...,
"rarity": ...,
"character": ...,
"attribute": ...,
"max_power": ...,
"max_influence": ...,
"max_defense": ..,
"skills": [
{
"type": ...,
"name": ...
},
...
]
}
id
: ID dari kartu
name
: Nama kartu
rarity
: Rarity dari kartu (SSR/SR/MR/R)
character
: Karakter yang terdapat dalam kartu
(Luke Pearce/Artem Wing/Marius von Hagen/Vyn
Richter)
attribute
: Atribut kartu (Intuition/Logic/Empathy)
max_power
: Max power dari kartu
max_influence
: Max influence dari kartu
max_defense
: Max defense dari kartu
skills
: Daftar skill yang terdapat dalam kartu. Masing-masing skill terdiri dari
type
: Tipe skillname
: Nama skill
{
"type": ...,
"name": ...,
"level_1_desc": ...,
"level_10_desc": ...
},
type
: Tipe skill
name
: Nama skill
level_1_desc
: Deskripsi skill pada level 1
level_10_desc
: Deskripsi skill pada level 10
Berikut ERD (Entity Relation Diagram) yang dibuat untuk membuat database.
- Tears of Themis Wiki, https://tot.wiki
- Beautiful Soup 4.9.0 Documentation, https://www.crummy.com/software/BeautifulSoup/bs4/doc
- PostgresSQL 14 Documentation, https://www.postgresql.org/docs/14
- pgAdmin 4 6.9 Documentation, https://www.pgadmin.org/docs/pgadmin4/development/index.html
- Export Postgresql table data using pgAdmin - Stack Overflow https://stackoverflow.com/a/29246636
- FastAPI Tutorial - User Guide, https://fastapi.tiangolo.com/tutorial
Nama: Alifia Rahmah
NIM: 13520122