csdn/search
csdnRead-onlyCSDN 技术文章搜索
so.csdn.net
Last 7 days
0
Last 30 days
0
All time
0
csdn/search.js
/* @meta
{
"name": "csdn/search",
"description": "CSDN 技术文章搜索",
"domain": "so.csdn.net",
"args": {
"query": {"required": true, "description": "Search query"},
"page": {"required": false, "description": "Page number (default 1)"}
},
"readOnly": true,
"example": "tap site csdn/search \"Python\""
}
*/
async function(args) {
if (!args.query) return {error: 'Missing argument: query'};
const page = parseInt(args.page) || 1;
const url = 'https://so.csdn.net/api/v3/search?q=' + encodeURIComponent(args.query)
+ '&t=all&p=' + page
+ '&s=0&tm=0&lv=-1&ft=0&l=&u=&ct=-1&pnt=-1&ry=-1&ss=-1&dct=-1&vco=-1&cc=-1&sc=-1&ald=-1&ep=&wp=0';
const resp = await fetch(url, {credentials: 'include'});
if (!resp.ok) return {error: 'HTTP ' + resp.status, hint: 'Make sure so.csdn.net is accessible'};
const d = await resp.json();
const strip = (html) => (html || '').replace(/<[^>]+>/g, '').replace(/ /g, ' ')
.replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&').trim();
const results = (d.result_vos || []).map((item, i) => ({
rank: (page - 1) * 20 + i + 1,
type: item.type,
title: strip(item.title || ''),
url: item.url || '',
description: strip(item.description || item.body || '').substring(0, 300),
author: item.nickname || item.author || '',
views: parseInt(item.view) || 0,
likes: parseInt(item.digg) || 0,
collections: parseInt(item.collections) || 0,
created: item.create_time ? new Date(parseInt(item.create_time)).toISOString() : null
}));
return {
query: args.query,
page: page,
total: d.total || 0,
count: results.length,
results: results
};
}
Updated Mar 31, 2026Created Mar 31, 2026SHA-256: 58524f159e13…