From 9229c203a603a33b70f0a11e76671c5eb96d5191 Mon Sep 17 00:00:00 2001 From: James Gerity Date: Sat, 18 Feb 2023 23:17:17 -0500 Subject: [PATCH] wikipedia: support query strings in Wikipedia URLs (closes #2412) Co-authored-by: dgw Co-authored-by: Florian Strzelecki --- sopel/modules/wikipedia.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/sopel/modules/wikipedia.py b/sopel/modules/wikipedia.py index fbd2cc886..f55d8c3b2 100644 --- a/sopel/modules/wikipedia.py +++ b/sopel/modules/wikipedia.py @@ -10,12 +10,12 @@ from html.parser import HTMLParser import logging import re +from urllib.parse import quote, unquote, urlparse from requests import get from sopel import plugin from sopel.config import types -from sopel.tools.web import quote, unquote LOGGER = logging.getLogger(__name__) @@ -321,26 +321,27 @@ def mw_image_description(server, image): return desc -# Matches a wikipedia page (excluding spaces and #, but not /File: links), with a separate optional field for the section -@plugin.url(r'https?:\/\/([a-z]+(?:\.m)?\.wikipedia\.org)\/wiki\/((?!File\:)[^ #]+)#?([^ ]*)') +# Matches a Wikipedia link (excluding /File: pages) +@plugin.url(r'https?:\/\/([a-z]+(?:\.m)?\.wikipedia\.org)\/wiki\/((?!File\:)[^ ]+)') @plugin.output_prefix(PLUGIN_OUTPUT_PREFIX) def mw_info(bot, trigger, match=None): """Retrieves and outputs a snippet of the linked page.""" server = match.group(1) - query = unquote(match.group(2)) - section = unquote(match.group(3)) + page_info = urlparse(match.group(2)) + article = unquote(page_info.path) + section = unquote(page_info.fragment) if section: if section.startswith('cite_note-'): # Don't bother trying to retrieve a snippet when cite-note is linked - say_snippet(bot, trigger, server, query, show_url=False) + say_snippet(bot, trigger, server, article, show_url=False) elif section.startswith('/media'): # gh2316: media fragments are usually images; try to get an image description image = section[7:] # strip '/media' prefix in pre-3.9 friendly way say_image_description(bot, trigger, server, image) else: - say_section(bot, trigger, server, query, section) + say_section(bot, trigger, server, article, section) else: - say_snippet(bot, trigger, server, query, show_url=False) + say_snippet(bot, trigger, server, article, show_url=False) @plugin.command('wikipedia', 'wp')