#!/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_tasks( *, url: str, request_params: Dict[str, Union[str, int, bool]] ) -> Iterator[str]: with requests.Session() as session: tasks = partial( tasks_titles, session=session, url=url, **request_params) all_tasks = tasks(cmtitle='Category:Programming_Tasks') for task in all_tasks: print(task) def tasks_titles( *, session: requests.Session, url: str, **params: Union[str, int, bool]) -> Iterator[str]: """Yields tasks 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__': tasks = all_tasks( url=URL, request_params=REQUEST_PARAMETERS)