2017-05-24 12:51:18 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
2023-09-11 16:30:55 +02:00
|
|
|
# Copyright 2017-2023 Mike Fährmann
|
2017-05-24 12:51:18 +02:00
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License version 2 as
|
|
|
|
# published by the Free Software Foundation.
|
|
|
|
|
|
|
|
"""Direct link handling"""
|
|
|
|
|
|
|
|
from .common import Extractor, Message
|
|
|
|
from .. import text
|
|
|
|
|
|
|
|
|
|
|
|
class DirectlinkExtractor(Extractor):
|
2017-07-27 20:46:15 +02:00
|
|
|
"""Extractor for direct links to images and other media files"""
|
2017-05-24 12:51:18 +02:00
|
|
|
category = "directlink"
|
2019-11-28 23:39:35 +01:00
|
|
|
filename_fmt = "{domain}/{path}/{filename}.{extension}"
|
|
|
|
archive_fmt = filename_fmt
|
2020-10-22 23:12:59 +02:00
|
|
|
pattern = (r"(?i)https?://(?P<domain>[^/?#]+)/(?P<path>[^?#]+\."
|
[directlink] extend recognized file extensions (#5924)
bmp, svg, avif, heic, psd, pdf, m4v, mov, wav, mp3, zip, rar, 7z, swf
2024-08-02 12:21:41 +02:00
|
|
|
r"(?:jpe?g|jpe|png|gif|bmp|svg|web[mp]|avif|heic|psd"
|
|
|
|
r"|mp4|m4v|mov|mkv|og[gmv]|wav|mp3|opus|zip|rar|7z|pdf|swf))"
|
2022-10-02 19:02:05 +02:00
|
|
|
r"(?:\?(?P<query>[^#]*))?(?:#(?P<fragment>.*))?$")
|
2023-09-11 16:30:55 +02:00
|
|
|
example = "https://en.wikipedia.org/static/images/project-logos/enwiki.png"
|
2017-05-24 12:51:18 +02:00
|
|
|
|
|
|
|
def __init__(self, match):
|
2019-02-11 13:31:10 +01:00
|
|
|
Extractor.__init__(self, match)
|
2017-08-02 21:06:49 +02:00
|
|
|
self.data = match.groupdict()
|
2017-05-24 12:51:18 +02:00
|
|
|
|
|
|
|
def items(self):
|
2019-11-28 23:39:35 +01:00
|
|
|
data = self.data
|
|
|
|
for key, value in data.items():
|
2018-02-26 02:12:47 +01:00
|
|
|
if value:
|
2019-11-28 23:39:35 +01:00
|
|
|
data[key] = text.unquote(value)
|
2019-12-25 17:17:07 +01:00
|
|
|
|
2019-11-28 23:39:35 +01:00
|
|
|
data["path"], _, name = data["path"].rpartition("/")
|
|
|
|
data["filename"], _, ext = name.rpartition(".")
|
|
|
|
data["extension"] = ext.lower()
|
2021-06-21 20:28:19 +02:00
|
|
|
data["_http_headers"] = {
|
|
|
|
"Referer": self.url.encode("latin-1", "ignore")}
|
2018-02-26 02:12:47 +01:00
|
|
|
|
2019-11-28 23:39:35 +01:00
|
|
|
yield Message.Directory, data
|
|
|
|
yield Message.Url, self.url, data
|