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