Use Russian transport
This commit is contained in:
@@ -17,9 +17,11 @@ from .models import MobileDeListing, MobileDeSearchPage
|
||||
|
||||
logger = logging.getLogger("mobile_de.client")
|
||||
|
||||
BASE_URL = "https://suchen.mobile.de"
|
||||
SEARCH_PATH = "/fahrzeuge/search.html"
|
||||
DETAIL_PATH = "/fahrzeuge/details.html"
|
||||
TRANSPORT_BASE_URL = "https://www.mobile.de"
|
||||
TRANSPORT_SEARCH_PATH = "/ru/транспортные-средства/поиск.html"
|
||||
TRANSPORT_DETAIL_PATH = "/ru/транспортные-средства/подробности.html"
|
||||
PUBLIC_BASE_URL = "https://suchen.mobile.de"
|
||||
PUBLIC_DETAIL_PATH = "/fahrzeuge/details.html"
|
||||
DEFAULT_HEADERS = {
|
||||
"user-agent": (
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
||||
@@ -27,7 +29,7 @@ DEFAULT_HEADERS = {
|
||||
"Chrome/124.0.0.0 Safari/537.36"
|
||||
),
|
||||
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||
"accept-language": "en-US,en;q=0.9",
|
||||
"accept-language": "ru-RU,ru;q=0.9,de;q=0.8,en;q=0.7",
|
||||
}
|
||||
MOBILEDE_HTTP_MAX_RETRIES = max(0, int(os.getenv("MOBILEDE_HTTP_MAX_RETRIES", "4")))
|
||||
MOBILEDE_HTTP_BACKOFF_BASE_SECONDS = max(0.0, float(os.getenv("MOBILEDE_HTTP_BACKOFF_BASE_SECONDS", "1.2")))
|
||||
@@ -103,11 +105,11 @@ class MobileDeClient:
|
||||
"od": "up",
|
||||
"vc": "Car",
|
||||
"s": "Car",
|
||||
"lang": "en",
|
||||
"lang": "ru",
|
||||
"pageNumber": page_number,
|
||||
}
|
||||
query.update({key: value for key, value in params.items() if value is not None})
|
||||
return f"{BASE_URL}{SEARCH_PATH}?{urlencode(query)}"
|
||||
return f"{TRANSPORT_BASE_URL}{TRANSPORT_SEARCH_PATH}?{urlencode(query)}"
|
||||
|
||||
@staticmethod
|
||||
def build_search_url_from_existing(
|
||||
@@ -125,13 +127,26 @@ class MobileDeClient:
|
||||
if page_number is not None:
|
||||
query_items.append(("pageNumber", str(page_number)))
|
||||
query_items.extend((key, str(value)) for key, value in params.items() if value is not None)
|
||||
query_items.append(("lang", "en"))
|
||||
return urlunsplit(("https", urlsplit(BASE_URL).netloc, SEARCH_PATH, urlencode(query_items), ""))
|
||||
query_items.append(("lang", "ru"))
|
||||
return urlunsplit(
|
||||
(
|
||||
"https",
|
||||
urlsplit(TRANSPORT_BASE_URL).netloc,
|
||||
TRANSPORT_SEARCH_PATH,
|
||||
urlencode(query_items),
|
||||
"",
|
||||
)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def build_transport_detail_url(listing_id: str | int) -> str:
|
||||
query = urlencode({"id": listing_id, "vc": "Car", "s": "Car", "lang": "ru"})
|
||||
return f"{TRANSPORT_BASE_URL}{TRANSPORT_DETAIL_PATH}?{query}"
|
||||
|
||||
@staticmethod
|
||||
def build_detail_url(listing_id: str | int) -> str:
|
||||
query = urlencode({"id": listing_id, "vc": "Car", "s": "Car", "lang": "en"})
|
||||
return f"{BASE_URL}{DETAIL_PATH}?{query}"
|
||||
return f"{PUBLIC_BASE_URL}{PUBLIC_DETAIL_PATH}?{query}"
|
||||
|
||||
def fetch_html(self, url: str, *, timeout: int = 30) -> str:
|
||||
last_error: Exception | None = None
|
||||
@@ -375,7 +390,10 @@ class MobileDeClient:
|
||||
return ordered_pages
|
||||
|
||||
def fetch_detail(self, listing_id: str | int) -> dict:
|
||||
html = self.fetch_html(self.build_detail_url(listing_id), timeout=MOBILEDE_DETAIL_TIMEOUT_SECONDS)
|
||||
html = self.fetch_html(
|
||||
self.build_transport_detail_url(listing_id),
|
||||
timeout=MOBILEDE_DETAIL_TIMEOUT_SECONDS,
|
||||
)
|
||||
return extract_detail_listing(html)
|
||||
|
||||
@staticmethod
|
||||
|
||||
Reference in New Issue
Block a user