/WeatherForecast

Tugas 2 Seleksi Ca-LabPro 2018

Primary LanguageJava

WeatherForecast

Dibuat oleh Antonio Setya (13516002)



Quick Links


API dan OpenWeather API

API (Application Programming Interface) adalah sekumpulan protokol, subroutine, dan tools untuk membangun sebuah aplikasi. Dalam kata lain, API adalah sekumpulan cara untuk melakukan komunikasi dengan komponen software lainnya. API dibuat oleh pengembang software untuk memudahkan pengembangan aplikasi dan memudahkan komunikasi antar aplikasi. Dengan adanya API, kita dapat menggunakan sebuah fitur dari yang diperlukan suatu software lain tanpa perlu mengetahui bagaimana software tersebut "menghasilkan" fitur tersebut.

API sendiri datang dalam berbagai bentuk. Ada API sebagai library atau framework dari sebuah bahasa pemrograman. (seperti C++ Standard Template Library atau Java Collections Framework). Ada pula API untuk operating system. API ini memberikan perantara antara aplikasi dan operating system dimana aplikasi berjalan. Terakhir, ada Web API, yang bekerja melalui jaringan komputer (seperti OpenWeather ini).

OpenWeather API adalah sebuah interface yang menyediakan data cuaca dari berbagai kota di dunia. API ini berada di api.openweathermap.org. Untuk menggunakan API dari OpenWeather, pengguna perlu mendaftarkan diri terlebih dahulu di website tersebut dan mendapatkan API key.

Untuk mendapatkan data cuaca dari suatu kota, kita lakukan GET request ke

api.openweathermap.org/data/2.5/weather?q={nama_kota}&appid={API_key},

dengan {nama_kota} diganti dengan nama kota yang diiginkan, dan {API_key} diganti dengan API key yang kita dapatkan saat melakukan registrasi. Melakukan request dengan nama kota dapat menimbulkan ambiguitas, karena bisa saja ada dua kota dengan nama yang mirip/sama. Maka dari itu, OpenWeather menyarankan untuk melakukan request dengan ID dari kota tersebut. Request tersebut dapat dilakukan ke

api.openweathermap.org/data/2.5/weather?id={id_kota}&appid={API_key},

dengan {id_kota} diganti dengan ID dari kota yang diinginkan. ID kota-kota tersebut dapat diunduh disini.

API dari OpenWeather dapat menyediakan data dalam format JSON atau XML. Dalam program ini, format data yang akan digunakan adalah JSON. Diambil dari dokumentasi API, berikut adalah contoh data yang dikirim oleh OpenWeather:

{"coord":
{"lon":145.77,"lat":-16.92},
"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],
"base":"cmc stations",
"main":{"temp":293.25,"pressure":1019,"humidity":83,"temp_min":289.82,"temp_max":295.37},
"wind":{"speed":5.1,"deg":150},
"clouds":{"all":75},
"rain":{"3h":3},
"dt":1435658272,
"sys":{"type":1,"id":8166,"message":0.0166,"country":"AU","sunrise":1435610796,"sunset":1435650870},
"id":2172797,
"name":"Cairns",
"cod":200}

Beberapa field yang muncul dalam contoh diatas bisa saja tidak muncul pada saat kita melakukan suatu request untuk suatu kota. Hal tersebut dipengaruhi oleh cuaca dan data yang diperoleh oleh OpenWeather akan bervariasi untuk setiap kota.

Untuk mendapatkan data prakiraan cuaca sampai dengan 5 hari kedepan, kita dapat melakukan GET request ke

api.openweathermap.org/data/2.5/forecast?id={id_kota}&appid={API_key},

dengan contoh response dari API sebagai berikut :

{
  "cod": "200",
  "message": 0.0097,
  "cnt": 2,
  "list": [
    {
      "dt": 1529377200,
      "main": {
        "temp": 305.5,
        "temp_min": 302.371,
        "temp_max": 305.5,
        "pressure": 1024.71,
        "sea_level": 1025.16,
        "grnd_level": 1024.71,
        "humidity": 89,
        "temp_kf": 3.13
      },
      "weather": [
        {
          "id": 801,
          "main": "Clouds",
          "description": "few clouds",
          "icon": "02d"
        }
      ],
      "clouds": {
        "all": 12
      },
      "wind": {
        "speed": 3.57,
        "deg": 109.001
      },
      "sys": {
        "pod": "d"
      },
      "dt_txt": "2018-06-19 03:00:00"
    },
    {
      "dt": 1529388000,
      "main": {
        "temp": 306.11,
        "temp_min": 303.764,
        "temp_max": 306.11,
        "pressure": 1022.99,
        "sea_level": 1023.5,
        "grnd_level": 1022.99,
        "humidity": 83,
        "temp_kf": 2.35
      },
      "weather": [
        {
          "id": 801,
          "main": "Clouds",
          "description": "few clouds",
          "icon": "02d"
        }
      ],
      "clouds": {
        "all": 12
      },
      "wind": {
        "speed": 3.76,
        "deg": 53.0044
      },
      "sys": {
        "pod": "d"
      },
      "dt_txt": "2018-06-19 06:00:00"
    }
  ]
}

Untuk lebih lengkapnya mengenai OpenWeather API, dapat dilihat disini.

Back to top

Package Structure

Terdapat dua package utama dalam program ini, yang dibungkus dalam package com.pyra, yaitu weatherforecast dan weatherforecast.data. Package "pembungkus" com.pyra dibuat untuk mengikuti Google Java Code Style.

Dalam package com.pyra.weatherforecast, terdapat empat (4) class "penting", yaitu :

  • Main : program utama dan layar utama (menampilkan layar pencarian kota)
  • WeatherScreen : menampilkan cuaca sekarang dan prakiraan cuaca kota yang dipilih
  • CitySearcher : bertugas untuk mencari kota dari data lokal berdasarkan kata kunci/substring tertentu dan mengembalikan ID dari kota tersebut. ID tersebut digunakan untuk berkomunikasi dengan OpenWeather API
  • WeatherGrabber : bertugas untuk mengambil data cuaca dari OpenWeather API berdasarkan ID dari kota yang diinginkan.

Dalam package tersebut pula, terdapat satu package lagi, yaitu data, yang berisi representasi data yang digunakan dalam program ini. Dalam package ini terdapat class City, yang merepresentasikan sebuah kota, Weather yang merepresentasikan kondisi cuaca di suatu city, dan Forecast yang merepresentasikan prakiraan cuaca di suatu city.

Berikut adalah ilustrasi hierarkis dari package yang terdapat dalam program ini.

com
 |--- pyra
        |---- weatherforecast
                        |---- Main
                        |---- WeatherScreen
                        |---- CitySearcher
                        |---- WeatherGrabber
                        |---- data
                               |---- City
                               |---- Weather
                               |---- Forecast

Back to top

Checklist

Package Component Remarks JUnit test Keterangan
com.pyra.weatherforecast Main Completed N/A
WeatherScreen Completed N/A
CitySearcher Completed Completed, Passed
WeatherGrabber Completed N/A, results are fluctuative
com.pyra.weatherforecast.data City Completed Completed, Passed
Weather Completed Completed, Passed
Forecast Completed Completed, Passed
Others JDepend result Generated Filename : jdepend.txt

Back to top

Compiling and Running

subject to change

Dependencies

Lakukan clone repository terlebih dahulu. Gunakan Eclipse IDE untuk melakukan compiling dan eksekusi program dengan lebih mudah.
atau
Jika tidak ingin menggunakan Eclipse, gunakan Makefile yang telah disediakan. Berikut tahapannya :

  1. Buka console baru, lalu arahkan current directory ke tempat dimana file-file hasil clone repository diletakkan.
  2. Ketikkan make clean terlebih dahulu untuk membersihkan folder. Untuk pengguna Windows, gunakan perintah berikut
    rm src/com/pyra/weatherforecast/*.class
    rm src/com/pyra/weatherforecast/data/*.class
    
    untuk Windows Powershell, atau
    del src/com/pyra/weatherforecast/*.class
    del src/com/pyra/weatherforecast/data/*.class
    
    untuk Windows Command Prompt biasanya.
  3. Ketikkan make all untuk melakukan compiling dan eksekusi program, atau secara manual, untuk compiling, ketikkan make build, lalu make run untuk melakukan eksekusi program.

Back to top

How to Use

Diatas merupakan tampilan utama program. Pada text bar disebelah kiri tombol Search, masukkanlah kata kunci dari nama kota yang ingin dicari.

Screenshot diatas merupakan contoh hasil pencarian. Pilih kota yang diinginkan, akan muncul jendela baru. Tunggu sebentar, maka data cuaca dan prakiraan akan muncul. Berikut contohnya.

Program ini menyediakan dua pilihan satuan untuk menampilkan data cuaca, yaitu dengan standar satuan metric atau imperial. Secara default, program menampilkan data dalam satuan metric. Untuk mengubahnya, pada jendela tersebut, klik "Unit" pada ujung kiri atas jendela, lalu pilih satuan yang diinginkan. Berikut contohnya.

Back to top