J'ai essayé d'expliquer comment obtenir le contenu de l'article avec l'API MediaWiki d'une manière facile à comprendre avec des exemples (Python 3)

Contexte

Je crée un site Wiki en utilisant MediaWiki, et j'ai cherché une API pour obtenir des informations mises à jour, etc. avec Python, mais il existe plusieurs articles Qiita et ** MediaWiki version japonaise avec traduction subtile **, anglais Comme il n'y avait que des informations sur MediaWiki, j'ai décidé d'écrire un article pour ceux qui envisagent d'utiliser l'API à l'avenir. Cette API est essentiellement ** utilisable pour les sites MediaWiki autres que Wikipedia **, elle est donc assez polyvalente. Veuillez noter que l'explication détaillée peut être erronée et qu'elle est un peu difficile à lire car c'est le premier message de Qiita ...

Paramètres à utiliser

Ce sont les principaux paramètres utilisés pour acquérir le contenu de cet article. En ce qui concerne les paramètres, Cet article Qiita: obtenir des informations sur Wikipédia à l'aide de l'API MediaWiki présente en détail, il y a donc d'autres choses en plus d'obtenir le contenu de l'article. Si c'est le cas, je pense que vous devriez vous y référer. Remarque: vous pouvez cliquer dessus à partir du lien, mais j'utilise des `` requêtes '' pour une meilleure lisibilité.

Paramètres La description valeur exemple
format Format de sortie json,xml... "format":"json"→ Sortie avec json
action opération query,edit... "action":"query"→取得opérationをする
prop Obtenir les composants de l'article revisions,links,images... "prop":"revisions"→ Obtenir la révision
title Le titre de l'article Le titre de l'article "titles":"Chat"→「Chat」という記事を取得する
rvprop Éléments à obtenir content... "rvprop":"content"→ Obtenez le texte de l'article
list Obtenir la liste d'articles categorymembers,search... "list":"categorymembers"→ Obtenez des membres de la catégorie
cmtitle Titre de la catégorie Nom de catégorie "cmtitle":"Nuko"→「Nuko」カテゴリを取得する
cmlimit Nombre maximum d'acquisitions 1~500 "cmlimit":"100"→ Obtenez jusqu'à 100

Exemple de mise en œuvre 1

Que veux-tu faire

Obtenez le nom de l'article avec "Catégorie: Règlements scolaires de la préfecture de Chiba" sur le site kousokuwiki.org créé par MediaWiki.

code

 coding: UTF-8
from urllib.request import Request, urlopen
from urllib.parse import urlencode
from urllib.error import URLError, HTTPError
import json
import requests
S = requests.Session()
# Déclarez l'URL. Dans le cas de wikipedia, ce sera "https://jp.wikipedia.org/w/api.php".
URL = "https://kousokuwiki.org/w/api.php"

# Paramètres des paramètres.
PARAMS = {
    "action": "query",
 "cmtitle": "Catégorie: Règlement scolaire dans la préfecture de Chiba",
    "cmlimit": "500",
    "list": "categorymembers",
    "format": "json"
}

# Obtenez des informations avec la fonction get
R = S.get(url=URL, params=PARAMS)
DATA = R.json()

# Extraire les données requises de json
PAGES = DATA['query']['categorymembers']

# Extraire uniquement les informations de titre et les stocker dans la liste
Return_List=[]
for page in PAGES:
    Return_List.append(page['title'])
print(Return_List)

production

 [Règlement du lycée de la préfecture de Chiba Chiba Higashi, règlement du lycée de la préfecture de Chiba Inba Akira Makoto, règlement du lycée de la préfecture de Chiba de Kokubun, règlement du lycée international de la préfecture de Chiba de Narita, règlement du lycée international de la préfecture de Chiba Matsudo, lycée de la préfecture de Chiba Kashiwanoha Règlement de l'école ... (Omis)]

Exemple de mise en œuvre 2

Que veux-tu faire

Récupérez le contenu de l'article "Règlement scolaire du lycée préfectoral de Chiba Kashiwanoha" sur le site kousokuwiki.org créé par MediaWiki.

code

 coding: UTF-8
from urllib.request import Request, urlopen
from urllib.parse import urlencode
from urllib.error import URLError, HTTPError
import json
import requests
S = requests.Session()
# Déclarez l'URL. Dans le cas de wikipedia, ce sera "https://jp.wikipedia.org/w/api.php".
URL = "https://kousokuwiki.org/w/api.php"

# Paramètres des paramètres.
PARAMS = {
    "action": "query",
    "prop": "revisions",
 "title": "Règlement scolaire du lycée préfectoral de Chiba Kashiwanoha",
    "rvprop": "content",
    "format": "json"
}

# Obtenez des informations avec la fonction get
R = S.get(url=URL, params=PARAMS)
DATA = R.json()

# Extraire les données requises de json
CONTENT = DATA['query']['pages']
    
print(CONTENT)

production

 {'61': {'pageid': 61, 'ns': 0, 'title': 'Règlement de l'école du lycée préfectoral de Chiba Kashiwanoha', 'revisions': [{'contentformat': 'text/x-wiki', 'contentmodel': 'wikitext', '*': 'Lycée préfectoral de Chiba Kashiwanoha(Abréviation:Lycée Kashiwanoha)Est[[Préfecture de Chiba]]Existe en[[École publique|Publique]]de[[école secondaire]]<br>\n[[Classification de notation]] 、[[Avertissement]]を確認de上ご利用ください。\n\n=Règles de base=\n\n{| class="wikitable"\n!article\n!Règles de l'école\n!Situation actuelle\n!Remarques\n|-\n|Utiliser un smartphone\n|Possible\n|Possible\n|PC est également possible\n|-\n|Utiliser SNS\n|Possible\n|Possible\n| 心得de規定Estあり\n|-\n|travail à temps partiel\n|Limité\n|Possible\n| 要許可願Situation actuelleとして成績が悪くなければ可能。シフトEst基本午後8時まで、午後10時までに帰宅することが条件(A été écrit sur le papier).. Mais peu importe si vous ne l'écrivez pas sur papier(店側が学校に確認de連絡を取らない場合)、時間だって虚偽de申告してもバレなかった。\n|-\n|Permis de conduire\n|Limité\n|Limité\n|Il est possible de demander la permission seulement après avoir décidé du cours\n|-\n|Règles de l'école改正\n|Non spécifié\n|impossible\n|Le personnel a décidé\n|}\n\n=Règlements sur les cheveux et les vêtements=\n{| class="wikitable"\n!article\n!Règles de l'école\n!Situation actuelle\n!Remarques\n|-\n|Uniforme pour hommes\n| colspan="3" |veste\n|-\n|Uniforme femme\n| colspan="3" |veste+スカート、スラックス可スラックス時deみネクタイ可\n|-\n|Chaussures(Hors campus)\n| colspan="3" |noir,茶de革靴又Est運動靴\n|-\n|Chaussures(École)\n| colspan="3" |指定de学年色de上履き\n|-\n|Chaussettes homme\n| colspan="3" |紺又Est白deソックス\n|-\n|Chaussettes femme\n|colspan="3" |noir又Est紺deハイソックス\n|-\n|retour\n| colspan="3" |華美でない機能的な高校生らしいもde\n|-\n|cheveux\n| colspan="3" |Décoloration Perma teinture cheveux bouclés etc. interdite\n|-\n|Manteaux\n|Possible\n|Possible\n|華美でないもde 校舎内でEst脱ぐ\n|-\n|Silencieux\n|Possible\n|Possible\n| 華美でないもde 校舎内でEst脱ぐ\n|-\n|Chandails\n|Possible\n|Possible\n| 学校指定deもde\n|-\n|maquillage\n|impossible\n|Échapper\n|maquillage マニキュア ピアス カラコン 装飾品Est一切禁止\n|}\n\n=そde他規定=\n\n=Extrait d'article=\n[[Category:Préfecture de Chibade校則]]'}]}}

Découpez uniquement les informations souhaitées si nécessaire.

À la fin

J'ai expliqué l'API MediaWiki, qui manque d'informations japonaises, avec des exemples. Nous pouvons ajouter plus d'explications de paramètres et d'exemples d'implémentation à l'avenir! Nous espérons que vous trouvez cela utile.

Recommended Posts

J'ai essayé d'expliquer comment obtenir le contenu de l'article avec l'API MediaWiki d'une manière facile à comprendre avec des exemples (Python 3)
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
Je vais vous expliquer comment utiliser Pandas d'une manière facile à comprendre.
[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
[Python] J'ai essayé d'expliquer des mots difficiles à comprendre pour les débutants d'une manière facile à comprendre.
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai essayé de créer un article dans Wiki.js avec SQL Alchemy
[Pour les débutants] Je souhaite expliquer le nombre d’apprentissage d’une manière facile à comprendre.
J'ai essayé de savoir comment rationaliser le flux de travail avec Excel × Python, mon résumé d'article ★
Comment obtenir la différence de date et d'heure en secondes avec Python
J'ai essayé de résumer Cpaw Level1 & Level2 Write Up d'une manière facile à comprendre
J'ai essayé d'obtenir des données CloudWatch avec Python
Comment obtenir les fichiers dans le dossier [Python]
J'ai essayé de refactoriser le code du modèle publié dans "Obtenir des images de l'API Flickr avec Python" (Partie 2)
Pour envoyer automatiquement des e-mails avec des pièces jointes à l'aide de l'API Gmail en Python
Comment obtenir une liste de fichiers dans le même répertoire avec python
Comment obtenir le nombre de chiffres en Python
Expliquez en détail comment créer un son avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé de résumer comment utiliser les pandas de python
J'ai essayé de frapper l'API avec le client python d'echonest
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ②
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ④
J'ai essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ①
J'ai étudié comment rationaliser le flux de travail avec Excel x Python ③
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
Comment obtenir la dernière (dernière) valeur d'une liste en Python
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
Comment entrer dans l'environnement de développement Python avec Vagrant
J'ai essayé d'obtenir diverses informations de l'API codeforces
[Introduction à Python] Comment obtenir des données avec la fonction listdir
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
Comment obtenir la version Python
Un moyen simple d'accéder à l'API produit Amazon en Python
J'ai essayé de décrire le trafic en temps réel avec WebSocket
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
Comment connaître la structure interne d'un objet en Python
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
Accédez à l'API New Relic en Python pour obtenir l'état du serveur
J'ai essayé de démarrer avec Bitcoin Systre le week-end
[Python] Explique comment utiliser la fonction format avec un exemple
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
[Python] J'ai essayé d'obtenir diverses informations en utilisant l'API de données YouTube!
Comment envoyer une requête à l'API DMM (FANZA) avec python
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV