57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
from .http import session
|
||
import mwclient
|
||
|
||
|
||
def instanciate(site):
|
||
"""
|
||
Instancie un objet permettant d’accéder à l’API d’un site MediaWiki.
|
||
|
||
:param site: Nom de domaine du site.
|
||
:return: Instance mwclient.Site pour le site.
|
||
"""
|
||
return mwclient.Site(site, pool=session)
|
||
|
||
|
||
def article_canonical(site, article):
|
||
"""
|
||
Obtient le nom canonique d’un article après avoir suivi les redirections.
|
||
|
||
:param site: Instance mwclient.Site pour le site ciblé.
|
||
:param article: Article ciblé dans le site.
|
||
:return: Nom canonique de l’article.
|
||
"""
|
||
original_page = site.pages[article]
|
||
|
||
if not original_page.exists:
|
||
raise Exception(
|
||
'Article « {} » inexistant sur {}'
|
||
.format(article, site.host)
|
||
)
|
||
|
||
return original_page.resolve_redirect().name
|
||
|
||
|
||
def article_redirects(site, article):
|
||
"""
|
||
Récupère l’ensemble des pages redirigeant vers un article.
|
||
|
||
:param site: Instance mwclient.Site pour le site ciblé.
|
||
:param article: Article ciblé dans le site.
|
||
:return: Liste des pages redirigeant vers `article`.
|
||
"""
|
||
response = site.api('query', prop='redirects', titles=article)
|
||
page_response = list(response['query']['pages'].values())[0]
|
||
|
||
if 'missing' in page_response:
|
||
raise Exception(
|
||
'Article « {} » inexistant sur {}'
|
||
.format(article, site.host)
|
||
)
|
||
|
||
# Si la réponse n’inclut pas la clé « redirects », c’est qu’il n’existe
|
||
# aucune redirection vers la page
|
||
return [
|
||
item['title'] for item in
|
||
page_response['redirects']
|
||
] if 'redirects' in page_response else []
|