jenkins-bot has submitted this change and it was merged.
Change subject: Implement RandomPageGenerator and RandomRedirectPageGenerator ......................................................................
Implement RandomPageGenerator and RandomRedirectPageGenerator
Also implemented deprecated methods from compat in the Site class.
Bug: https://sourceforge.net/p/pywikipediabot/feature-requests/339/ Change-Id: Ie1ae30578fd3bf415bf38a19f7caf00a822f96c1 --- M pywikibot/pagegenerators.py M pywikibot/site.py 2 files changed, 44 insertions(+), 1 deletion(-)
Approvals: Merlijn van Deen: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py index c6e8c7d..d04b2f9 100644 --- a/pywikibot/pagegenerators.py +++ b/pywikibot/pagegenerators.py @@ -94,6 +94,14 @@ -newpages Work on the most recent new pages. If given as -newpages:x, will work on the x newest pages.
+-random Work on random pages returned by [[Special:Random]] + Can also be given as "-random:n" where n is the number + of pages to be returned, otherwise the default is 10 pages. + +-randomredirect Work on random redirect pages returned by [[Special:RandomRedirect]]. + Can also be given as "-randomredirect:n" where n is the number + of pages to be returned, else 10 pages are returned. + -recentchanges Work on the pages with the most recent changes. If given as -recentchanges:x, will work on the x most recently changed pages. @@ -285,6 +293,16 @@ page = pywikibot.Page(pywikibot.Link(title, pywikibot.Site())) gen = InterwikiPageGenerator(page) + elif arg.startswith('-random'): + if len(arg) == 7: + gen = RandomPageGenerator() + else: + gen = RandomPageGenerator(number=int(arg[8:])) + elif arg.startswith('-randomredirect'): + if len(arg) == 15: + gen = RandomRedirectPageGenerator() + else: + gen = RandomRedirectPageGenerator(number=int(arg[16:])) elif arg.startswith('-recentchanges'): if len(arg) >= 15: gen = RecentChangesPageGenerator(total=int(arg[15:])) @@ -912,6 +930,19 @@ yield page
+def RandomPageGenerator(number=10, site=None): + if site is None: + site = pywikibot.Site() + for page in site.randompages(total=number): + yield page + +def RandomRedirectPageGenerator(number=10, site=None): + if site is None: + site = pywikibot.Site() + for page in site.randompages(total=number, redirects=True): + yield page + + def LinksearchPageGenerator(link, namespaces=None, step=None, total=None, site=None): """Yields all pages that include a specified link, according to diff --git a/pywikibot/site.py b/pywikibot/site.py index 8f8c217..822573b 100644 --- a/pywikibot/site.py +++ b/pywikibot/site.py @@ -2527,7 +2527,19 @@ ) return usgen
- def randompages(self, step=None, total=1, namespaces=None, + @deprecated("Site.randompages()") + def randompage(self, redirect=False): + """ + @param redirect: Return a random redirect page + @return: pywikibot.Page + """ + return self.randompages(total=1, redirects=redirect) + + @deprecated("Site.randompages()") + def randomredirectpage(self): + return self.randompages(total=1, redirects=True) + + def randompages(self, step=None, total=10, namespaces=None, redirects=False, content=False): """Iterate a number of random pages.
pywikibot-commits@lists.wikimedia.org