(url: str, timeout: int = 5)
| 257 | |
| 258 | @alru_cache(maxsize=500) |
| 259 | async def resolve_medium_url(url: str, timeout: int = 5) -> str: |
| 260 | logger.debug(f"Trying resolve {url=}, with {timeout=}") |
| 261 | parsed_url = urlparse(url) |
| 262 | parsed_netloc = un_wwwify(parsed_url.netloc) |
| 263 | |
| 264 | if parsed_url.path.startswith("/p/"): |
| 265 | logger.debug("URL is Medium 'mobile' link") |
| 266 | post_id = parsed_url.path.rsplit("/p/")[1] |
| 267 | |
| 268 | elif parsed_netloc == "l.facebook.com" and parsed_url.path.startswith("/l.php"): |
| 269 | logger.debug("URL seems like is Facebook redirect (tracking) link") |
| 270 | |
| 271 | parsed_query = parse_qs(parsed_url.query) |
| 272 | if parsed_query.get("u") and len(parsed_query["u"]) == 1: |
| 273 | post_url = parsed_query["u"][0] |
| 274 | return await resolve_medium_url(post_url) |
| 275 | |
| 276 | logger.debug("...but we get fucked up...") |
| 277 | return False |
| 278 | |
| 279 | elif ( |
| 280 | parsed_netloc == "webcache.googleusercontent.com" |
| 281 | and parsed_url.path.startswith("/search") |
| 282 | ): |
| 283 | logger.debug("URL seems like is Google Web Archive page link") |
| 284 | |
| 285 | parsed_query = parse_qs(parsed_url.query) |
| 286 | if parsed_query.get("q") and len(parsed_query["q"]) == 1: |
| 287 | post_url = parsed_query["q"][0].removeprefix("cache:") |
| 288 | return await resolve_medium_url(post_url) |
| 289 | |
| 290 | logger.debug("...but we get fucked up...") |
| 291 | return False |
| 292 | |
| 293 | elif parsed_netloc == "google.com" and parsed_url.path.startswith("/url"): |
| 294 | logger.debug("URL seems like is Google redirect (tracking) link") |
| 295 | |
| 296 | parsed_query = parse_qs(parsed_url.query) |
| 297 | if parsed_query.get("url") and len(parsed_query["url"]) == 1: |
| 298 | logger.debug("..and we got 'url' passed param. Make resolve them....") |
| 299 | post_url = parsed_query["url"][0] |
| 300 | return await resolve_medium_url(post_url) |
| 301 | elif parsed_query.get("q") and len(parsed_query["q"]) == 1: |
| 302 | logger.debug("..and we got 'q' passed param. Make resolve them....") |
| 303 | post_url = parsed_query["q"][0] |
| 304 | return await resolve_medium_url(post_url) |
| 305 | |
| 306 | logger.debug("...but we get fucked up...") |
| 307 | return False |
| 308 | |
| 309 | elif parsed_netloc == "12ft.io": |
| 310 | logger.debug("URL seems like is from our partner named 12ft.io") |
| 311 | |
| 312 | parsed_query = parse_qs(parsed_url.query) |
| 313 | if parsed_query.get("q") and len(parsed_query["q"]) == 1: |
| 314 | logger.debug("..and we got 'q' passed param. Make resolve them....") |
| 315 | post_url = parsed_query["q"][0] |
| 316 | return await resolve_medium_url(post_url) |
no test coverage detected