#!/usr/bin/env python3 """ from: https://codereview.stackexchange.com/q/213026 """ from functools import partial from operator import itemgetter from typing import ( Dict, Iterator, Union) import requests URL = 'http://www.rosettacode.org/w/api.php' REQUEST_PARAMETERS = dict( action='query', list='categorymembers', cmlimit=1000, cmsort='timestamp', rawcontinue=True, format='json') def all_langs( *, url: str, request_params: Dict[str, Union[str, int, bool]] ) -> Iterator[str]: with requests.Session() as session: langs = partial( langs_titles, session=session, url=url, **request_params) all_langs = langs(cmtitle='Category:Programming_Languages') for lang in all_langs: print(lang) def langs_titles( *, session: requests.Session, url: str, **params: Union[str, int, bool]) -> Iterator[str]: """Yields langs names for a specified category""" while True: request = session.get(url, params=params) data = request.json() yield from map(itemgetter('title'), data['query']['categorymembers']) query_continue = data.get('query-continue') if query_continue is None: return params.update(query_continue['categorymembers']) if __name__ == '__main__': langs = all_langs( url=URL, request_params=REQUEST_PARAMETERS)