-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
146 lines (119 loc) · 4.63 KB
/
main.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
import os
import time
import requests
from dotenv import load_dotenv
from terminaltables import AsciiTable
def print_table(vacancy_descriptions, title):
table_columns = [['Язык программирования', 'Вакансий найдено', 'Вакансий обработано', 'Средняя зарплата']]
for language, stats in vacancy_descriptions.items():
table_columns.append(
[language, stats['vacancies_found'], stats['vacancies_processed'], stats['average_salary']])
table = AsciiTable(table_columns, title)
print(table.table)
def get_predicted_hh_salary(salary):
if not salary or salary['currency'] != 'RUR':
return None
predicted_salary = predict_salary(salary['from'], salary['to'])
return predicted_salary
def predict_salary(payment_from, payment_to):
if payment_from and payment_to:
return (payment_from + payment_to) / 2
elif payment_from:
return payment_from * 1.2
elif payment_to:
return payment_to * 0.8
def get_hh_vacancies(language):
vacancies_url = "https://api.hh.ru/vacancies"
area_id = '1'
vacancies_per_page = '100'
params = {
'text': language,
'area': area_id,
'per_page': vacancies_per_page,
}
all_vacancies = []
page = 0
while True:
params['page'] = page
response = requests.get(vacancies_url, params=params)
response.raise_for_status()
vacancy_descriptions = response.json()
all_vacancies.extend(vacancy_descriptions['items'])
if page >= vacancy_descriptions['pages'] - 1:
break
page += 1
time.sleep(0.5)
return all_vacancies, vacancy_descriptions['found']
def get_superjob_vacancies(language, api_key):
vacancies_url = "https://api.superjob.ru/2.0/vacancies/"
start_page_number = 0
vacancies_per_page = 100
city_name = 'Москва'
headers = {'X-Api-App-Id': api_key}
params = {
'page': start_page_number,
'count': vacancies_per_page,
'town': city_name,
'keyword': language
}
all_vacancies = []
page = 0
while True:
params['page'] = page
response = requests.get(vacancies_url, headers=headers, params=params)
response.raise_for_status()
vacancy_descriptions = response.json()
all_vacancies.extend(vacancy_descriptions['objects'])
if len(all_vacancies) >= vacancy_descriptions['total']:
break
page += 1
time.sleep(0.5)
return all_vacancies, vacancy_descriptions['total']
def fetch_sj_average_programmer_salaries(api_key, languages):
vacancies_superjob_salaries = {}
delay_time = 0.5
for language in languages:
vacancies, total_vacancies = get_superjob_vacancies(language, api_key)
salaries = []
for vacancy in vacancies:
predicted_salary = predict_salary(vacancy['payment_from'], vacancy['payment_to'])
if predicted_salary:
salaries.append(predicted_salary)
average_salary = int(sum(salaries) / len(salaries)) if salaries else 0
vacancies_superjob_salaries[language] = {
"vacancies_found": total_vacancies,
"vacancies_processed": len(salaries),
"average_salary": average_salary
}
time.sleep(delay_time)
return vacancies_superjob_salaries
def fetch_hh_average_programmer_salaries(languages):
vacancies_hh_salaries = {}
delay_time = 0.5
for language in languages:
vacancies, total_vacancies = get_hh_vacancies(language)
salaries = []
for vacancy in vacancies:
predicted_salary = get_predicted_hh_salary(vacancy['salary'])
if predicted_salary:
salaries.append(predicted_salary)
average_salary = int(sum(salaries) / len(salaries)) if salaries else 0
vacancies_hh_salaries[language] = {
"vacancies_found": total_vacancies,
"vacancies_processed": len(salaries),
"average_salary": average_salary
}
time.sleep(delay_time)
return vacancies_hh_salaries
def main():
load_dotenv()
api_key = os.getenv('SUPER_JOB_KEY')
languages = [
'Python', 'Java', 'C++', 'JavaScript', 'C#', 'Swift', 'Kotlin', 'Ruby', 'PHP', 'Go'
]
hh_average_programmer_salaries = fetch_hh_average_programmer_salaries(languages)
print_table(hh_average_programmer_salaries, "HeadHunter Moscow")
sj_average_programmer_salaries = fetch_sj_average_programmer_salaries(api_key, languages)
print_table(sj_average_programmer_salaries, "SuperJob Moscow")
if __name__ == "__main__":
main()