141 lines
6.0 KiB
Python
141 lines
6.0 KiB
Python
import datetime
|
||
import project_sets
|
||
|
||
|
||
def get_ld_vacancies(data_Dict):
|
||
|
||
# Разметку JobPosting можно размещать только на страницах, которые содержат одно объявление о вакансии.
|
||
# Не разрешается добавлять разметку JobPosting на какие-либо другие страницы, в том числе те, на которых нет информации ни об одной вакансии.
|
||
|
||
vacancies_list = []
|
||
|
||
for item in data_Dict:
|
||
data = {
|
||
"@context": "https://schema.org/",
|
||
"@type": "JobPosting",
|
||
"title": item['title'],
|
||
"description": item['description'],
|
||
"datePosted": datetime.datetime.now().strftime('%Y-%m-%d'),
|
||
"validThrough": item['validThrough'].strftime('%Y-%m-%dT%H:%M'), #"2017-03-18T00:00", # окончание срока действия
|
||
"identifier": {
|
||
"@type": "PropertyValue",
|
||
"name": project_sets.company_name,
|
||
"value": str(item['id'])
|
||
},
|
||
"hiringOrganization": {
|
||
"@type": "Organization",
|
||
"name": project_sets.company_name,
|
||
"sameAs": project_sets.domain,
|
||
"logo": project_sets.logo
|
||
},
|
||
}
|
||
|
||
if 'office' in item:
|
||
# используется для указания места, в котором сотрудник будет выполнять работу. Если определенного места (например, офиса или производственной площадки) нет, использовать это свойство не обязательно.
|
||
job_place_Dict = {
|
||
"jobLocation": {
|
||
"@type": "Place",
|
||
"address": {
|
||
"@type": "PostalAddress",
|
||
"streetAddress": item['office'].address,
|
||
"addressLocality": item['office'].city,
|
||
"addressCountry": "BY"
|
||
},
|
||
},
|
||
}
|
||
else:
|
||
job_place_Dict = {
|
||
"jobLocationType": "TELECOMMUTE" # только удаленка
|
||
}
|
||
data.update(job_place_Dict)
|
||
|
||
if 'required_country_of_residence' in item:
|
||
# используется для указания территории, на которой может проживать кандидат на должность. Необходимо, чтобы была задана по меньшей мере одна страна
|
||
required_country_of_residence = {
|
||
"applicantLocationRequirements": {
|
||
"@type": "Country",
|
||
"name": item['required_country_of_residence']['country']
|
||
},
|
||
}
|
||
data.update(required_country_of_residence)
|
||
|
||
if 'salary' in item:
|
||
salary_Dict = {
|
||
"baseSalary": {
|
||
"@type": "MonetaryAmount",
|
||
"currency": item['salary']['currency'],
|
||
"value": {
|
||
"@type": "QuantitativeValue",
|
||
"unitText": item['salary']['time_unit']
|
||
# HOUR
|
||
# DAY
|
||
# WEEK
|
||
# MONTH
|
||
# YEAR
|
||
}
|
||
}
|
||
}
|
||
if 'price' in item['salary']:
|
||
salary_Dict['baseSalary']['value']['value'] = item['salary']['price']
|
||
elif 'price_from' in item['salary']:
|
||
salary_Dict['baseSalary']['value']['minValue'] = item['salary']['price_from']
|
||
|
||
if 'price_to' in item['salary']:
|
||
salary_Dict['baseSalary']['value']['maxValue'] = item['salary']['price_to']
|
||
|
||
data.update(salary_Dict)
|
||
|
||
# Указание на то, поддерживается ли на странице с объявлением о вакансии отправка резюме напрямую.
|
||
data.update({
|
||
'directApply': item['directApply']
|
||
})
|
||
|
||
# Вид занятости Укажите одно или несколько значений
|
||
if 'employmentType' in item:
|
||
# FULL_TIME
|
||
# PART_TIME
|
||
# CONTRACTOR
|
||
# TEMPORARY
|
||
# INTERN
|
||
# VOLUNTEER
|
||
# PER_DIEM
|
||
# OTHER
|
||
data.update({
|
||
'employmentType': item['employmentType']
|
||
})
|
||
|
||
if 'educationRequirements' in item:
|
||
e_Dict = {
|
||
"educationRequirements": {
|
||
"@type": "EducationalOccupationalCredential",
|
||
"credentialCategory": item['educationRequirements']
|
||
# high school
|
||
# associate degree
|
||
# bachelor degree
|
||
# professional certificate
|
||
# postgraduate degree
|
||
},
|
||
}
|
||
data.update(e_Dict)
|
||
|
||
if 'experienceRequirements' in item:
|
||
e_Dict = {
|
||
"experienceRequirements": {
|
||
"@type": "OccupationalExperienceRequirements",
|
||
"monthsOfExperience": item['experienceRequirements'] # опыт работы в месяцах
|
||
},
|
||
}
|
||
data.update(e_Dict)
|
||
|
||
# Со значением "истина" это свойство будет указывать на то, что кандидатам достаточно иметь опыт, если у них нет требуемого образования
|
||
if 'required_only_experience' in item:
|
||
if 'experienceRequirements' in item and 'educationRequirements' in item:
|
||
data.update({
|
||
'experienceInPlaceOfEducation': item['required_only_experience']
|
||
})
|
||
|
||
vacancies_list.append(data)
|
||
|
||
return vacancies_list
|
||
|