-
Notifications
You must be signed in to change notification settings - Fork 0
/
solar_x_flares.py
69 lines (58 loc) · 2.6 KB
/
solar_x_flares.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import hashlib
from datetime import datetime
import requests
from bs4 import BeautifulSoup
class SolarXFlares:
# Класс для получения данных из http://www.sws.bom.gov.au/Solar/1/8
# о вспышечной активности Солнца в рентгеновских лучах
def __init__(self, url):
self.url = url
self._get_html_text()
self.soup = BeautifulSoup(self.html, 'lxml')
self.new_flare = None
def _get_html_text(self):
r = requests.get(self.url)
self.html = r.text
def _crawle(self):
res = self.soup.find('p', {'class': 'file-text'})
self.result_text = res.text
def _get_data(self):
self._crawle()
r = self.result_text.replace('\n', '')
stripped = [line.strip() for line in r.split(':')]
self.new_flare = stripped[0:5]
if self.new_flare[-1] == 'Approximate Flare Start':
self.new_flare.pop()
def get_result_hash(self):
# Возвращает хеш результата, если хеш вернулся отличный, от того, что в базе,
# запрашиваем результат и сохраняем его новый хеш в базу
self._get_data()
m = hashlib.md5()
data = ''
for x in self.new_flare:
data += x
m.update(data.encode())
return m.hexdigest()
def _ut_to_datetime(self, ut):
dt = datetime.strptime(ut, '%d-%m-%Y %H%M')
return dt
def get_result(self):
# возвращает в виде dict {Name : datetime()} результат по вспышкам
self._get_data()
new_result_dict = {}
elem1, elem2, elem3, elem4 = self.new_flare
if len(self.new_flare) == 5:
elem5 = self.new_flare[-1]
new_result_dict[elem1] = self._ut_to_datetime(
elem2.replace('Approximate Flare Maximum', '').replace(' UT ', ''))
max_date = self._ut_to_datetime(elem3.split('UT')[0].rstrip())
end_date = self._ut_to_datetime(elem4.split('UT')[0].rstrip())
new_result_dict.update({'Approximate Flare Maximum': max_date})
new_result_dict.update({'Approximate Flare End': end_date})
return new_result_dict
s = SolarXFlares('http://www.sws.bom.gov.au/Solar/1/8')
print(s.get_result_hash(), s.get_result())
# {'Approximate Flare Start': datetime.datetime(2017, 7, 3, 16, 13),
# 'Approximate Flare Maximum': datetime.datetime(2017, 7, 3, 16, 15),
# 'Approximate Flare End': datetime.datetime(2017, 7, 3, 16, 17)}
# 697ade06577c29e1ab8ca53b9c78920c