244 lines
7.6 KiB
Python
244 lines
7.6 KiB
Python
import json
|
||
|
||
import project_sets
|
||
from collections import OrderedDict
|
||
|
||
def get_ld_logo():
|
||
data = {
|
||
"@context": "https://schema.org",
|
||
"@type": "Organization",
|
||
"url": project_sets.domain,
|
||
"logo": project_sets.logo
|
||
}
|
||
return data
|
||
|
||
|
||
def get_ld_company(offices):
|
||
try:
|
||
main_office = offices.get(main_office=True)
|
||
except:
|
||
main_office = offices[0]
|
||
|
||
|
||
data = {
|
||
"@context": "https://schema.org",
|
||
"@type": "LocalBusiness",
|
||
"logo": project_sets.logo,
|
||
}
|
||
|
||
ld_for_main_office = get_ld_office(main_office)
|
||
data.update(ld_for_main_office)
|
||
|
||
|
||
departments = []
|
||
for office in offices:
|
||
if office == main_office:
|
||
continue
|
||
|
||
departments.append(get_ld_office(office))
|
||
|
||
# if departments:
|
||
# data.update({
|
||
# 'department': departments
|
||
# })
|
||
|
||
return json.dumps(data)
|
||
|
||
|
||
def get_ld_office(office):
|
||
|
||
try:
|
||
phones = office.phones()
|
||
except:
|
||
phones = []
|
||
|
||
if not phones:
|
||
try:
|
||
phones = office.rel_contacts_for_office
|
||
except:
|
||
phones = []
|
||
|
||
data = {
|
||
"name": office.name,
|
||
}
|
||
|
||
# На каждой странице (с разметкой или без нее) должно присутствовать хотя бы одно изображение. Робот Google выберет лучшее изображение для показа в результатах поиска с учетом соотношения сторон и разрешения.
|
||
# URL изображений должны быть доступны для сканирования и индексирования. Проверить, есть ли у поискового робота Google доступ к URL вашего контента, можно с помощью инструмента, описанного в этой статье.
|
||
# Изображения должны соответствовать размеченному контенту.
|
||
# Допускаются только графические файлы форматов, совместимых с Google Картинками.
|
||
# Предоставьте несколько изображений в высоком разрешении (не менее 50 000 пикселей по произведению ширины и высоты) со следующими соотношениями сторон: 16 × 9, 4 × 3 и 1 × 1.
|
||
data.update({
|
||
"image": [
|
||
project_sets.logo,
|
||
]
|
||
})
|
||
|
||
# data.update({
|
||
# "@type": "Store",
|
||
# })
|
||
# не обязательно!
|
||
|
||
# AnimalShelter
|
||
# ArchiveOrganization
|
||
# AutomotiveBusiness
|
||
# ChildCare
|
||
# Dentist
|
||
# DryCleaningOrLaundry
|
||
# EmergencyService
|
||
# EmploymentAgency
|
||
# EntertainmentBusiness
|
||
# FinancialService
|
||
# FoodEstablishment
|
||
# GovernmentOffice
|
||
# HealthAndBeautyBusiness
|
||
# HomeAndConstructionBusiness
|
||
# InternetCafe
|
||
# LegalService
|
||
# Library
|
||
# LodgingBusiness
|
||
# MedicalBusiness
|
||
# ProfessionalService
|
||
# RadioStation
|
||
# RealEstateAgent
|
||
# RecyclingCenter
|
||
# SelfStorage
|
||
# ShoppingCenter
|
||
# SportsActivityLocation
|
||
# Store
|
||
# TelevisionStation
|
||
# TouristInformationCenter
|
||
# TravelAgency
|
||
|
||
i_Dict = {
|
||
"address": {
|
||
"@type": "PostalAddress",
|
||
"streetAddress": office.address,
|
||
"addressLocality": office.city,
|
||
# "addressRegion": "CA",
|
||
# "postalCode": "95129",
|
||
# "addressCountry": "US"
|
||
},
|
||
}
|
||
if phones:
|
||
i_Dict["address"].update({
|
||
"telephone": '{0}{1}'.format(phones[0].prefix, phones[0].nomber_phone),
|
||
})
|
||
|
||
data.update(i_Dict)
|
||
|
||
gps_longitude = getattr(office, 'gps_longitude', None)
|
||
gps_latitude = getattr(office, 'gps_latitude', None)
|
||
if not gps_longitude:
|
||
gps_longitude = getattr(project_sets, 'gps_longitude', None)
|
||
if not gps_latitude:
|
||
gps_latitude = getattr(project_sets, 'gps_latitude', None)
|
||
if gps_longitude and gps_latitude:
|
||
i_Dict = {
|
||
"geo": {
|
||
"@type": "GeoCoordinates",
|
||
"latitude": gps_latitude,
|
||
"longitude": gps_longitude
|
||
},
|
||
}
|
||
data.update(i_Dict)
|
||
|
||
data.update({
|
||
"url": project_sets.domain
|
||
})
|
||
|
||
# "foundingDate": "2005-02-07", # дата основания
|
||
|
||
company_reference_links = getattr(project_sets, 'company_reference_links')
|
||
if company_reference_links:
|
||
data.update({
|
||
"sameAs": company_reference_links
|
||
})
|
||
|
||
priceRange = getattr(office, 'priceRange', '$')
|
||
if priceRange:
|
||
data.update({
|
||
"priceRange": priceRange
|
||
})
|
||
|
||
work_time_from = getattr(office, 'work_time_from', None)
|
||
if not work_time_from:
|
||
work_time_from = getattr(project_sets, 'work_time_from', '9:00')
|
||
work_time_to = getattr(office, 'work_time_to', None)
|
||
if not work_time_to:
|
||
work_time_to = getattr(project_sets, 'work_time_to', '18:00')
|
||
|
||
i_Dict = {
|
||
"openingHoursSpecification": [
|
||
{
|
||
"@type": "OpeningHoursSpecification",
|
||
"dayOfWeek": [
|
||
"https://schema.org/Monday",
|
||
"https://schema.org/Tuesday",
|
||
"https://schema.org/Wednesday",
|
||
"https://schema.org/Thursday",
|
||
"https://schema.org/Friday",
|
||
# "https://schema.org/Saturday"
|
||
],
|
||
"opens": work_time_from,
|
||
"closes": work_time_to
|
||
},
|
||
# {
|
||
# "@type": "OpeningHoursSpecification",
|
||
# "dayOfWeek": "Sunday",
|
||
# "opens": "08:00",
|
||
# "closes": "23:00"
|
||
# }
|
||
],
|
||
}
|
||
# i_Dict = {
|
||
# "openingHoursSpecification": [
|
||
# {
|
||
# "@type": "OpeningHoursSpecification",
|
||
# "dayOfWeek": "https://schema.org/Monday",
|
||
# "opens": work_time_from,
|
||
# "closes": work_time_to
|
||
# },
|
||
# {
|
||
# "@type": "OpeningHoursSpecification",
|
||
# "dayOfWeek": "https://schema.org/Tuesday",
|
||
# "opens": work_time_from,
|
||
# "closes": work_time_to
|
||
# },
|
||
# {
|
||
# "@type": "OpeningHoursSpecification",
|
||
# "dayOfWeek": "https://schema.org/Wednesday",
|
||
# "opens": work_time_from,
|
||
# "closes": work_time_to
|
||
# },
|
||
# {
|
||
# "@type": "OpeningHoursSpecification",
|
||
# "dayOfWeek": "https://schema.org/Thursday",
|
||
# "opens": work_time_from,
|
||
# "closes": work_time_to
|
||
# },
|
||
# {
|
||
# "@type": "OpeningHoursSpecification",
|
||
# "dayOfWeek": "https://schema.org/Friday",
|
||
# "opens": work_time_from,
|
||
# "closes": work_time_to
|
||
# },
|
||
# {
|
||
# "@type": "OpeningHoursSpecification",
|
||
# "dayOfWeek": "https://schema.org/Saturday",
|
||
# "opens": work_time_from,
|
||
# "closes": work_time_to
|
||
# },
|
||
# {
|
||
# "@type": "OpeningHoursSpecification",
|
||
# "dayOfWeek": "https://schema.org/Sunday",
|
||
# "opens": work_time_from,
|
||
# "closes": work_time_to
|
||
# },
|
||
# ],
|
||
# }
|
||
data.update(i_Dict)
|
||
|
||
return data
|
||
|
||
|