Talk:List of XEPs
From JaWiki (Jabber/XMPP wiki)
Revision as of 13:20, 13 June 2017 by Binary (Talk | contribs) (Reverted edits by 46.161.9.50 (talk) to last revision by Binary)
Скрипт для генерации и проверки списка[edit]
Требуется Python 3
#! /usr/bin/env python3 # -*- coding: utf-8 -*- # input XEPS_ORIG_URL = 'http://xmpp.org/extensions/xeps.xml' XEPS_WIKI_URL_T = 'http://jawiki.ru/index.php?title={}&action=raw' XEPS_WIKI_URL_PAGES = ( 'Список_расширений/0001—0049', 'Список_расширений/0050—0099', 'Список_расширений/0100—0149', 'Список_расширений/0150—0199', 'Список_расширений/0200—0249', 'Список_расширений/0250—0299' ) import itertools import re import sys import urllib.request import xml.etree.ElementTree as xml def fetchUrl(url): return urllib.request.urlopen(url).read().decode('UTF-8') def initXepList(): print('... Получение оригинального списка расширений... ', end='', file=sys.stderr) sys.stderr.flush() xeps_orig_xml = xml.XML(fetchUrl(XEPS_ORIG_URL)) print('Готово.', file=sys.stderr) xeps_orig = {} for xep in xeps_orig_xml: number = xep.find('number').text xeps_orig[number] = { 'name': xep.find('name').text, 'abstract': xep.find('abstract').text, 'type': xep.find('type').text.replace(' ', '_'), 'status': xep.find('status').text } for number in sorted(xeps_orig): print( '{{{{XepListItem|{number}|{name}|{abstract}|||{type}|{status}}}}}' .format(number=number, **xeps_orig[number]) ) def main(): print('... Получение списка расширений из ЯВики... ', end='') xeps_wiki = itertools.chain(*( fetchUrl(XEPS_WIKI_URL_T.format(urllib.parse.quote(page))).splitlines() for page in XEPS_WIKI_URL_PAGES )) print('Готово.') xeps = {} for line in xeps_wiki: line = line[2:-2] # убираем двойные фигурные скобки по краям, если есть line = re.sub(r'\{\{.*?\}\}', '', line) # вырезаем вызовы викишаблонов, в них могут быть палки line = re.sub(r'\[\[.*?\]\]', '', line) # вырезаем викиссылки, в них могут быть палки parts = line.split('|') if parts[0] == 'XepListItem': xeps[parts[1]] = { 'name': parts[2], 'type': parts[6].replace('_', ' '), 'status': parts[7] } print('... Прочитано %d расширений.' % len(xeps)) print('... Получение оригинального списка расширений... ', end='') xeps_orig_xml = xml.XML(fetchUrl(XEPS_ORIG_URL)) print('Готово.') xeps_orig = {} for xep in xeps_orig_xml: number = xep.find('number').text xeps_orig[number] = { 'name': xep.find('name').text, 'type': xep.find('type').text, 'status': xep.find('status').text } differ = False for number in sorted(xeps_orig): if number not in xeps: differ = True print('[*] Новое расширение: XEP-' + number) print('\tНазвание: ' + xeps_orig[number]['name']) print('\tТип: ' + xeps_orig[number]['type']) print('\tСтатус: ' + xeps_orig[number]['status']) elif xeps[number] != xeps_orig[number]: differ = True print('[*] Различается XEP-' + number) if xeps[number]['name'] != xeps_orig[number]['name']: print('\tНазвание изменено с "{0}" на "{1}"'.format(xeps[number]['name'], xeps_orig[number]['name'])) if xeps[number]['type'] != xeps_orig[number]['type']: print('\tТип изменён с "{0}" на "{1}"'.format(xeps[number]['type'], xeps_orig[number]['type'])) if xeps[number]['status'] != xeps_orig[number]['status']: print('\tСтатус изменён с "{0}" на "{1}"'.format(xeps[number]['status'], xeps_orig[number]['status'])) if not differ: print('[=] Различия не найдены.') if __name__ == '__main__': #initXepList() main()