def get_top_resumes(request): parser = HhApiParser() resumes = parser.get_applicant_resumes( HhUser.objects.get(user_id=request.user.id).access_token) top_resumes = [ r for r in resumes['items'] if r['status']['id'] == 'published' ] return top_resumes[:3]
def check_salary(salary, resume_id, access_token): parser = HhApiParser() vacancies = parser.get_vacancies_similar_to_resume(resume_id, access_token) salaries = [ vacancy['salary']['from'] for vacancy in vacancies if vacancy['salary'] is not None and vacancy['salary']['currency'] == 'RUR' ] salaries = np.array(list(filter(lambda x: x is not None, salaries))) salary_median = int(np.median(salaries)) if len(salaries) < 20: if salary is None: return { 'title': 'Не указана желаемая зарплата', 'text': 'Статистика HeadHunter показывает, что если в резюме отсутствуют зарплатные ожидания, то количество' ' приглашений снижается. Это связано с тем, что работодатель склонен минимизировать время на' ' подбор:он в первую очередь приглашает тех, чье резюме дает исчерпывающую информацию — как о' ' профессиональном уровне, так и о зарплатных ожиданиях. И только потом приступает к рассмотрению' ' других кандидатов.', 'type': 'danger' } else: return False if salary is None: return { 'title': 'Не указана желаемая зарплата', 'text': 'Статистика HeadHunter показывает, что если в резюме отсутствуют зарплатные ожидания, то количество' ' приглашений снижается. Это связано с тем, что работодатель склонен минимизировать время на' ' подбор:он в первую очередь приглашает тех, чье резюме дает исчерпывающую информацию — как о' ' профессиональном уровне, так и о зарплатных ожиданиях. И только потом приступает к рассмотрению' ' других кандидатов.', 'sub_text': f'Наиболее распространенное значение заработной платы, среди опубликованных вакансий,' f' похожих на ваше резюме:', 'sub_list': [f'{salary_median} руб'], 'type': 'danger' } return { 'title': 'Информация о среднем значении ЗП', 'sub_text': f'Наиболее распространенное значение заработной платы, среди опубликованных вакансий,' f' похожих на ваше резюме:', 'sub_list': [f'{salary_median} руб'], 'type': 'info' }
def get_all_resumes(request): parser = HhApiParser() resumes = parser.get_applicant_resumes( HhUser.objects.get(user_id=request.user.id).access_token)['items'] access_token = HhUser.objects.get(user_id=request.user.id).access_token resumes_full_info = [ parser.get_applicant_resume_data(item['id'], access_token) for item in resumes if item['status']['id'] == 'published' ] return resumes_full_info
def resume_save(request): resume_id = request.GET.get('id', '') change_params = { 'last_name': request.GET.get('last_name', ''), 'first_name': request.GET.get('first_name', ''), 'title': request.GET.get('title', ''), 'birth_date': request.GET.get('birth_date', ''), } salary_amount = request.GET.get('salary_amount', 0) salary_currency = request.GET.get('salary_currency', 'RUR') middle_name = request.GET.get('middle_name', '') skills = request.GET.get('skills', '') if salary_amount != "": if salary_currency != 'Валюта': change_params['salary'] = { 'amount': salary_amount, 'currency': salary_currency } else: change_params['salary'] = { 'amount': salary_amount, 'currency': 'RUR' } else: change_params['salary'] = {'amount': 0, 'currency': 'RUR'} if middle_name == '': middle_name = None change_params['middle_name'] = middle_name if skills == '': skills = None change_params['skills'] = skills parser = HhApiParser() access_token = HhUser.objects.get(user_id=request.user.id).access_token parser.change_user_resume_data(resume_id, change_params, access_token) return redirect(f'http://127.0.0.1:8000/app/resume?resume_id={resume_id}')
def login_catch_user_code(request): user_code = request.GET.get("code", None) if user_code is None: return redirect('login', {'error': 'Отказано в доступе'}) req_args = { 'grant_type': 'authorization_code', 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'redirect_uri': REDIRECT_URI, 'code': user_code, } response = requests.post('https://hh.ru/oauth/token', req_args) token_data = response.json() access_token = token_data.get('access_token') refresh_token = token_data.get('refresh_token') parser = HhApiParser() account_data = parser.get_auth_info(access_token) if not HhUser.objects.filter(hh_id=account_data.get('id')): user = User(first_name=account_data.get('first_name'), last_name=account_data.get('last_name'), email=account_data.get('email')) user.save() hh_user = HhUser(middle_name=account_data.get('middle_name'), hh_id=account_data.get('id'), access_token=access_token, refresh_token=refresh_token, user=user) hh_user.save() else: hh_user = HhUser.objects.get(hh_id=account_data.get('id')) hh_user.access_token = access_token hh_user.refresh_token = refresh_token hh_user.save() user = User.objects.get(id=hh_user.user.id) login(request, user) request.session.set_expiry(token_data.get('expires_in') - 30) return redirect('home')
def resume(request): parser = HhApiParser() access_token = HhUser.objects.get(user_id=request.user.id).access_token username = get_user_name(request) resume_id = request.GET.get("resume_id", "") top_resumes = get_top_resumes(request) info = parser.get_applicant_resume_data(resume_id, access_token) db_service = DbService() currencies_db = db_service.execute_script('select code from currency') currencies = [cur[0] for cur in currencies_db] # Получить рекомендации по резюме warnings = get_recommendations(info, request) warnings.sort(key=operator.itemgetter('type')) # Обработать дату for exp in info['experience']: start = datetime.datetime.fromisoformat(exp['start']) exp['start'] = start.strftime(f'{MONTH_LIST[start.month-1]} %Y') if exp['end'] is not None: end = datetime.datetime.fromisoformat(exp['end']) exp['end'] = end.strftime(f'{MONTH_LIST[end.month - 1]} %Y') return render( request, 'main/resume_edit.html', { 'active_el': resume_id, 'user': username, 'resume': info, 'warnings': warnings, 'top_resumes': top_resumes, 'currencies': currencies, })
from datetime import datetime, timedelta from tqdm import tqdm import threading import gc from data_parsers.hhApiParser import HhApiParser from services.db_service import DbService parser = HhApiParser() cur_date = {'from': (datetime.now() - timedelta(days=1)), 'to': datetime.now()} req_param = { 'specialization': 1, 'per_page': 0, 'date_from': cur_date['from'].strftime('%Y-%m-%dT%H:%M:%S'), 'date_to': cur_date['to'].strftime('%Y-%m-%dT%H:%M:%S') } data = parser.execute_request(req_param=req_param) dates = [] total_vacancies_number = 0 while data['found'] != 0: while data['found'] > 2000: cur_date['from'] += timedelta(hours=1) req_param['date_from'] = cur_date['from'].strftime('%Y-%m-%dT%H:%M:%S') data = parser.execute_request(req_param=req_param) total_vacancies_number += data['found'] dates.append([ cur_date['from'].strftime('%Y-%m-%dT%H:%M:%S'), cur_date['to'].strftime('%Y-%m-%dT%H:%M:%S') ])
from data_parsers.hhApiParser import HhApiParser from services.db_service import DbService # Получение данных справочника dictionaries и занесение их в parser = HhApiParser() db_service = DbService() data = parser.get_dictionaries() db_service.add_to_schedule_table(data.get('schedule')) db_service.add_to_experience_table(data.get('experience')) db_service.add_to_currency_table(data.get('currency')) db_service.add_to_employment_table(data.get('employment')) db_service.add_to_employer_type_table(data.get('employer_type')) # Получение данных из справочника specializations и занесение их в БД data = parser.get_specializations_dict() db_service.add_to_specialization_table(data) # Удаление использованных данных del parser del db_service del data