def get_kabupaten(self): for prov in self.provinsi: raw_kab = simple_get(prov['url']) html = bs(raw_kab, 'html.parser') div = html.find('div', {'id': 'TabPaneCuaca1'}) table = div.find('table', {'class': 'table-prakicu-provinsi'}) for a in table.findAll('a'): text = a.text link = a['href'] query = urlparse.urlparse(link).query url = os.path.join(os.path.split(CUACA_URL)[0], link) self.kabupaten.append({ "prov": prov['code'], "name": text, "link": link, "url": url, "code": urlparse.parse_qs(query)['AreaID'][0] }) return self.kabupaten
def get(self): raw_html = simple_get(self.URL) html = bs(raw_html, 'html.parser') kab = html.find('div', {'class': 'prakicu-kabkota'}) nav_tab = [] for li in kab.ul.findAll('li'): by_id = kab.find('div', {'id': li.a['href'].replace('#', '')}) for kota in by_id.findAll('div', {'class': 'prakicu-kota'}): waktu = kota.h2.text kiri = kota.find('div', {'class': 'kiri'}) icon = kiri.img['src'] cuaca = kiri.p.text kanan = kota.find('div', {'class': 'kanan'}) suhu = kanan.h2.text p_all = [] p = kanan.findAll('p') p_atas = p[0] if len(p) >= 2 else None for i in p_atas.findAll('i'): i.replaceWith(" ") p_atas = str(u''.join( p_atas.text).encode('utf-8').strip()).split(' ') suhu_min = str(p_atas[0]) if len(p_atas) >= 3 else None suhu_max = p_atas[1] if len(p_atas) >= 3 else None lembab = p_atas[2] if len(p_atas) >= 3 else None p_bawah = p[1] if len(p) >= 2 else None p_bawah.br.replaceWith("-") for i in p_bawah.findAll('i'): i.replaceWith(" ") p_bawah = str(u''.join( p_bawah.text).encode('utf-8').strip()).split('-') angin = p_bawah[0] if len(p_bawah) >= 2 else None arah_angin = p_bawah[1] if len(p_bawah) >= 2 else None self.results.append({ "hari": li.a.text, "area_id": self.area_id, "prov": self.prov, "waktu": waktu, "icon": icon, "cuaca": cuaca, "suhu": suhu, "suhu_min": suhu_min, "suhu_max": suhu_max, "lembab": lembab, "angin": angin, "arah_angin": arah_angin }) return self.results
def get(self): self.raw_html = simple_get(CUACA_BANDARA_AKTUAL_URL) self.html = bs(self.raw_html, 'html.parser') tbody = self.html.table.tbody for tr in tbody.findAll('tr'): td = tr.findAll('td') self.results.append({ "nama": td[1].text, "waktu_pengamatan": td[2].text, "angin": { "arah_dari": td[3].text, "kecepatan": td[4].text }, "jarak_pandang": td[5].text, "cuaca": td[6].text, "suhu": td[7].text, "titik_embun": td[8].text, "tekanan_udara": td[9].text }) return self.results
def get_provinsi(self): raw_html = simple_get(self.URL) html = bs(raw_html, 'html.parser') for div in html.findAll('div', {'class': 'list-cuaca-provinsi'}): for a in div.findAll('a'): text = a.text link = a['href'] query = urlparse.urlparse(link).query url = os.path.join(os.path.split(CUACA_URL)[0], link) self.provinsi.append({ "name": text, "link": link, "url": url, "code": urlparse.parse_qs(query)['Prov'][0] }) return self.provinsi
def get(self, waktu_prakiraan=1): if waktu_prakiraan < 1 or waktu_prakiraan > 12: raise MaxMinPrakiraan("Waktu Prakiraan Minium 1 dan Maximum 12") self.URL = CUACA_BANDARA_PRAKIRAAN_URL.format(waktu_prakiraan) self.raw_html = simple_get(self.URL) self.html = bs(self.raw_html, 'html.parser') tbody = self.html.table.tbody for tr in tbody.findAll('tr'): td = tr.findAll('td') self.results.append({ "nama": td[1].text, "waktu_prakiraan": td[2].text, "angin": { "arah_dari": td[3].text, "kecepatan": td[4].text }, "jarak_pandang": td[5].text, "cuaca": td[6].text, "probabilitas": td[7].text }) return self.results