10 minute read

Semenjak saya bermigrasi untuk blogging menggunakan Github Pages pada saat pandemi, saya hanya memanfaatkan Github ala kadarnya, yakni murni hanya sebagai repository penyimpan data yang bisa terintegrasi dengan R Studio secara flawlessly.

Pada saat kuliah S2 tahun lalu, saya akhirnya mencoba salah satu fitur lain Github yakni Codespaces. Sampai sekarang, saya selalu menggunakan Codespaces untuk melakukan berbagai macam pekerjaan komputasi dan menulis blog ini.


Belakangan ini, saya menggunakan Codespaces untuk melakukan tugas web scrape kerjaan kantor. Alasannya sederhana:

Saya ingin proses web scrape tidak mengganggu pekerjaan lain yang saya kerjakan di laptop karena saya sedang tidak bisa menyewa VPS di Digital Ocean.

Maklum, lagi tidak ada budget. Hehe.

Setelah seminggu pemakaian, saya sangat puas dengan langkah kerja yang saya lakukan ini:

  1. Membuka Codespaces dari iPad,
  2. Klik run pada skrip web scrape yang sudah saya buat sebelumnya. Tampilannya adalah Visual Studio Code ya, bukan R Studio.
  3. Proses web scrape kemudian berjalan selama 20-30 menit karena informasi yang saya ambil cukup banyak. Pada proses ini, saya bisa meninggalkan iPad dan melakukan pekerjaan lainnya.
  4. Setelah selesai, saya hanya perlu melakukan commit dan push kembali ke Github repository.
  5. Selesai.

Langkah-langkah ini selalu saya ulang berkala setiap harinya pada waktu dan jam yang sama.

Walaupun pekerjaan itu sudah semi otomatis, saya masih penasaran apakah bisa dibuat lebih otomatis lagi?

Ternyata jawabannya: BISA! Saya bisa memanfaatkan fitur lain Github bernama Github Action. Layaknya Codespaces, fitur Action juga dibatasi per user 2.000 menit selama sebulan. Bagaimana kalau mau lebih? Cukup bayar saja sebesar $0.008 per minute.

Sekarang bagaimana caranya? Yuk simak berikut caranya:


Langkah I: Siapkan Repository

Sebagai contoh, saya akan buat satu repo bernama detik-headline-scraper. Repo ini akan bekerja untuk mengambil headline berita di detik.com secara otomatis.

Langkah I-1

Langkah I-1

Langkah I-2

Langkah I-2

Langkah II: Buat Skrip Web Scrape dengan R

Berikutnya saya akan buat skrip web scrape sederhana di R. Saya menggunakan dua libraries saja, yakni:

  1. dplyr
  2. rvest

Berikut skripnya:

# hapus environment
rm(list=ls())

# libraries
library(dplyr)
library(rvest)

# url awal
url = "https://www.detik.com/"

# ambil headline
headliner = 
  url %>% 
  read_html() %>% 
  html_nodes(".media__link") %>% 
  html_text(trim = T)

# buat nama file
nama_file = Sys.time() %>% as.character()
nama_file = paste0(nama_file,".csv")

# save headliner
write.csv(headliner,nama_file)

Saya akan simpan skrip tersebut ke dalam repo tersebut dengan nama scrape.R.

Langkah II

Langkah II

Langkah III: Buat Skrip Workflow di Repository

Sekarang bagian paling serunya! yakni membuat skrip Github Action. Langkah awalnya adalah dengan membuat file berekstensi .yaml pada folder: .github >> workflows. Sebagai contoh, saya berikan nama file-nya: schedule-commit.yaml

Langkah III-1

Langkah III-1

Mari kita buat skripnya:

Bagian III-1

Kita berikan nama Github Action-nya terlebih dahulu. Misalkan:

# Name of the workflow
name: scrape-detik

Bagian III-2

Github Action bisa berjalan setidaknya dengan dua metode:

  1. Triggered, yakni setelah repo terpancing aktivitas tertentu.
  2. Scheduled, yakni terjadwal sesuai definisi.

Pada kasus kali ini, saya akan buat Github Action berjalan saat saya melakukan push ke repo. Berikut skripnya:

on:
  push:
    branches: main

Seandainya saya ingin Github Action berjalan pada jadwal tertentu (misalkan setiap 5 menit), berikut skripnya:

on:
  schedule:
    - cron: "*/5 * * * *"

Kita cukup mengubah isian cron-nya saja. Bagaimana cara mengisinya, bisa dilihat di situs crontab.guru.

Bagian III-3

Sekarang kita akan definisikan apa yang harus dilakukan oleh Github Action. Misalkan:

# Jobs - What the computer should do? 
jobs:
  import-data:
    # kita buat github action berjalan di ubuntu versi terbaru
    runs-on: ubuntu-latest
    steps:
      # langkah pertama install R
      - name: Set up R
        uses: r-lib/actions/setup-r@v2
      
      # langkah kedua kita update dan install library di ubuntu
      - run: |
          sudo apt-get update
          # khusus rvest di R, dibutuhkan libraries ubuntu sebagai berikut:
          sudo apt-get install libcurl4-openssl-dev
          
      # berikutnya adalah install libraries yang dibutuhkan di R
      - name: Install packages
        uses: r-lib/actions/setup-r-dependencies@v2
        with:
          packages: |
            any::dplyr
            any::rvest
      
      # set working directory
      - name: Check out repository
        uses: actions/checkout@v3

      # kita buat github action menjalankan skrip scrape.R
      - name: Run skrip R
        run: Rscript -e 'source("scrape.R")'
      
      # berikutnya kita akan commit dan push ke repo
      - name: Commit results
        run: |
          git config --local user.email "isi sesuai akun@xxx.com"
          git config --local user.name "isi sesuai akun"
          git add .
          git commit -m 'Data updated' || echo "No changes to commit"
          git push || echo "No changes to commit"
          # jangan lupa set permission dulu ya

Hasil akhirnya jadi seperti ini:

Langkah III-2

Langkah III-2

Langkah IV: Aktifkan Read and Write di Repository Setting

Langkah terakhir adalah kita perlu memperbolehkan Github Action untuk melakukan commit dan push ke repo. Caranya: Buka tab setting di repo >> pilih Actions >> pilih General >> pilih Read and write permissions pada Workflow permissions >> klik save.

Langkah IV

Langkah IV


Selesai!

Repo dengan Github Action sudah bisa digunakan. Untuk kasus saya, saya perlu men-trigger repo tersebut dengan melakukan push. Setelah itu, kita bisa lihat di tab Actions proses akan berjalan.

Untuk kasus saya, butuh 4 menitan untuk bisa selesai.

Proses telah selesai

Proses telah selesai

Proses telah selesai (lanjutan)

Proses telah selesai (lanjutan)

Proses telah selesai (detail status)

Proses telah selesai (detail status)

Seandainya terjadi error, maka akan ada pesan error pada bagian detail status. Kita cukup melihat apa pesan error yang harus kita resolve.

Setelah selesai, maka headline hasil scrape akan muncul di repo sebagai berikut:

Hasil akhir: file csv muncul di repo

Hasil akhir: file csv muncul di repo

Berikut isi file csv-nya:

Detail isi csv

Detail isi csv

Bagaimana? Mudah kan?


if you find this article helpful, support this blog by clicking the ads.