api.myquran.com

Di jagad maya banyak orang baik yang membagikan API secara gratis tapi sangat bermanfaat, salah satunya api.myquran.com yang menyediakan jadwal waktu sholat yang tentu saja ini sangat bermanfaat bagi kita selaku umat Muslim agar kita tidak tertinggal untuk sholat berjamaah di awal waktu. Di tutorial kali ini kita akan memanfaatkan API dari api.myquran.com untuk menampilkan jadwal waktu sholat di serial monitor Arduino IDE.

Langsung saja kita klik tombol Dokumentasinya.

dokumentasi api

API yang akan kita gunakan adalah jadwal sholat harian di kota atau kabupaten tempat tinggal kita. Dari dokumentasinya, format penulisan URL nya adalah sbb:

jadwal sholat per hari

Pada saat penulisan tutorial ini, saya sedang berada di Kabupaten Bogor. Id untuk Kabupaten Bogor adalah 1204, bisa dilihat dari URL api.myquran.com berikut: api.myquran.com/v1/sholat/kota/semua

id kabupaten bogor

Jadi untuk mendapatkan informasi jadwal waktu sholat di Kabupaten Bogor pada tanggal 2 Desember 2021 adalah dengan menuliskan URL api.myquran.com/v1/sholat/jadwal/1204/2021/12/02 di address bar browser.

json jadwal waktu sholat

Selanjutnya saya akan menjelaskan cara agar board Wemos D1 R1 yang saya miliki bisa merequest jadwal waktu sholat ke api.myquran.com. Langkah-langkahnya adalah sebagai berikut:

1. Meng-copy SHA1 Fingerprint dari link HTTPS api.myquran.com

Untuk browser Mozilla Firefox yang saya gunakan di tutorial ini, cara untuk mengetahui SHA1 Fingerprint adalah dengan mengklik icon gembok yang ada di sisi kiri address bar Klik Connection secure Klik More information.

icon gembok
connection secure
more information

Setelah More information diklik maka akan tampil page info lalu klik tombol View Certificate

icon gembok

Setelah View Certificate diklik maka akan tampil halaman certificate di tab baru.

icon gembok

2. Koding di Arduino IDE

  • Inisialisasi

    initilizing
  • Setup

    setup
  • Loop

    loop loop

Berikut sketch lengkapnya:

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h> 
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>

/* Set these to your desired credentials. */
const char *ssid = "YOUR_WIFI_NETWORK_NAME";  //ENTER YOUR WIFI SETTINGS
const char *password = "YOUR_WIFI_PASSWORD";

//Web/Server address to read/write from 
const char *host = "api.myquran.com";
const int httpsPort = 443;  //HTTPS= 443 and HTTP = 80

//SHA1 finger print of certificate use web browser to view and copy
const char fingerprint[] PROGMEM = "95:3F:1A:FF:CB:5F:DA:AE:D0:B7:C8:C6:EF:80:81:8D:08:7D:05:24";

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_OFF);        //Prevents reconnection issue (taking too long to connect)
  delay(1000);
  WiFi.mode(WIFI_STA);        //Only Station No AP, This line hides the viewing of ESP as wifi hotspot
  
  WiFi.begin(ssid, password);     //Connect to your WiFi router
  Serial.println("");

  Serial.print("Connecting");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  //If connection successful show IP address in serial monitor
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());  //IP address assigned to your ESP
}

void loop() {
  WiFiClientSecure httpsClient;    //Declare object of class WiFiClient

  Serial.println(host);

  Serial.printf("Using fingerprint '%s'\n", fingerprint);
  httpsClient.setFingerprint(fingerprint);
  httpsClient.setTimeout(15000); // 15 Seconds
  delay(1000);
  
  Serial.print("HTTPS Connecting");
  int r=0; //retry counter
  while((!httpsClient.connect(host, httpsPort)) && (r < 30)){
      delay(100);
      Serial.print(".");
      r++;
  }
  if(r==30) {
    Serial.println(". Connection failed");
  }
  else {
    Serial.println(". Connected to web");
  }
  
  String Link;

  //GET Data
  Link = "/v1/sholat/jadwal/1204/2021/12/02"; //address from which we need to get the data inside the server.

  Serial.print("requesting URL: ");
  Serial.println(host+Link);

  httpsClient.print(String("GET ") + Link + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +             
               "Connection: close\r\n\r\n");

  Serial.println("request sent");
                  
  while (httpsClient.connected()) {
    String line = httpsClient.readStringUntil('\n');
    if (line == "\r") {
      Serial.println("headers received");
      break;
    }
  }

  Serial.println("reply was:");
  Serial.println("==========");
  String line;
  while(httpsClient.available()){        
    line = httpsClient.readStringUntil('\n');  //Read Line by Line
    Serial.println(line); //Print response
  }
  Serial.println("==========");
  Serial.println("closing connection");
    
  delay(7000);  //GET Data at every 7 seconds
}

            

Klik Upload dan tunggu sampai Done Uploading.

upload sketch

Tampilan serial monitor:

serial monitor