tap
Back

devto/search

devtoRead-only

Search Dev.to articles by keyword

dev.to
Last 7 days
0
Last 30 days
0
All time
0
devto/search.js
/* @meta
{
  "name": "devto/search",
  "description": "Search Dev.to articles by keyword",
  "domain": "dev.to",
  "args": {
    "query": { "type": "string", "required": true, "description": "Search keyword or phrase" },
    "count": { "type": "number", "default": 10, "description": "Number of results (max 100)" }
  },
  "readOnly": true,
  "example": "tap site devto/search \"rust programming\""
}
*/

async function(args) {
  const query = args.query;
  if (!query) return { error: 'query is required' };
  const count = Math.min(args.count || 10, 100);

  const url = 'https://dev.to/search/feed_content?per_page=' + count +
    '&page=0&search_fields=' + encodeURIComponent(query) + '&class_name=Article';

  const resp = await fetch(url);
  if (!resp.ok) return { error: 'HTTP ' + resp.status };

  const data = await resp.json();
  const articles = data.result || [];

  return {
    query: query,
    count: articles.length,
    articles: articles.map(a => ({
      title: a.title,
      url: a.path ? ('https://dev.to' + a.path) : null,
      description: (a.cloudinary_video_url ? '[video] ' : '') +
        (a.body_text || '').substring(0, 300),
      author: a.user ? a.user.name : null,
      username: a.user ? a.user.username : null,
      published_at: a.published_at_int ? new Date(a.published_at_int * 1000).toISOString() : null,
      reactions: a.public_reactions_count || 0,
      comments: a.comments_count || 0,
      tags: a.tag_list || [],
      reading_time: a.reading_time || null
    }))
  };
}
Updated Mar 31, 2026Created Mar 31, 2026SHA-256: b36fe6d478f4