tap
Back

cnblogs/search

cnblogsRead-only

博客园技术文章搜索

zzk.cnblogs.com
Last 7 days
0
Last 30 days
0
All time
0
cnblogs/search.js
/* @meta
{
  "name": "cnblogs/search",
  "description": "博客园技术文章搜索",
  "domain": "zzk.cnblogs.com",
  "args": {
    "query": {"required": true, "description": "Search query"},
    "page": {"required": false, "description": "Page number (default 1)"}
  },
  "readOnly": true,
  "example": "tap site cnblogs/search \"Python\""
}
*/

async function(args) {
  const query = args.query;
  if (!query) return {error: 'query is required'};
  const page = args.page || 1;

  const url = 'https://zzk.cnblogs.com/s?w=' + encodeURIComponent(query) + '&p=' + page;
  const resp = await fetch(url, {credentials: 'include'});
  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 items = doc.querySelectorAll('.searchItem');
  const results = [];

  items.forEach(item => {
    const titleEl = item.querySelector('.searchItemTitle a');
    if (!titleEl) return;

    const title = (titleEl.textContent || '').trim();
    if (!title) return;

    const href = titleEl.getAttribute('href') || '';

    const authorEl = item.querySelector('.searchItemInfo-userName a');
    const author = authorEl ? (authorEl.textContent || '').trim() : '';

    const snippetEl = item.querySelector('.searchCon');
    const snippet = snippetEl ? (snippetEl.textContent || '').trim() : '';

    const dateEl = item.querySelector('.searchItemInfo-publishDate');
    const date = dateEl ? (dateEl.textContent || '').trim() : '';

    const viewEl = item.querySelector('.searchItemInfo-views');
    const views = viewEl ? (viewEl.textContent || '').trim() : '';

    results.push({
      title: title,
      url: href,
      author: author,
      snippet: snippet.substring(0, 300),
      date: date,
      views: views
    });
  });

  return {
    query: query,
    page: page,
    count: results.length,
    results: results
  };
}
Updated Mar 31, 2026Created Mar 31, 2026SHA-256: 91a89fc05b3a