mirror of
https://github.com/mikf/gallery-dl.git
synced 2024-11-26 04:32:51 +01:00
[wikimedia] probe possible API endpoints when none is defined
instead of hardcoding it to '/api.php'
This commit is contained in:
parent
061cc12fdd
commit
4b04ccb3a1
@ -10,7 +10,8 @@
|
|||||||
"""Extractors for Wikimedia sites"""
|
"""Extractors for Wikimedia sites"""
|
||||||
|
|
||||||
from .common import BaseExtractor, Message
|
from .common import BaseExtractor, Message
|
||||||
from .. import text
|
from .. import text, exception
|
||||||
|
from ..cache import cache
|
||||||
|
|
||||||
|
|
||||||
class WikimediaExtractor(BaseExtractor):
|
class WikimediaExtractor(BaseExtractor):
|
||||||
@ -39,7 +40,17 @@ class WikimediaExtractor(BaseExtractor):
|
|||||||
else:
|
else:
|
||||||
self.api_url = api_path
|
self.api_url = api_path
|
||||||
else:
|
else:
|
||||||
self.api_url = self.root + "/api.php"
|
self.api_url = None
|
||||||
|
|
||||||
|
@cache(maxage=36500*86400, keyarg=1)
|
||||||
|
def _search_api_path(self, root):
|
||||||
|
self.log.debug("Probing possible API endpoints")
|
||||||
|
for path in ("/api.php", "/w/api.php", "/wiki/api.php"):
|
||||||
|
url = root + path
|
||||||
|
response = self.request(url, method="HEAD", fatal=None)
|
||||||
|
if response.status_code < 400:
|
||||||
|
return url
|
||||||
|
raise exception.StopExtraction("Unable to find API endpoint")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def prepare(image):
|
def prepare(image):
|
||||||
@ -76,6 +87,9 @@ class WikimediaExtractor(BaseExtractor):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
url = self.api_url
|
url = self.api_url
|
||||||
|
if not url:
|
||||||
|
url = self._search_api_path(self.root)
|
||||||
|
|
||||||
params["action"] = "query"
|
params["action"] = "query"
|
||||||
params["format"] = "json"
|
params["format"] = "json"
|
||||||
params["prop"] = "imageinfo"
|
params["prop"] = "imageinfo"
|
||||||
@ -139,14 +153,17 @@ BASE_PATTERN = WikimediaExtractor.update({
|
|||||||
"fandom": {
|
"fandom": {
|
||||||
"root": None,
|
"root": None,
|
||||||
"pattern": r"[\w-]+\.fandom\.com",
|
"pattern": r"[\w-]+\.fandom\.com",
|
||||||
|
"api-path": "/api.php",
|
||||||
},
|
},
|
||||||
"wikigg": {
|
"wikigg": {
|
||||||
"root": None,
|
"root": None,
|
||||||
"pattern": r"\w+\.wiki\.gg",
|
"pattern": r"\w+\.wiki\.gg",
|
||||||
|
"api-path": "/api.php",
|
||||||
},
|
},
|
||||||
"mariowiki": {
|
"mariowiki": {
|
||||||
"root": "https://www.mariowiki.com",
|
"root": "https://www.mariowiki.com",
|
||||||
"pattern": r"(?:www\.)?mariowiki\.com",
|
"pattern": r"(?:www\.)?mariowiki\.com",
|
||||||
|
"api-path": "/api.php",
|
||||||
},
|
},
|
||||||
"bulbapedia": {
|
"bulbapedia": {
|
||||||
"root": "https://bulbapedia.bulbagarden.net",
|
"root": "https://bulbapedia.bulbagarden.net",
|
||||||
|
Loading…
Reference in New Issue
Block a user