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