{"id":2565,"date":"2012-09-20T14:56:00","date_gmt":"2012-09-20T14:56:00","guid":{"rendered":"https:\/\/bitsebots.blogs.sapo.pt\/2565.html"},"modified":"2012-09-20T14:56:00","modified_gmt":"2012-09-20T14:56:00","slug":"tutorial-de-pywikipediabot-iii","status":"publish","type":"post","link":"https:\/\/blog.alchimista.pt\/?p=2565","title":{"rendered":"Tutorial de pywikipediabot &#8211; III"},"content":{"rendered":"<p>Neste t\u00f3pico abordaremos outras funcionalidades interessantes do pywikipediabot, nomeadamente a obten\u00e7\u00e3o no namespace de uma p\u00e1gina, quer no formato num\u00e9rico, quer no nome do namespace. Veremos igualmente como obter o t\u00edtulo da p\u00e1gina principal, ou seja, por exemplo no caso wikipedia:Ajuda\/edi\u00e7\u00e3o, obter wikipedia:Ajuda, ou ent\u00e3o somente Ajuda. H\u00e1 outras formas de filtrar os artigos, por exemplo, se apenas pretendesse-mos os artigos do dom\u00ednio wikip\u00e9da da categoria !Rob\u00f3tica, o m\u00f3dulo pagegenerators tem op\u00e7\u00f5es para isso, mas para j\u00e1, iremos aumentando a complexidade aos poucos.<\/p>\n<p>\u00a0<\/p>\n<p>Informa\u00e7\u00e3o sobre os namespaces pode ser encontrada em <a href=\"http:\/\/www.mediawiki.org\/wiki\/Manual:Namespace\">Mediawiki.org:Manual:Namespaces<\/a>, ou <a href=\"http:\/\/www.mediawiki.org\/wiki\/Namespaces\">Mediawiki.org:Namespaces<\/a>. Nos projectos locais \u00e9 frequente usarem para al\u00e9m dos namespaces padr\u00e3o, formas personalisadas, e, na wikip\u00e9dia Lus\u00f3fona por exemplo, a documenta\u00e7\u00e3o pode ser encontrada em <a href=\"http:\/\/pt.wikipedia.org\/wiki\/Wikip%C3%A9dia:Dom%C3%ADnio\">Wikip\u00e9dia:Dom\u00ednio<\/a>.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<pre class=\"brush: python;\">#!\/usr\/bin\/env python\n# -*- coding: utf-8 -*-\n#\n#\t   \n#\t   (C) 2012 Alchimista &lt;alchimistawp@gmail.com&gt;\n#\t\t \n#\t\tDistributed under the terms of the GNU GPL license.\n\nimport sys, os\n\nimport wikipedia\nimport catlib\nimport pagegenerators\n\ndef main():\n\tsite = wikipedia.Site(\"pt\", \"wikipedia\")\n\tcat = catlib.Category(site, u\"!Rob\u00f3tica\")\n\t''' Como explicado anteriormente, temos definido o site e a categoria\n\t\tpodendo ent\u00e3o passar-mos a obter a listagem das p\u00e1ginas,\n\t\tonde desta vez usaremos o pagegenerators. Uma op\u00e7\u00e3o mais r\u00e1pida ser\u00e1\n\t\tusar igualmente o preloadingGen, bastando para isso\n\t\tfazer algo como \n\t\tpages = pagegenerators.PreloadingGenerator(pagegenerators.CategorizedPageGenerator(cat))\n\t\tIsto faz com que as p\u00e1ginas sejam carregadas no in\u00edcio, ao contr\u00e1rio\n\t\tdo script actual, que carrega \u00e0 medida que forem necess\u00e1rias. \n\t'''\n\tpages = pagegenerators.CategorizedPageGenerator(cat)\n\tfor page in pages:\n\t\t'''Agora que temos a itera\u00e7\u00e3o vamos primeiro obter o t\u00edtulo\n\t\t'''\n\t\tprint page.title()\n\t\t\n\t\t''' Com o page.namespace() obtemos o namespace da p\u00e1gina\n\t\t\tembora no formato canonico, ou seja, n\u00famero. Para obter\n\t\t\to nome do namespace, fazemos o site.namespace().\n\t\t\tPara fazer tudo junto, basta substituir as duas linhas por\n\t\t\tnamespace = site.namespace(page.namespace())\n\t\t'''\n\t\t\n\t\tpageNamespaceNumber = page.namespace()\n\t\tnamespace = site.namespace(pageNamespaceNumber)\n\t\tif namespace == u\"Ajuda\":\n\t\t\t''' Aqui filtramos as p\u00e1ginas que pertencem ao namespace Ajuda\n\t\t\t\te obteremos o nome do namespace, assim como as predefini\u00e7\u00f5es\n\t\t\t\tcontidas nas p\u00e1ginas. '''\n\t\t\tprint len(page.get())\n\t\t\tprint u\"namespace: \", site.namespace(page.namespace())\n\t\t\tprint u\"templates: \", page.templates()\n\t\telif namespace == u\"Wikip\u00e9dia\":\n\t\t\t''' Neste bloco, apenas os artigos do namespace wikip\u00e9dia s\u00e3o filtrados,\n\t\t\t\te obteremos o namespage e o t\u00edtulo do artigo, sem namespace ou subp\u00e1ginas\n\t\t\t\t(resumidamente, o t\u00edtulo do artigo principal)\n\t\t\t'''\n\t\t\tprint u\"namespace: \", site.namespace(page.namespace())\n\t\t\tprint u\"P\u00e1gina principal (t\u00edtulo sem subp\u00e1gina): \", page.sectionFreeTitle()\n\t\t\tprint u\"P\u00e1gina principal sem t\u00edtulo nem namespace: \", page.title(withNamespace=False)\n\t\t\t\n\t\t\t\nif __name__ == \"__main__\":\n\ttry:\n\t\tmain()\n\tfinally:\n\t\twikipedia.stopme()\t\n\n<\/pre>\n<p><a title=\"https:\/\/github.com\/alchimista\/pywikipedia-tutorial\" href=\"https:\/\/github.com\/alchimista\/pywikipedia-tutorial\">https:\/\/github.com\/alchimista\/pywikipedia-tutorial\u00a0<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste t\u00f3pico abordaremos outras funcionalidades interessantes do pywikipediabot, nomeadamente a obten\u00e7\u00e3o no namespace de uma p\u00e1gina, quer no formato num\u00e9rico, quer no nome do namespace. Veremos igualmente como obter o t\u00edtulo da p\u00e1gina principal, ou seja, por exemplo no caso wikipedia:Ajuda\/edi\u00e7\u00e3o, obter wikipedia:Ajuda, ou ent\u00e3o somente Ajuda. H\u00e1 outras formas de filtrar os artigos, por [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_siteseo_robots_primary_cat":"","pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-2565","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/posts\/2565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2565"}],"version-history":[{"count":0,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=\/wp\/v2\/posts\/2565\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.alchimista.pt\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}