Soudain, j'ai voulu obtenir une liste des paquets que j'avais enregistrés dans PyPI. Lorsque vous vous connectez à PyPI, votre liste de paquets apparaîtra dans le menu.
Mais si vous devez vous connecter, vous ne pouvez pas obtenir la liste des packages des autres utilisateurs. Si vous entrez un nom d'utilisateur dans une recherche PyPI, la recherche sera effectuée dans une certaine mesure, mais les packages qui incluent le nom d'utilisateur seront également limités.
Selon https://wiki.python.org/moin/PyPIXmlRpc, il semble que vous puissiez utiliser xmlrpc.
>>> 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']]
Je vois, c'est fait.
Mais c'est compliqué de lancer un shell interactif pour obtenir une liste de paquets, n'est-ce pas? Ce serait un peu plus facile si vous appuyez sur xmlrpc directement à partir de la ligne de commande. Essayons d'utiliser 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>
...
Je vois, c'est fait.
Cependant, afficher la réponse de xmlrpc telle quelle est redondant, et le code de saut de ligne est inclus ici et là, donc ce n'est pas facile à voir du tout.
Je me demande s'il n'y a pas d'autre choix que d'analyser et d'afficher la réponse de xmlrpc. Essayons d'utiliser 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)
Je vois, c'est fait.
・ ・ ・
Honnêtement, je ne sais pas quoi faire: transpirer:
Recommended Posts