Utilisateur:Wikinews Importer Bot

Une page de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Crystal 128 konsole.svg

Ce compte est celui d'un bot appartenant à Misza13 (d · c · b).
Ce n'est pas un faux-nez, il est employé par des programmes automatiques ou semi-automatiques qui aident son propriétaire à effectuer des modifications répétitives trop longues à faire manuellement.

Cliquez ici pour voir les contributions effectuées par le bot.
Administrateurs : si ce bot est en flagrant délit de mauvais fonctionnement voire de destruction d’articles, prière de le bloquer.
Non administrateurs, vous pouvez rapporter les erreurs en faisant une requête aux administrateurs.

Opération[modifier | modifier le code]

WikiNews-Logo-fr.svg

Ce bot importe certaines pages générées dynamiquement de Wikinews dans:

  • Les portails de Wikipédia qui utilisent une souspage /Wikinews, ou
  • Les articles de Wikipédia qui utilisent une sous-page de {{Wikinewshas}} avec le même nom que l'article.

Les listes sur Wikinews sont fournis dynamiquement, donc les liens sont extraits du résultat HTML.

Ces importations sont accomplis par l'application des mesures décrites ci-dessous.

Le bot regarde pour des mises à jour sur une base horaire et met à jour seulement si il y a eu un changement.

Installation pour un portail[modifier | modifier le code]

1. Créez une sous-page sur Wikinews utilisant la fonction DynamicPageList , p. ex., n:Page:Canada/Wikipedia (s'il y a une catégorie à la place d'un portail, ne créez pas une sous-page de cette catégorie, en revanche, créez une sous-page sur n:Wikinews:Wikinews Importer Bot). Insérez un code similaire au suivant. (Voir n:Wikinews:DynamicPageList pour plus d'informations sur la syntaxe de DynamicPageList)

<DynamicPageList>
category=Article publié
category=<nom de la catégorie>
notcategory=Article en développement
count=5
addfirstcategorydate=true
namespace=main
</DynamicPageList><noinclude>

'''Note.''' Cette page est utilisé par [[:w:User:Wikinews Importer Bot|Wikinews Importer Bot]] pour mettre à jour les [[:w:Portail:<page de destination>|nouvelles du portail <destination> de Wikipédia]]. [[Catégorie:Wikinews Importer Bot|<sujet>]]
</noinclude>

2. Créez une sous-page sur la section des actualités du portail, p. ex., Portail:Canada/Actualités/Wikinews. Insérez le code suivant.

<noinclude>
{{Utilisateur:Wikinews Importer Bot/config|page = Page:<nom de la source>}}
</noinclude>

Rappelez-vous, le bot regarde pour des mises à jour sur une base horaire et met à jour seulement si il y a eu un changement. Vous pouvez attendre pour la première mise à jour ou copiez manuellement les liens à partir de la page source. Insérez manuellement le code similaire au code suivant pour une copie initial des liens de Wikinews.

* [[:n:<premier article>|<premier article>]]
* [[:n:<deuxième article>|<deuxième article>]]
* etc.
<noinclude>
{{Utilisateur:Wikinews Importer Bot/config|page = Page:<nom de la source>}}
</noinclude>

Paramètre optionnel : L'indentation peut être changé en passant par le paramètre indent = (où par défaut c'est indent = *, si non spécifié). Voir l'exemple ci-dessous.

<noinclude>
{{Utilisateur:Wikinews Importer Bot/config|indent = **|page = Page:<nom de la source>}}
</noinclude>

3. Incluez cette page dans la page des actualités, p. ex., Portail:Canada/Actualités. Insérez un code similaire au suivant.

'''[[:n:Page:<source>|Portail <source> sur Wikinews]]'''<div style="float:right;margin-left:0.9em"> 
<imagemap> 
Image:Wikinews-logo.svg|75x45px 
default [[:n:Accueil|Lire et éditer Wikinews]] 
desc none </imagemap> </div>
{{Portail:<page de destination de l'étape 2>}}

Installation pour un article[modifier | modifier le code]

L'installation pour des articles est beaucoup similaire à celle pour les portails. Les étapes basiques, avec les différences importantes et des exemples sont listés ci-dessous.

1. Créez une sous-page sur Wikinews de la même manière qu'il a été fait pour les portails. En fait, si les spécifications de la source sont les mêmes, p. exp., le nombre d'article et l'usage de dates, c'est possible d'utiliser la même source pour un portail et un article, à travers les étapes suivantes d'installation différente. Dans ce cas, la « Note. » dirige à un article au lieu d'un portail. (Inclut toutes les destinations utilisées par la même source.)

<DynamicPageList>
category=Publié
category=<nom de la categorie>
notcategory=En développement
count=5
addfirstcategorydate=true
namespace=main
</DynamicPageList><noinclude>

'''Note.''' Cette page est utilisée par [[w:User:Wikinews Importer Bot|Wikinews Importer Bot]] pour mettre à jour l'article [[:w:<page de destination>|<destination> sur Wikipédia]].
[[Catégorie:Wikinews Importer Bot|<sujet>]]</noinclude>

2. Créez une sous-page sur Modèle:Wikinewshas qui est le même nom que l'article où vous voulez que la liste soit, tel que Modèle:Wikinewshas/Film et d'autres. Incluez un code tel que le suivant:

<noinclude>
{{Utilisateur:Wikinews Importer Bot/config|page = Portal:<nom de la page source>}}
</noinclude>

3. Placez {{Wikinewshas}} sur l'article désiré, généralement dans la section des « liens externes ». Utilisez l'option [[Modèle:Wikinewshas#Seulement l'entête, contenue « automatique »|Seulement l'entête, contenue « automatique »]]. Liez un portail de Wikinews avec un code tel que le suivant, p. ex., sur Film#Liens externes:

{{Wikinewshas|reliés<br>[[:n:Page:Film|nouvelles de films]]}}

Après qu'une sous-page typique est créé, ces nouvelles peuvent être ajoutés aux articles reliés par l'inclusion explicite de la sous-page comme deuxième paramètre. Ajoutez un code tel que le suivant:

{{Wikinewshas|reliés<br>[[:n:Page:Film|nouvelles de films]]|{{Wikinewshas/Film}}}}

Modèles Wikinews sur vos pages d'utilisateur[modifier | modifier le code]

Deux modèle – {{Wikinewshas}} et {{Wikinewstable}} – peuvent être ajoutés sur vos pages d'utilisateur pour des sujets sélectionnés de Wikinews. Par exemple, les paramètres suivants vont affichés les dernières nouvelles du Canada.

{{wikinewshas|les dernières<br>[[:n:Categorie:Canada|nouvelles du Canada]]|{{Portail:Canada/Actualités/Wikinews}}}}

{{Wikinewstable
  |width=
  |topic=Canada
  |newspage=Categorie:Canada
  |pediapage={{Portail:Canada/Actualités/Wikinews}}
}}

Modèle:Wikinewshas

Modèle:Wikinewstable

Voir aussi[modifier | modifier le code]

Source[modifier | modifier le code]

#/usr/bin/env python
# -*- coding: utf-8 -*-
 
import os, sys, re, traceback
sys.path.append(os.environ['HOME'] + '/pywikipedia')
 
import wikipedia, simplejson
from xml.dom.minidom import parseString as minidom_parseString
from xml.dom import Node
 
 
MONTHS = [u'January',u'February',u'March',u'April',u'May',u'June',u'July',u'August',u'September',u'October',u'November',u'December',
    u'Janvier',u'Février',u'Mars',u'Avril',u'Mai',u'Juin',u'Juillet',u'Août',u'Septembre',u'Octobre',u'Novembre',u'Décembre'] #TODO: srsly...
date_rx = re.compile(r'(\d+) (%s) (\d\d\d\d)' % ('|'.join(MONTHS),), re.IGNORECASE)
 
 
def parseNews(page):
    wikipedia.output(page.aslink())
    site = page.site()
    response, data = site.postForm('/w/api.php', {'action':'parse','format':'json','page':page.title()})
    text = simplejson.loads(data)['parse']['text']['*']
    #print text
 
    #doc = minidom_parseString(u'<html><body>' + text.encode('utf-8') + u'</body></html>')
    doc = minidom_parseString((u'<html><body>' + text + u'</body></html>').encode('utf-8'))
 
    ul = doc.getElementsByTagName('ul')
    if ul:
        for li in ul[0].getElementsByTagName('li'):
            if li.firstChild.nodeType == Node.TEXT_NODE:
                prefix = li.firstChild.nodeValue
                if site.lang == 'en':
                    prefix = date_rx.sub(r'[[\2 \1]]',prefix)
                elif site.lang == 'fr':
                    prefix = date_rx.sub(r'{{date|\1|\2|\3}}',prefix)
            else:
                prefix = ''
            yield prefix, wikipedia.Page(site, li.getElementsByTagName('a')[0].getAttribute('title'))
 
 
def doOnePage(tpl, page, site_src):
    wikipedia.output(page.aslink())
    txt = page.get().replace('_', ' ')
    rx = re.search(r'{{(%s\|.*?)}}' % (tpl.title()), txt)
    if not rx:
        return
 
    config = {
            'page' : (None, False),
            'indent' : (u'*', False),
            }
 
    raw_config = rx.group(1).split('|')[1:]
    for var, val in map(lambda x: x.split('=',1), raw_config):
        var, val = var.strip(), val.strip()
        config[var] = (val, True)
 
    if not config['page'][0]:
        wikipedia.output(u'No target page specified!')
 
    newsPage = wikipedia.Page(site_src, config['page'][0])
 
    text = u'\n'.join(
            [u'%(indent)s %(prefix)s[[wikinews:%(lang)s:%(article_page)s|%(article_title)s]]' % {
                    'article_page' : re.sub(r'[\s\xa0]', ' ', news.title()),
                    'article_title' : news.title(),
                    'prefix' : prefix,
                    'indent' : config['indent'][0],
                    'lang' : site_src.lang }
                for prefix, news in parseNews(newsPage)]
            )
 
    #Check for old content
    oldtext = page.get()
    #Ignore lead (timestamp etc.)
    rx = re.compile('^(.*)<noinclude>.*', re.DOTALL)
    oldtext = rx.sub(r'\1', oldtext).strip()
 
    if text != oldtext:
        raw_config = '|'.join([u'%s = %s' % (v,k[0]) for v,k in config.items() if k[1]])
        text = u'%(text)s<noinclude>\n{{%(tpl)s|%(config)s}}\nRetrieved by ~~~ from [[wikinews:%(lang)s:%(page)s|]] on ~~~~~\n</noinclude>' % {
                'text' : text,
                'tpl' : tpl.title(),
                'config' : raw_config,
                'page' : config['page'][0],
                'lang' : site_src.lang,
                }
        #wikipedia.output(text)
        page.put(text, comment=u'Updating from [[n:%s|%s]]' % (newsPage.title(),newsPage.title(),))
 
    return {
        'src' : newsPage.title(),
        'ns'  : page.site().namespace(page.namespace()),
        'dst' : page.title(),
        }
 
 
def main(lang):
    pages_maintained = {}
    site_src = wikipedia.getSite(code = lang, fam = 'wikinews')
    site_dest = wikipedia.getSite(code = lang, fam = 'wikipedia')
    tpl = wikipedia.Page(site_dest, 'User:Wikinews Importer Bot/config')
    for page in tpl.getReferences(onlyTemplateInclusion=True):
        if page.title().endswith('/Wikinews') or page.title().startswith('Template:Wikinewshas/') or '/Wikinews/' in page.title():
            try:
                step = doOnePage(tpl, page, site_src)
                if not pages_maintained.has_key(step['ns']):
                    pages_maintained[step['ns']] = []
                pages_maintained[step['ns']].append(step)
            except KeyboardInterrupt:
                break
            except:
                traceback.print_exc()
 
    audit_txt = u''
    for ns in sorted(pages_maintained.keys()):
        audit_txt += '\n\n== %s: ==\n\n' % ns
        items = sorted(pages_maintained[ns], key=lambda x: x['dst'])
        audit_txt += '\n'.join(['# [[%(dst)s]] &larr; [[n:%(src)s|%(src)s]]' % item for item in items])
    audit_txt = audit_txt.strip()
 
    audit_page = wikipedia.Page(site_dest,'User:Wikinews Importer Bot/List')
    oldtext = audit_page.get()
    rx = re.compile('^.*?(\n== .*)', re.DOTALL)
    oldtext = rx.sub(r'\1', oldtext).strip()
    #wikipedia.showDiff(oldtext, audit_txt)
    if oldtext != audit_txt:
        audit_page.put(
            u'List of pages maintained by {{user|Wikinews Importer Bot}} by namespace. Last updated: ~~~~~\n\n' + audit_txt,
            comment='Updating list of maintained pages (%d items).' % sum([len(i) for i in pages_maintained.values()]),
            )
 
if __name__ == '__main__':
    try:
        if len(sys.argv) == 1:
            lang = 'en'
        else:
            lang = sys.argv[1]
        main(lang)
    finally:
        wikipedia.stopme()