-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
146 lines (120 loc) · 4.58 KB
/
main.py
File metadata and controls
146 lines (120 loc) · 4.58 KB
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 requests
from itertools import count
from terminaltables import AsciiTable
from dotenv import load_dotenv
HH_TITLE = "HeadHunter Moscow"
SJ_TITLE = "SuperJob Moscow"
def predict_rub_salary(salary_from=None, salary_to=None):
if salary_from and salary_to:
expected_salary = int((salary_to + salary_from) / 2)
elif salary_to:
expected_salary = int(salary_to * 1.2)
elif salary_from:
expected_salary = int(salary_from * 0.8)
else:
expected_salary = None
return expected_salary
def get_vacancies_sj(key, language="Python", page=0):
period_in_days = 30
catalogue_count = 48
url = "https://api.superjob.ru/2.0/vacancies/"
headers = {"X-Api-App-Id": key}
params = {
"town": "Moscow",
"period": period_in_days,
"catalogues": catalogue_count,
"keyword": language,
"page": page
}
response = requests.get(url, params=params, headers=headers)
response.raise_for_status()
return response.json()
def get_statistic_vacancies_sj(sj_token):
vacancies_by_language = {}
languages = [
"Python", "Java", "Javascript", "Ruby", "PHP", "C++", "C#", "C", "Go",
"Shell"
]
for language in languages:
vacancies_processed = 0
salary_by_vacancies = []
for page in count(0, 1):
vacancies = get_vacancies_sj(sj_token, language, page=page)
if not vacancies['objects']:
break
for vacancy in vacancies['objects']:
predicted_salary = predict_rub_salary(vacancy["payment_from"],
vacancy["payment_to"])
if predicted_salary:
salary_by_vacancies.append(predicted_salary)
total_vacancies = vacancies['total']
average_salary = None
if salary_by_vacancies:
average_salary = int(
sum(salary_by_vacancies) / len(salary_by_vacancies))
vacancies_by_language[language] = {
'vacancies_found': total_vacancies,
'vacancies_processed': len(salary_by_vacancies),
'average_salary': average_salary
}
return vacancies_by_language
def get_vacancies_hh(language, page=0):
area = 1
url = 'https://api.hh.ru/vacancies'
params = {'text': language, 'area': area, 'page': page}
response = requests.get(url, params=params)
return response.json()
def get_statistic_vacancies_hh():
vacancies_by_language = {}
languages = [
"Python", "Java", "Javascript", "Ruby", "PHP", "C++", "C#", "C", "Go",
"Shell"
]
for language in languages:
vacancies_processed = 0
salary_by_vacancies = []
for page in count(0):
vacancies = get_vacancies_hh(language, page=page)
if page >= vacancies["pages"] - 1:
break
for vacancy in vacancies['items']:
salary = vacancy.get('salary')
if salary and salary['currency'] == 'RUR':
predicted_salary = predict_rub_salary(
vacancy['salary'].get('from'),
vacancy['salary'].get('to'))
if predicted_salary:
salary_by_vacancies.append(predicted_salary)
total_vacancies = vacancies['found']
average_salary = None
if salary_by_vacancies:
average_salary = int(
sum(salary_by_vacancies) / len(salary_by_vacancies))
vacancies_by_language[language] = {
'vacancies_found': total_vacancies,
'vacancies_processed': len(salary_by_vacancies),
'average_salary': average_salary
}
return vacancies_by_language
def create_table(title, statistics):
table_contents = [[
"Язык программирования", "Вакансий найдено", "Вакансий обработано",
"Средняя зарплата"
]]
for language, vacancies in statistics.items():
table_contents.append([
language, vacancies["vacancies_found"],
vacancies["vacancies_processed"], vacancies["average_salary"]
])
table = AsciiTable(table_contents, title)
return table.table
def main():
load_dotenv()
superjob_token = os.getenv('SUPERJOB_SECRET_KEY')
hh_table = create_table(HH_TITLE, get_statistic_vacancies_hh())
superjob_table = create_table(SJ_TITLE,
get_statistic_vacancies_sj(superjob_token))
print(f"{superjob_table}\n{hh_table}")
if __name__ == "__main__":
main()