Получить значение из онлайн 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
Другие вопросы по тегам