Skip to content

Latest commit

 

History

History
71 lines (52 loc) · 2 KB

File metadata and controls

71 lines (52 loc) · 2 KB

JavaScript (apify-client) — Stack Exchange Questions Scraper

Call the Stack Exchange Questions Scraper Actor from Node.js with the official apify-client package.

Install

npm install apify-client

Run and read results

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('logiover/stack-exchange-questions-scraper').call({
  site: 'stackoverflow',
  tagged: 'python',
  sort: 'votes',
  maxQuestions: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();

for (const q of items) {
  console.log(`[${q.score}${q.viewCount} views] ${q.title}${q.link}`);
}

Newest DevOps questions for monitoring

const run = await client.actor('logiover/stack-exchange-questions-scraper').call({
  site: 'devops',
  tagged: 'kubernetes;helm',
  sort: 'creation',
  maxQuestions: 300,
});

Find high-view unanswered questions (content gaps)

const { items } = await client.dataset(run.defaultDatasetId).listItems();

const gaps = items
  .filter((q) => !q.hasAcceptedAnswer && q.viewCount > 5000)
  .sort((a, b) => b.viewCount - a.viewCount);

console.log(`${gaps.length} unanswered high-view questions`);
gaps.slice(0, 10).forEach((q) => console.log(q.viewCount, 'views —', q.title));

CommonJS variant

const { ApifyClient } = require('apify-client');
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

(async () => {
  const run = await client.actor('logiover/stack-exchange-questions-scraper').call({
    site: 'serverfault', sort: 'hot', maxQuestions: 200,
  });
  const { items } = await client.dataset(run.defaultDatasetId).listItems();
  console.log(items.length, 'questions');
})();

Keep your token in an environment variable rather than hard-coding it. Full input/output reference is in the main README.