This MIT-licensed library provides a very simple convenience wrapper around the MediaWiki API, including support for authenticated sessions. It requires Python 3 and that your wiki is using MediaWiki 1.15.3 or greater.
- Installation:
pip install mwapi - Documentation:https://pythonhosted.org/mwapi
- Repository:https://github.com/mediawiki-utilities/python-mwapi
- License: MIT
>>> import mwapi
>>>
>>> session = mwapi.Session('https://en.wikipedia.org')
>>>
>>> print(session.get(action='query', meta='userinfo'))
{'query': {'userinfo': {'anon': '', 'name': '75.72.203.28', 'id': 0}},
'batchcomplete': ''}
>>>
>>> print(session.get(action='query', prop='revisions', revids=32423425))
{'query': {'pages': {'1429626': {'ns': 0, 'revisions': [{'user':
'Wknight94', 'parentid': 32276615, 'comment':
'/* References */ Removing less-specific cat', 'revid': 32423425,
'timestamp': '2005-12-23T00:07:17Z'}], 'title': 'Grigol Ordzhonikidze',
'pageid': 1429626}}}, 'batchcomplete': ''}
importmwapifrommwapi.errorsimportAPIErrorsession=mwapi.Session('https://en.wikipedia.org/')
# If passed a `continuation` parameter, returns an iterable over a continued query.# On each iteration, a new request is made for the next portion of the results.continued=session.get(
formatversion=2,
action='query',
generator='categorymembers',
gcmtitle='Category:17th-century classical composers',
gcmlimit=100, # 100 results per requestcontinuation=True)
pages= []
try:
forportionincontinued:
if'query'inportion:
forpageinportion['query']['pages']:
pages.append(page['title'])
else:
print("MediaWiki returned empty result batch.")
exceptAPIErroraserror:
raiseValueError(
"MediaWiki returned an error:", str(error)
)
print("Fetched {} pages".format(len(pages)))importasyncioimportaiohttpimportmwapiasyncdefquery():
asyncwithaiohttp.ClientSession() ass:
session=mwapi.AsyncSession(
'https://en.wikipedia.org',
user_agent='mwapi async demo',
session=s)
response=awaitasyncio.create_task(
session.get(action='query', prop='revisions', revids=32423425)
)
print(response)
asyncio.run(query())importasyncioimportaiohttpimportmwapifrommwapi.errorsimportAPIErrorasyncdefquery():
asyncwithaiohttp.ClientSession() ass:
session=mwapi.AsyncSession(
'https://en.wikipedia.org',
user_agent='mwapi async demo',
session=s)
continued=awaitasyncio.create_task(
session.get(
formatversion=2,
action='query',
generator='categorymembers',
gcmtitle='Category:17th-century classical composers',
gcmlimit=100, # 100 results per requestcontinuation=True)
)
pages= []
try:
asyncforportionincontinued:
if'query'inportion:
forpageinportion['query']['pages']:
pages.append(page['title'])
else:
print("MediaWiki returned empty result batch.")
exceptAPIErroraserror:
raiseValueError(
"MediaWiki returned an error:", str(error)
)
print("Fetched {} pages".format(len(pages)))
asyncio.run(query())- YuviPanda -- https://github.com/yuvipanda
- Aaron Halfaker -- https://github.com/halfak