Plötzlich wollte ich eine Liste der Pakete erhalten, die ich in PyPI registriert hatte. Wenn Sie sich bei PyPI anmelden, wird Ihre Paketliste im Menü angezeigt.
Wenn Sie sich jedoch anmelden müssen, können Sie die Paketliste anderer Benutzer nicht abrufen. Wenn Sie in einer PyPI-Suche einen Benutzernamen eingeben, wird die Suche bis zu einem gewissen Grad getroffen, aber auch Pakete, die zufällig den Benutzernamen enthalten, werden eingegrenzt.
Laut https://wiki.python.org/moin/PyPIXmlRpc können Sie anscheinend xmlrpc verwenden.
>>> import xmlrpc.client as xmlrpclib
>>> client = xmlrpclib.ServerProxy('https://pypi.python.org/pypi')
>>> client.user_packages('t2y')
[['Owner', 'ikazuchi'],
['Owner', 'ikazuchi.plugins.pofile'],
['Owner', 'ikazuchi.plugins.speech'],
['Owner', 'ikazuchi.plugins.blockdiag'],
['Owner', 'pyrtm'],
['Owner', 'TracTicketReferencePlugin'],
['Owner', 'LittleHTTPServer'],
['Owner', 'pytest-quickcheck'],
['Owner', 'kotti_mapreduce'],
['Maintainer', 'TracCronPlugin'],
['Owner', 'TracCronPlugin'],
['Owner', 'TracMultiSelectBoxPlugin'],
['Owner', 'TracChangeFileBiffPlugin'],
['Owner', 'unotools'],
['Owner', 'TracAutocompleteUsersPlugin'],
['Owner', 'TracMovieMacro']]
Ich verstehe, es ist geschafft.
Aber es ist mühsam, eine interaktive Shell zu starten, um eine Liste von Paketen zu erhalten, nicht wahr? Es wäre etwas einfacher, wenn Sie xmlrpc direkt über die Befehlszeile drücken würden. Versuchen wir es mit Curl.
$ user="t2y"; curl -s -X POST -H "Content-Type: text/xml" https://pypi.python.org/pypi -d "<?xml version='1.0'?><methodCall><methodName>user_packages</methodName><params><name>$user</name></params></methodCall>" | python -c "import sys; import xml.dom.minidom; print(xml.dom.minidom.parseString(sys.stdin.read()).toprettyxml(indent=' '))"
<?xml version="1.0" ?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<array>
<data>
<value>
<string>Owner</string>
</value>
<value>
<string>ikazuchi</string>
</value>
</data>
</array>
</value>
...
Ich verstehe, es ist geschafft.
Die Anzeige der Antwort von xmlrpc in der aktuellen Form ist jedoch redundant, und der Zeilenvorschubcode ist hier und da enthalten, sodass er überhaupt nicht leicht zu erkennen ist.
Ich frage mich, ob es keine andere Wahl gibt, als die Antwort von xmlrpc zu analysieren und anzuzeigen. Versuchen wir es mit ElementTree.
$ user="t2y"; curl -s -X POST -H "Content-Type: text/xml" https://pypi.python.org/pypi -d "<?xml version='1.0'?><methodCall><methodName>user_packages</methodName><params><name>$user</name></params></methodCall>" | python -c "import sys; from xml.etree import ElementTree; print('\n'.join(j for j in sorted(['{} ({})'.format(i[1][0].text, i[0][0].text) for i in ElementTree.parse(sys.stdin).iter('data') if i[1][0].text])))"
LittleHTTPServer (Owner)
TracAutocompleteUsersPlugin (Owner)
TracChangeFileBiffPlugin (Owner)
TracCronPlugin (Maintainer)
TracCronPlugin (Owner)
TracMovieMacro (Owner)
TracMultiSelectBoxPlugin (Owner)
TracTicketReferencePlugin (Owner)
ikazuchi (Owner)
ikazuchi.plugins.blockdiag (Owner)
ikazuchi.plugins.pofile (Owner)
ikazuchi.plugins.speech (Owner)
kotti_mapreduce (Owner)
pyrtm (Owner)
pytest-quickcheck (Owner)
unotools (Owner)
Ich verstehe, es ist geschafft.
・ ・ ・
Ich weiß ehrlich gesagt nicht, was ich tun soll: Schweiß: