Last modified: 2014-09-18 10:25:07 UTC
>>> import pywikibot as p >>> s=p.Site('commons','commons') >>> pg=p.Page(s, 'New York City') >>> for i in pg.iterlanglinks(): print i.site ... commons:commons <snip> There are a few things that are working together to cause this: iterlanglinks calls Site.pagelanglinks which does: yield pywikibot.Link.langlinkUnsafe(linkdata['lang'], linkdata['*'], source=self) In langlinkUnsafe, there is: link._site = pywikibot.Site(lang, source.family.name) Now, unfortunately for commons: >>> p.Site('en','commons') Site("commons", "commons") Another issue is that https://commons.wikimedia.org/w/api.php?action=query&titles=New%20York%20City&prop=langlinks (the actual API query we make) only returns language codes, not full database names.
Then, what site it should return? [[enwikivoyage:New York City]] or [[New York City]]? In my opinion, there should be an additional parameter which indicates the family we are looking at. The default value would be none, indicating that it should look for its own family. Therefore, in this case, calling langlinks() should get empty list. Calling langlinks(fam='wikipedia') would get the list of pages whose site is Wikipedia. blah blah
Commons is a weird wiki. The langlinks point to Wikipedia. That should be the behavior in the bot too.
Change 138299 had a related patch set uploaded by John Vandenberg: Bug 54745: Link.langlinkUnsafe interwiki_forward https://gerrit.wikimedia.org/r/138299
Change 138299 merged by jenkins-bot: Bug 54745: Link.langlinkUnsafe interwiki_forward https://gerrit.wikimedia.org/r/138299
Should we change this in compat, too?