Diskuze: Nefunkční regex match s odkazy které by neměly být match v mem youtube-dl a gallery-dl automatizačnim scriptem


Ahoj mam svůj automatizační script na dávkové stahovaní používám gallery-dl a youtube-dl na stahovaní odkazů z seznamu později chcu přidal podporu pro you-get a potřeboval bych odkazy které jsou podporovány youtube-dl dát pouze youtube-dl . A tak jsem se podival do zdrojáku youtube-dl protože na strankach mají pouze jména webu ne odkazy a tak jsem našel extrakčni sctipt na regex pattern a upravil jsem ho abych měl funkci find_yt_dl_sites(lines: list) popsanou níže.Problém je že nevrací nic a pomocí debugeru jsem zjistil že ze zahradního důvodu mam match se https://www.pixiv.net/ https://www.deviantart.com/ odkazy které yt-dl nepodporuje.
Zkusil jsem:
def find_yt_dl_sites(lines: list):
"""
Return list of sites supported by youtube-dl
"""
#lines = "".join(lines)
s = []
# Supported sites
[s.append(re.findall(r"""https?://(?:www\.)?1tv\.ru/(?:[^/]+/)+(?P<id>[^/?#]+)""",li)) for li in lines]
[s.append(re.findall(r"""(?x)
https?://
(?:www\.)?20min\.ch/
(?:
videotv/*\?.*?\bvid=|
videoplayer/videoplayer\.html\?.*?\bvideoId@
)
(?P<id>\d+)
""",li)) for li in lines]
[s.append(re.findall(r"""(?x)(?:https?://)?(?:www\.)?220\.ro/(?P<category>[^/]+)/(?P<shorttitle>[^/]+)/(?P<id>[^/]+)""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?P<domain>[^.]+\.(?:twentythree\.net|23video\.com|filmweb\.no))/v\.ihtml/player\.html\?(?P<query>.*?\bphoto(?:_|%5f)id=(?P<id>\d+).*)""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?:www\.)?247sports\.com/Video/(?:[^/?#&]+-)?(?P<id>\d+)""",li)) for li in lines]
[s.append(re.findall(r"""(?x)
https?://
(?P<host>
(?:(?:www|porno?)\.)?24video\.
(?:net|me|xxx|sexy?|tube|adult|site|vip)
)/
(?:
video/(?:(?:view|xml)/)?|
player/new24_play\.swf\?id=
)
(?P<id>\d+)
""",li)) for li in lines]
[s.append(re.findall(r"""https?://playout\.3qsdn\.com/(?P<id>[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12})""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?:www\.)?3sat\.de/(?:[^/]+/)*(?P<id>[^/?#&]+)\.html""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?:(?P<kind>www|m)\.)?4tube\.com/(?:videos|embed)/(?P<id>\d+)(?:/(?P<display_id>[^/?#&]+))?""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?:(?:www|player)\.)?56\.com/(?:.+?/)?(?:v_|(?:play_album.+-))(?P<textid>.+?)\.(?:html|swf)""",li)) for li in lines]
[s.append(re.findall(r"""(?:5min:|https?://(?:[^/]*?5min\.com/|delivery\.vidible\.tv/aol)(?:(?:Scripts/PlayerSeed\.js|playerseed/?)?\?.*?playList=)?)(?P<id>\d+)""",li)) for li in lines]
[s.append(re.findall(r"""(?:6play:|https?://(?:www\.)?(?P<domain>6play\.fr|rtlplay\.be|play\.rtl\.hr|rtlmost\.hu)/.+?-c_)(?P<id>[0-9]+)""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?:www\.)?7plus\.com\.au/(?P<path>[^?]+\?.*?\bepisode-id=(?P<id>[^&#]+))""",li)) for li in lines]
[s.append(re.findall(r"""https?://8tracks\.com/(?P<user>[^/]+)/(?P<id>[^/#]+)(?:#.*)?$""",li)) for li in lines]
[s.append(re.findall(r"""(?:https?://)(?:www\.|)91porn\.com/.+?\?viewkey=(?P<id>[\w\d]+)""",li)) for li in lines]
[s.append(re.findall(r"""9c9media:(?P<destination_code>[^:]+):(?P<id>\d+)""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?:www\.)?9gag\.com/gag/(?P<id>[^/?&#]+)""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?:www\.)?9now\.com\.au/(?:[^/]+/){2}(?P<id>[^/?#]+)""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?:www\.)?abc\.net\.au/news/(?:[^/]+/){1,2}(?P<id>\d+)""",li)) for li in lines]
[s.append(re.findall(r"""https?://iview\.abc\.net\.au/(?:[^/]+/)*video/(?P<id>[^/?#]+)""",li)) for li in lines]
[s.append(re.findall(r"""https?://abcnews\.go\.com/(?:[^/]+/)+(?P<display_id>[0-9a-z-]+)/story\?id=(?P<id>\d+)""",li)) for li in lines]
[s.append(re.findall(r"""(?x)
https?://
(?:
abcnews\.go\.com/
(?:
(?:[^/]+/)*video/(?P<display_id>[0-9a-z-]+)-|
video/(?:embed|itemfeed)\?.*?\bid=
)|
fivethirtyeight\.abcnews\.go\.com/video/embed/\d+/
)
(?P<id>\d+)
""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?P<site>abc(?:7(?:news|ny|chicago)?|11|13|30)|6abc)\.com(?:(?:/[^/]+)*/(?P<display_id>[^/]+))?/(?P<id>\d+)""",li)) for li in lines]
[s.append(re.findall(r"""https?://clips\.abcotvs\.com/(?:[^/]+/)*video/(?P<id>\d+)""",li)) for li in lines]
[s.append(re.findall(r"""^https?://(?:www\.)?academicearth\.org/playlists/(?P<id>[^?#/]+)""",li)) for li in lines]
[s.append(re.findall(r"""(?x)
https?://
(?:
(?:(?:embed|www)\.)?acast\.com/|
play\.acast\.com/s/
)
(?P<channel>[^/]+)/(?P<id>[^/#?]+)
""",li)) for li in lines]
[s.append(re.findall(r"""(?x)
https?://
(?:
(?:www\.)?acast\.com/|
play\.acast\.com/s/
)
(?P<id>[^/#?]+)
""",li)) for li in lines]
[s.append(re.findall(r"""https?://(?:www\.)?animedigitalnetwork\.fr/video/[^/]+/(?P<id>\d+)""",li)) for li in lines]
[s.append(re.findall(r"""https?://\w+\.adobeconnect\.com/(?P<id>[\w-]+)""",li)) for li in lines]
[s.append(re.findall(r"""https?://tv\.adobe\.com/(?:(?P<language>fr|de|es|jp)/)?watch/(?P<show_urlname>[^/]+)/(?P<id>[^/]+)""",li)) for li in lines]
# atakdale
print(s)
cleaner_list = [it for it in s if it != []] # remove empty list
clean_list = []
for list_item in cleaner_list:
for st in list_item:
if isinstance(st,str):
if st != [] and st != '' and "http" in st:
clean_list.append(st)
else:
for v in st:
if v != [] and v != '' and "http" in v:
clean_list.append(v)
# TODO: bug remove youtube link without video id
return clean_list
Co potřebuji:
chtěl bych aby funkce vrátila odkazy pouze pro yt-dl abych mohl dat
stahovacím funkcím stahovat paralelně s yt-dl a galery-dl odkazy aby mi
nedávaly chyby že ten daný odkaz nepodporují. jinak celý kod je na celý kod funkce
To je spam?
Jestli nee. Nebylo by 10x rychlejsi vyfiltrovat domain-name a pak jej porovnat
se stringy nez pres regularni vyrazy?
google = python regular domain-name from url
domainlist=[‘m.google.com’,
‘m.docs.google.com’,
‘www.someisotericdomain.innersite.mall.co.uk',
‘www.ouruniversity.department.mit.ac.us',
‘www.somestrangeurl.shops.relevantdomain.net',
‘www.example.info']
for l in domainlist:
res=re.findall(r’(?<=\.)([^.]+)(?:\.(?:co\.uk|ac\.us|[^.]+(?:$|\n)))’,l)
print(l, “|”, res[0])
m.google.com | google
m.docs.google.com | google
www.someisotericdomain.innersite.mall.co.uk | mall
www.ouruniversity.department.mit.ac.us | mit
www.somestrangeurl.shops.relevantdomain.net | relevantdomain
www.example.info | example
https://github.com/…rom-a-URL.py
import re
def domain_name(url):
return re.search('(https?://)?(www\d?\.)?(?P<name>[\w-]+)\.', url).group('name')
V podstate, v tom kodu mas nekolik takovych filtru...
[s.append(re.findall(r"""(?x)https?://(?:www\.)?(?:
discovery|
investigationdiscovery|
discoverylife|
animalplanet|
ahctv|
destinationamerica|
sciencechannel|
tlc|
velocitychannel
)go\.com/(?P<id>[^/?#&]+)""",li)) for li in lines]
heavyblack1:8.11.2021 22:25
ne není to spam došel mi čas na editaci potom to to editační tlačitko
zmizelo tak jsem to musel postnout znovu
jinak jsi mě špatně pochopil ja vim že google = python regular domain-name
from url ale já jsem upravil make_supportedsites.py abych dostal regex patern protože
tenhle seznam nemůžu použit abych dostal odkazy které jsou podporovány
yt-dl aby je nestahoval gallery-dl jinak jména webu máji zde supportedsites.md ale ja potřebuji url např na gallery-dl
mají seznam url tak jsem je zkopíroval z webu gallery-dl
Já hledám nejednodušší způsob jak vyfiltrovat linky na yt-dl s seznamu
odkazů.
Nepises tecky, carky ani nove radky, takze se ten text odpovedi neda cist. S youtube nepracuji, takze "odkazy které jsou podporovány yt-dl aby je nestahoval gallery-dl" To je naprosty blabol, ktery nedava smysl. Kdo co, aby nestahoval? Url se preci filtruji pres htaccess ne v py. Nevim, jaky je rozdil mezi slovy yt-dl gallery-dl nebo cimkoliv napsanym japonsky nebo arabsky.
Ja bych sel po jmene domeny
//[s.append(re.findall(r"""(?x)https?://(?:www\.)?(?:
[s.append(re.findall(r"""(?x)https|http?://(?:www\.)?(?:
discovery|
investigationdiscovery|
discoverylife|
animalplanet|
ahctv|
destinationamerica|
sciencechannel|
tlc|
velocitychannel
)go\.com/(?P<id>[^/?#&]+)""",li)) for li in lines] // a tady to nejak prepsat, vypsat tam vsechny koncovky ze vsech stranek
A nebo bych sel cestou, kterou pouziva HW filtr treba pro maily, seznam vsech
stranek, seznam stringu.
list = []
list.append("https://youtube.com")
list.append("https://yahoo.com")
Z toho bych si vyrobil nejake indexovani, skatulkovani podle prvnich 10 znaku,
Najdes prvnich 10 znaku a pak prohledava mensi seznam adres nez cely seznam.
Respektive, to roztrid podle delky textu. Ja nevim, jak PY, nedelam s PY, ale
obvykle reg. vyrazy jsou tak 10x pomalejsi a k fitrovani adress se moc
nehodi.
Nebo bych to udelal jeste trochu jinak. Prvnich, treba 10 znaku (podle
nejkratsi adresy), uplne smazal a nechal tam jen zbytek adresy, kde bych to
roztridil podle prvniho znaku.
Jakoze, zacatek adresy tam vzdycky nejaky bude. A takhle bys mel ziskat vic
skupin s mensim poctem adres.
https://youtube.com
https://yahoo.com
tube.com
oo.com
+20 Zkušeností
+2,50 Kč

heavyblack1:12.11.2021 22:53
nakonec jsem se rozhodl z url pomoci urlparse modulu ziskal domenu a tu sem porovnal z domenami z supportedsites.md
Zobrazeno 9 zpráv z 9.