-
Notifications
You must be signed in to change notification settings - Fork 0
/
local.py
257 lines (232 loc) · 13.4 KB
/
local.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
"""
Installing essential libraries and packages which can be run in your terminal, virtual env, etc.:
Commands:
pip install bs4
pip install requests
pip install jdatetime
"""
import requests
from bs4 import BeautifulSoup
import jdatetime
from ColorsClass.colors import bcolors
# After importing all the essential packages that we need, our program is ready to begin.
class Local:
def __init__(self):
# For all data except currencies.
self.symbol_list, self.price_list = [], []
# For currencies data only.
self.currency_symbol_list, self.currency_price_list = [], []
self.req_error = True
def get_data(self):
# Getting current time (momentary year, month, day, etc).
current_time = jdatetime.datetime.now()
date = str(current_time)
# Gold and Silver data.
try:
# Handle if requests response status code is not OK.
response = requests.get("https://www.tgju.org/gold-chart")
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
tables = soup.find_all('table', attrs={'data-tab-id': '1'})
thead_tag = tables[0].find('thead')
title = thead_tag.find('th')
# Gold shekel.
shekel_row = tables[1].find('tr', attrs={'data-market-row': 'mesghal'})
shekel_symbol = shekel_row.find('th')
shekel_price = shekel_row.find('td', {'class': 'nf'})
print(bcolors.HEADER + bcolors.BOLD + "1." + title.nextSibling.nextSibling.text + " " + shekel_symbol.text[:-1]
+ ": " + bcolors.ENDC + bcolors.OKBLUE + shekel_price.text + " ریال" + bcolors.ENDC +
" |" + ' تاریخ:' + date[:16])
# Creating target lists ("symbol_list", "price_list") for inserting our data to mysql database.
self.symbol_list.append(shekel_symbol.text[:-1])
self.price_list.append(shekel_price.text + " ریال")
# Golds.
gold_tbody_tag = tables[0].find('tbody')
gold_rows = gold_tbody_tag.find_all('tr')
counter = 1
for gr in gold_rows:
gold_prices = gr.find_all('td', attrs={'class': 'nf'})
gold_symbols = gr.find_all('th')
for gs in gold_symbols:
counter += 1
print(bcolors.HEADER + bcolors.BOLD + str(counter) + "." + title.nextSibling.nextSibling.text + " " + gs.text, end=": " +
bcolors.ENDC)
for gp in gold_prices[0]:
print(bcolors.OKBLUE + gp.text + " ریال" + bcolors.ENDC + " |" + ' تاریخ:' + date[:16])
# Creating target lists ("symbol_list", "price_list") for inserting our data to mysql database.
for s in gold_symbols:
self.symbol_list.append(s.text)
for p in gold_prices[0]:
self.price_list.append(p.text + " ریال")
# Silvers.
silver_tbody_tag = tables[3].find('tbody')
silver_rows = silver_tbody_tag.find_all('tr')
counter2 = counter
for sr in silver_rows:
silver_prices = sr.find_all('td', attrs={'class': 'nf'})
silver_symbols = sr.find_all('th')
for ss in silver_symbols:
counter2 += 1
print(bcolors.HEADER + bcolors.BOLD + str(counter2) + "." + title.nextSibling.nextSibling.text + " " + ss.text, end=": " +
bcolors.ENDC)
for sp in silver_prices[0]:
print(bcolors.OKBLUE + sp.text + " ریال" + bcolors.ENDC + " |" + ' تاریخ:' + date[:16])
# Creating target lists ("symbol_list", "price_list") for inserting our data to mysql database.
for s in silver_symbols:
self.symbol_list.append(s.text)
for p in silver_prices[0]:
self.price_list.append(p.text + " ریال")
# If requests response receives an error "req_error" value will change to False and database module methods won't be called and ran.
else:
print(bcolors.WARNING + "Request error:", str(response.status_code) + bcolors.ENDC)
self.req_error = False
except requests.exceptions.RequestException as Error:
pass
def get_ounce(self):
# Getting current time (momentary year, month, day, etc).
current_time = jdatetime.datetime.now()
date = str(current_time)
# International ounces.
try:
# Handle if requests response status code is not OK.
response = requests.get("https://www.tgju.org/gold-global")
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
tables = soup.find_all('table', attrs={'class': 'data-table'})
tbody_tag = tables[0].find('tbody')
thead_tag = tables[0].find('thead')
title = thead_tag.find('th')
rows = tbody_tag.find_all('tr')
counter = 0
for r in rows:
prices = r.find_all('td', attrs={'class': 'nf'})
symbols = r.find_all('th')
for s in symbols:
counter += 1
print(bcolors.HEADER + bcolors.BOLD + str(counter) + "." + title.nextSibling.nextSibling.text + " " + s.text[:-1], end=": " +
bcolors.ENDC)
for p in prices[0]:
print(bcolors.OKBLUE + p.text + " ریال" + bcolors.ENDC + " |" + ' تاریخ:' + date[:16])
# Creating target lists ("symbol_list", "price_list") for inserting our data to mysql database.
for s in symbols:
self.symbol_list.append(s.text)
for p in prices[0]:
self.price_list.append(p.text + " ریال")
# If requests response receives an error "req_error" value will change to False and database module methods won't be called and ran.
else:
print(bcolors.WARNING + "Request error:", str(response.status_code) + bcolors.ENDC)
self.req_error = False
except requests.exceptions.RequestException as Error:
pass
def get_gold_coin(self):
# Getting current time (momentary year, month, day, etc).
current_time = jdatetime.datetime.now()
date = str(current_time)
# Gold coins.
try:
# Handle if requests response status code is not OK.
response = requests.get("https://www.tgju.org/coin")
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
tables = soup.find_all('table', attrs={'class': 'data-table'})
# Same title for all.
thead_tag = tables[0].find('thead')
title = thead_tag.find('th')
# First table.
tbody_tag = tables[0].find('tbody')
rows = tbody_tag.find_all('tr')
counter = 0
for r in rows:
prices = r.find_all('td')
symbols = r.find_all('th')
for s in symbols:
counter += 1
print(bcolors.HEADER + bcolors.BOLD + str(counter) + "." + title.nextSibling.nextSibling.text + " " + s.text, end=": " +
bcolors.ENDC)
for p in prices[0]:
print(bcolors.OKBLUE + p.text + " ریال" + bcolors.ENDC + " |" + ' تاریخ:' + date[:16])
# Creating target lists ("symbol_list", "price_list") for inserting our data to mysql database.
for s in symbols:
self.symbol_list.append(s.text)
for p in prices[0]:
self.price_list.append(p.text + " ریال")
# Second table.
tbody_tag2 = tables[2].find('tbody')
rows2 = tbody_tag2.find_all('tr')
counter2 = counter
for r2 in rows2:
prices2 = r2.find_all('td')
symbols2 = r2.find_all('th')
for s2 in symbols2:
counter2 += 1
print(bcolors.HEADER + bcolors.BOLD + str(counter2) + "." + title.nextSibling.nextSibling.text + " " + s2.text, end=": " +
bcolors.ENDC)
for p2 in prices2[0]:
print(bcolors.OKBLUE + p2.text + " ریال" + bcolors.ENDC + " |" + ' تاریخ:' + date[:16])
# Creating target lists ("symbol_list", "price_list") for inserting our data to mysql database.
for s2 in symbols2:
self.symbol_list.append(s2.text)
for p2 in prices2[0]:
self.price_list.append(p2.text + " ریال")
# If requests response receives an error "req_error" value will change to False and database module methods won't be called and ran.
else:
print(bcolors.WARNING + "Request error:", str(response.status_code) + bcolors.ENDC)
self.req_error = False
except requests.exceptions.RequestException as Error:
pass
def get_currencies(self):
# Getting current time (momentary year, month, day, etc).
current_time = jdatetime.datetime.now()
date = str(current_time)
# All main currencies for different countries.
try:
# Handle if requests response status code is not OK.
response = requests.get("https://www.tgju.org/currency")
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
tables = soup.find_all('table', attrs={'class': 'data-table'})
# Same title for all.
thead_tag = tables[0].find('thead')
title = thead_tag.find('th')
# First table.
tbody_tag = tables[0].find('tbody')
rows = tbody_tag.find_all('tr')
counter = 0
for r in rows:
prices = r.find_all('td', attrs={'class': 'nf'})
symbols = r.find_all('th')
for s in symbols:
counter += 1
print(bcolors.HEADER + bcolors.BOLD + str(counter) + "." + title.nextSibling.nextSibling.text + " " + s.text, end=": " +
bcolors.ENDC)
for p in prices[0]:
print(bcolors.OKBLUE + p.text + " ریال" + bcolors.ENDC + " |" + ' تاریخ:' + date[:16])
# Creating target lists ("symbol_list", "price_list") for inserting our data to mysql database.
for s in symbols:
self.currency_symbol_list.append(s.text)
for p in prices[0]:
self.currency_price_list.append(p.text + " ریال")
# Second table.
tbody_tag2 = tables[1].find('tbody')
rows2 = tbody_tag2.find_all('tr')
counter2 = counter
for r2 in rows2:
prices2 = r2.find_all('td', attrs={'class': 'nf'})
symbols2 = r2.find_all('th')
for s2 in symbols2:
counter2 += 1
print(bcolors.HEADER + bcolors.BOLD + str(counter2) + "." + title.nextSibling.nextSibling.text + " " + s2.text, end=": " +
bcolors.ENDC)
for p2 in prices2[0]:
print(bcolors.OKBLUE + p2.text + " ریال" + bcolors.ENDC + " |" + ' تاریخ:' + date[:16])
# Creating target lists ("symbol_list", "price_list") for inserting our data to mysql database.
for s2 in symbols2:
self.currency_symbol_list.append(s2.text)
for p2 in prices2[0]:
self.currency_price_list.append(p2.text + " ریال")
# If requests response receives an error "req_error" value will change to False and database module methods won't be called and ran.
else:
print(bcolors.WARNING + "Request error:", str(response.status_code) + bcolors.ENDC)
self.req_error = False
except requests.exceptions.RequestException as Error:
pass