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 []
|