tap
Back

pypi/search

pypiRead-only

搜索 Python 包

pypi.org
Last 7 days
0
Last 30 days
0
All time
0
pypi/search.js
/* @meta
{
  "name": "pypi/search",
  "description": "搜索 Python 包",
  "domain": "pypi.org",
  "args": {
    "query": "搜索关键词",
    "page": "页码(默认 1)"
  },
  "readOnly": true,
  "example": "tap site pypi/search \"machine learning\""
}
*/

async function(args) {
  const query = args.query || args._text;
  if (!query) return {error: 'Missing query. Usage: tap site pypi/search "QUERY"'};
  const page = args.page || 1;
  const url = `https://pypi.org/search/?q=${encodeURIComponent(query)}&page=${page}`;
  const resp = await fetch(url);
  if (!resp.ok) return {error: 'HTTP ' + resp.status};
  const html = await resp.text();
  const parser = new DOMParser();
  const doc = parser.parseFromString(html, 'text/html');
  const snippets = doc.querySelectorAll('a.package-snippet');
  const packages = Array.from(snippets).map(el => ({
    name: (el.querySelector('.package-snippet__name') || {}).textContent?.trim(),
    version: (el.querySelector('.package-snippet__version') || {}).textContent?.trim(),
    description: (el.querySelector('.package-snippet__description') || {}).textContent?.trim(),
    url: el.href ? `https://pypi.org${el.getAttribute('href')}` : undefined
  }));
  return {query, page, count: packages.length, packages};
}
Updated Mar 31, 2026Created Mar 31, 2026SHA-256: ebc7fd16a123