Difference between revisions of "Talk:List of XEPs"
From JaWiki (Jabber/XMPP wiki)
(→Проверка списка: текущая версия моего скрипта) |
m (Reverted edits by 46.161.9.50 (talk) to last revision by Binary) |
||
(32 intermediate revisions by 19 users not shown) | |||
Line 1: | Line 1: | ||
− | == | + | == Скрипт для генерации и проверки списка == |
− | + | Требуется [[Python]] 3 | |
− | #! /usr/bin/env | + | <nowiki>#! /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()</nowiki> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Latest revision as of 13:20, 13 June 2017
Скрипт для генерации и проверки списка[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()