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) |
||
| (39 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()