Получить значение из онлайн XML
Я хочу получить значение тега "последняя" версия здесь: https://papermc.io/repo/repository/maven-public/com/destroystokyo/paper/paper-api/maven-metadata.xml
Я пытался использовать этот питон:
import urllib.request
from xml.etree import ElementTree
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
data = opener.open('https://papermc.io/repo/repository/maven-public/com/destroystokyo/paper/paper-api/maven-metadata.xml').
root = ElementTree.fromstring(data)
versioning = root.find("versioning")
latest = versioning.find("latest")
snip.rv = latest.text
Проблема в том, что использование этого внутри vim (я пытаюсь сделать фрагменты UltiSnips вместе с ним) делает весь vim чрезвычайно медленным после завершения работы кода.
Что вызывает замедление работы моей программы именно тогда, когда я добавляю этот код ^^?
0 ответов
Я не знаю, решит ли это проблему с производительностью в vim, но код не работал для меня из-за ошибок в нем.
opener.open
возвращает файл-подобный объект, поэтому вы должны прочитать его, используяElementTree.parse
вместо ElementTree.fromstring
(на самом деле есть конечная точка после opener.open(...)
так что я не знаю, пропустил ли ты read()
после этого. В этом случае возвращаемое значение действительно является строкой).
Кроме того, вы можете попытаться закрыть opener
чтобы увидеть, освобождает ли это некоторые ресурсы (или использовать with
).
Я прилагаю пример улучшенного кода:
import urllib.request
from xml.etree import ElementTree
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
with opener.open('https://papermc.io/repo/repository/maven-public/com/destroystokyo/paper/paper-api/maven-metadata.xml') as data:
root = ElementTree.parse(data)
latest = root.find("./versioning/latest")
snip.rv = latest.text