Recent Questions - Stack Appsmost recent 30 from stackapps.com2026-04-13T17:45:38Zhttps://stackapps.com/feedshttps://creativecommons.org/licenses/by-sa/4.0/rdfhttps://stackapps.com/q/120290ThreadCastAI – Community listening and reply management tool for Stack ExchangeHimanshu Mehtahttps://stackapps.com/users/1591122026-04-10T09:35:00Z2026-04-13T09:20:59Z
<h2>About</h2>
<p>ThreadCastAI is a community monitoring and reply management tool that helps
businesses and developers discover Stack Exchange questions relevant to their
product, service, or area of expertise.</p>
<p>It monitors Stack Exchange for threads matching user-defined keywords and tags,
surfaces high-intent questions in a review queue, and lets users draft, edit,
and approve replies — before anything is posted.</p>
<p><strong>Live app:</strong> <a href="https://threadcast.pixalab.ai" rel="nofollow noreferrer">https://threadcast.pixalab.ai</a><br />
<strong>Contact:</strong> dev@pixelnx.com<br />
<strong>Developer:</strong> PixaLab (<a href="https://pixalab.ai" rel="nofollow noreferrer">https://pixalab.ai</a>)</p>
<hr />
<h2>What it does</h2>
<ul>
<li>Monitors Stack Exchange for questions matching user-configured keywords</li>
<li>Scores each thread by relevance and surfaces them in a review queue</li>
<li>Lets users write or edit a reply inside the app</li>
<li>Posts the reply only after the user explicitly approves it</li>
<li>Tracks clicks and engagement per reply using UTM parameters</li>
</ul>
<p>Nothing is posted automatically. Every reply goes through a human review
and approval step before submission.</p>
<hr />
<h2>How it uses the Stack Exchange API</h2>
<ul>
<li><strong>Search</strong> — uses <code>/search/advanced</code> and <code>/questions</code> to find relevant threads based on user-defined keywords and tags</li>
<li><strong>OAuth 2.0 (explicit flow)</strong> — users authenticate their own Stack Exchange account; the app only acts using a user-granted access token</li>
<li><strong>Posting</strong> — replies are submitted via <code>/answers/add</code> using the authenticated user's personal token, only after the user approves the reply in the queue</li>
<li><strong>Rate limiting</strong> — all requests use the registered API key; <code>backoff</code> values in API responses are fully respected; quota is never intentionally exhausted</li>
<li><strong>No scraping</strong> — only official Stack Exchange API endpoints are used</li>
</ul>
<hr />
<h2>Authentication Flow</h2>
<ol>
<li>User clicks "Connect Stack Exchange" inside the app</li>
<li>App redirects to Stack Exchange OAuth 2.0 explicit grant flow</li>
<li>User reviews and approves permissions on Stack Exchange</li>
<li>App receives the access token, stores it encrypted, scoped to that user only</li>
<li>All subsequent API calls for that user use their personal token</li>
</ol>
<hr />
<h2>Platform Details</h2>
<ul>
<li><strong>Type:</strong> Web application (SaaS)</li>
<li><strong>Client ID:</strong> 37941</li>
<li><strong>OAuth redirect URI:</strong> <a href="https://threadcastapi.pixalab.ai/api/v1/auth/platforms/stackexchange/callback" rel="nofollow noreferrer">https://threadcastapi.pixalab.ai/api/v1/auth/platforms/stackexchange/callback</a></li>
</ul>
<hr />
<h2>License</h2>
<p>Proprietary — all rights reserved.</p>
https://stackapps.com/q/120270What are the protocol constraints and hard rules for working with the AI from the APIgrldsndrshttps://stackapps.com/users/1567512026-04-09T22:38:08Z2026-04-09T22:43:49Z
<p>I am thinking that I can use the API with the newly minted AI to play an adversarial role with solutions I propose with ongoing projects. Before I implement anything can anyone illuminate the hidden or subtle rules of engagement?</p>
https://stackapps.com/q/120210Tracklister Community Bot - Electronic Music Q&Benjaminhttps://stackapps.com/users/1589022026-04-05T17:29:24Z2026-04-05T17:29:24Z
<!-- thumbnail: https://tracklist.live/favicon.ico -->
<!-- version: 1.0 -->
<!-- tag: app -->
<!-- excerpt: Monitors Music Fans SE for electronic music questions and posts data-driven
answers using the Tracklister music database. -->
<h2>About</h2>
<p>Tracklister Community Bot monitors <a href="https://musicfans.stackexchange.com">Music Fans Stack
Exchange</a> for questions about electronic music genres,
artists, releases, and track identification. It posts answers enriched with data from the
<a href="https://tracklist.live" rel="nofollow noreferrer">Tracklister</a> electronic music database.</p>
<h3>How it works</h3>
<ul>
<li>Polls the SE API for new questions tagged <code>electronic-music</code>, <code>similar-artists</code>,
<code>identify-this-song</code>, <code>identify-this-genre</code></li>
<li>Drafts answers using release, artist, and genre data from the Tracklister database</li>
<li>All answers are human-reviewed before posting</li>
</ul>
<h3>Links</h3>
<ul>
<li><strong>Website:</strong> <a href="https://tracklist.live" rel="nofollow noreferrer">https://tracklist.live</a></li>
<li><strong>Platform:</strong> Server-side Ruby on Rails application</li>
<li><strong>OAuth Scope:</strong> <code>write_access</code></li>
<li><strong>Contact:</strong> via <a href="https://github.com/benjaminfauchald/Tracklister" rel="nofollow noreferrer">GitHub</a></li>
</ul>
https://stackapps.com/q/120170PLACEHOLDER: Interaction between user on LLM and Online Knowledge Communityarnold tsuihttps://stackapps.com/users/1505532026-03-30T11:35:23Z2026-04-03T15:49:44Z
<p>About: This application is a research project exploring more effective ways to discover and interact with knowledge on Stack Overflow. It provides a unified interface for searching for content and allows authenticated users to perform actions such as upvoting or commenting directly via the API. This app is intended for research and non-commercial use.</p>
<p>Features:</p>
<p>OAuth 2.0 login using Stack Exchange
View questions and answers from Stack Overflow
Upvote answers and questions (requires user authorization)
Post questions and answers which is written by user
Google OAuth 2.0 support for app login (optional)
How it works:</p>
<p>User will chat with LLM as they do as usual, then the tool will suggest corresponding helpful posts and suggest possible action to the user
It will not spam the community; every action will need the user to review and confirm. Posting an answer/question or reply is simulated, will not really post on the community.</p>
https://stackapps.com/q/12016-1StackOverflow Agent Swarm — Automated answer botHarshit Anandhttps://stackapps.com/users/1584752026-03-29T21:48:58Z2026-03-29T21:48:58Z
<h2>StackOverflow Agent Swarm</h2>
<p>A multi-agent automated system that discovers unanswered Stack Overflow<br />
questions and posts high-quality answers using Claude AI.</p>
<p><strong>Type:</strong> Script / Bot<br />
<strong>Author:</strong> harshit-anand
<strong>License:</strong> Personal use
<strong>OAuth App ID:</strong> 37695</p>
https://stackapps.com/q/120150Professionalize Media AI – Support automation for Aspose / GroupDocs / ConholdateProfessionalize_Mediahttps://stackapps.com/users/1584692026-03-29T20:15:28Z2026-03-29T20:15:28Z
<p>This is an application registered for Stack Exchange API usage.</p>
<p>Professionalize Media AI is an internal support-assistance tool.</p>
<p>It monitors Stack Overflow for public mentions of Aspose, GroupDocs, and Conholdate products, drafts technical responses, and allows approved publishing through authenticated workflows.</p>
<p>Primary use:</p>
<ul>
<li>detect relevant developer questions</li>
<li>draft helpful support replies</li>
<li>publish approved answers/comments through the Stack Exchange API</li>
</ul>
<p>Status: internal / testing</p>
<p>Contact: marko.pilekic@aspose.com</p>
https://stackapps.com/q/120140DeepDNA.ai — Stack Exchange Q&A assistant for genomics topicsAlfonso Gutiérrezhttps://stackapps.com/users/1584142026-03-28T19:49:38Z2026-03-28T20:07:57Z
<!-- thumbnail: https://deepdna.ai/og/home.png -->
<!-- version: 1.0 -->
<!-- tag: app -->
<!-- excerpt: Genomics Q&A assistant for Biology, Bioinformatics and Health Stack Exchange -->
<h2>About</h2>
<p>DeepDNA.ai is a personal tool that finds unanswered questions about genomics, pharmacogenomics, and DNA
analysis on Stack Exchange and helps draft answers.</p>
<h2>Platform</h2>
<ul>
<li>CLI / Node.js</li>
</ul>
<h2>OAuth</h2>
<ul>
<li><strong>Client ID:</strong> 37685</li>
<li><strong>OAuth Domain:</strong> stackexchange.com</li>
</ul>
<h2>Contact</h2>
<p>hello@deepdna.ai</p>
<h2>License</h2>
<p>Private / Personal use</p>
https://stackapps.com/q/120110PLACEHOLDER - SC NP SC IntegrationNilay Patelhttps://stackapps.com/users/1581152026-03-24T05:30:00Z2026-03-24T07:11:42Z
<p>This is a private integration tool I am building to interact with the Stack Exchange community via the API.
I will be using this to get questions which I only have interest in and not a whole lot of questions which do not make sense to me.</p>
https://stackapps.com/q/12010-1ThaSha — MuleSoft DataWeave ContentThaShahttps://stackapps.com/users/1581002026-03-24T02:19:38Z2026-03-24T02:19:38Z
<h2>ThaSha</h2>
<p>ThaSha is a content publishing pipeline for MuleSoft DataWeave
patterns from the mulesoft-cookbook repository.</p>
<p><strong>GitHub:</strong> <a href="https://github.com/shakarbisetty/mulesoft-cookbook" rel="nofollow noreferrer">https://github.com/shakarbisetty/mulesoft-cookbook</a></p>
<p><strong>Type:</strong> Script</p>
<p><strong>License:</strong> MIT</p>
<p><strong>Version:</strong> 1.0</p>
<p>This app publishes DataWeave pattern content to Stack Overflow
as Q&A pairs covering common integration traps and fixes.</p>
https://stackapps.com/q/12006-3Cloudflare Support Agent — AI-assisted answers for Cloudflare-tagged questionsDarshan Hegdehttps://stackapps.com/users/1574542026-03-13T00:59:39Z2026-03-13T01:04:23Z
<p>AI-powered support agent that monitors Cloudflare-tagged questions and generates draft answers using RAG over official Cloudflare documentation.</p>
https://stackapps.com/q/120020FlywheelBot - Automated API content posterDonnyhttps://stackapps.com/users/1572372026-03-09T03:16:15Z2026-03-09T03:17:26Z
<h2>FlywheelBot</h2>
<p>A personal automation script that posts API documentation and answers to Stack Overflow.</p>
<p><strong>Type:</strong> Script (personal use only)</p>
<p><strong>Author:</strong> donny.nguyen.business@gmail.com</p>
<p><strong>Status:</strong> Development</p>
https://stackapps.com/q/119961Raw comment Markdownuser3840170https://stackapps.com/users/779812026-03-02T20:46:26Z2026-03-02T20:46:26Z
<p>Adds a discreet “MD” toggle next to every comment that allows you to view the comment’s raw Markdown code.</p>
<pre class="lang-js prettyprint-override"><code>// ==UserScript==
// @name Stack Exchange: raw comment Markdown
// @grant none
// @run-at document-start
// @match https://*.stackexchange.com/*
// @match https://*.superuser.com/*
// @match https://*.stackoverflow.com/*
// @match https://*.mathoverflow.net/*
// @match https://*.serverfault.com/*
// @match https://*.askubuntu.com/*
// @match https://stackapps.com/*
// @exclude https://api.stackexchange.com/*
// @exclude https://data.stackexchange.com/*
// @exclude https://openid.stackexchange.com/*
// @exclude https://contests.stackoverflow.com/*
// @exclude /^https?:\/\/winterbash\d{4,}\.stackexchange\.com\//
// ==/UserScript==
/*jshint curly:false*/
const html = (() => {
const html = function (pieces, ...values) {
if (new.target !== void 0)
return Reflect.construct(String, [pieces], new.target);
return new html(String.raw({ raw: pieces }, ...values.map(
s => s instanceof html ? s : `${s}`.replaceAll(
/[<>&"']/gu, c => `&#${c.charCodeAt(0)};`))));
};
html.prototype = Object.create(String.prototype);
return html;
})();
const processNode = node => {
if (!node?.matches('.js-comment'))
return;
if (node.querySelector('.--rmd-button'))
return;
const child = node.querySelector('.comment-date');
if (!child)
return;
child.insertAdjacentHTML(
'afterend',
`<button type="button" class="--rmd-button s-btn s-btn__link">md</button>`
);
};
const processUnder = node => {
processNode(node);
for (const subnode of node.querySelectorAll('.js-comment'))
processNode(subnode);
};
if (document.body)
processUnder(document.body);
new MutationObserver(mutations => {
for (const mut of mutations) {
switch (mut.type) {
case 'childList':
processUnder(mut.target);
break;
}
}
}).observe(document, {
childList: true,
subtree: true,
});
document.addEventListener('click', (ev) => {
if (!ev.target.matches('.--rmd-button'))
return;
const commentNode = ev.target.closest('.js-comment');
const { commentId } = commentNode.dataset;
const oldNode = commentNode.querySelector('pre.--rmd-markup');
if (oldNode) {
oldNode.remove();
return;
}
(async () => {
const response = await fetch(
`https://api.stackexchange.com/2.3/comments/${commentId}?${
new URLSearchParams({
'site': location.host,
'filter': 'do(JZxI-6d1J5m2-r',
})}`);
const responseJson = await response.json();
commentNode.querySelector(':scope > .comment-text').insertAdjacentHTML(
'beforeend', html`
<pre class="--rmd-markup">${
responseJson.items[0].body_markdown
}</pre>
`);
})().catch(e => {
alert(`[SE:rcM] ${e}`);
});
});
const contentLoaded = new Promise((ok, ko) => {
switch (document.readyState) {
case 'complete':
case 'interactive':
ok();
return;
case 'loading':
break;
default:
ko(new TypeError(`readyState=${document.readyState}`));
}
document.addEventListener('DOMContentLoaded', () => ok(), { once: true });
});
(async () => {
await contentLoaded;
document.head.insertAdjacentHTML('beforeend', `
<style>
.s-btn.s-btn__link.--rmd-button {
font-variant: small-caps;
}
pre.--rmd-markup {
white-space: wrap;
}
</style>
`);
})();
</code></pre>
https://stackapps.com/q/119910wm - StackOverflow question findera113nwhttps://stackapps.com/users/1563832026-02-21T17:25:20Z2026-02-21T18:40:47Z
<p>wm is a bot that finds unanswered Stack Overflow questions that I will find interesting and want to answer! It looks for questions on a few different metrics and then shows me the questions. I write an answer and ask it to post it.</p>
<ul>
<li>All answers are written by me (a human - funny that we have to say that these days)</li>
<li>Uses Stack Exchange API v2.3</li>
<li>OAuth with write_access scope</li>
<li>Client ID: 36745</li>
</ul>
https://stackapps.com/q/119812stack-exchange-notify-send.js - Live desktop notificationsDaniel Thttps://stackapps.com/users/1216492026-02-05T04:03:52Z2026-02-05T19:36:16Z
<!-- version: 1.0 -->
<!-- tag: notifier -->
<!-- excerpt: Extremely minimalist 2026 desktop notifier for Stack Exchange inbox/reputation -->
<h3>About:</h3>
<p>stack-exchange-notify-send.js is a extremely minimalist 2026 desktop notifier for Stack Exchange inbox/reputation. It's browserless, dependencyless, and permissionless. It's for people who need to have a code editor not Stack Exchange open, but still want to respond promptly to comments.</p>
<p>The motivation was that <a href="https://meta.stackexchange.com/q/47750/1373352">4 other</a> desktop notifiers broke. It's difficult to install them because their GUI libraries require 2010s versions of GTK/Qt/etc, so mine requires no GUI library at all. Their parsing might've broke and now they might do nothing, so I chose to not do anything beyond the bare minimum parsing required, and just display the raw JSON. This philosophy should help stack-exchange-notify-send.js survive better. The WebSocket API's undocumented, but it's faster than RSS or polling.</p>
<h3>Screenshot:</h3>
<p><a href="https://i.sstatic.net/oTnNX73A.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/oTnNX73A.png" alt="stack-exchange-notify-send.js notifying upon receiving an inbox message" /></a></p>
<h3>Install:</h3>
<p>Just copypaste the code below into a <code>stack-exchange-notify-send.js</code> file. Add your <a href="https://stackexchange.com">https://stackexchange.com</a> userid. Ensure <a href="https://nodejs.org/en/download" rel="nofollow noreferrer">Node.js</a> is installed. Linux/macOS users, mark it as executable. Windows/macOS users, run <code>npm init</code> then <code>npm install node-notifier</code>. If desired, use KDE Linux system settings for autostart.</p>
<p>Linux users can double-click to run, and Windows/all users can execute it with <code>node stack-exchange-notify-send.js</code></p>
<pre class="lang-js prettyprint-override"><code>#!/usr/bin/env node
// Go to https://stackexchange.com/ , click on your profile picture,
// then copy the number in the URL here
const stackexchange_com_userid = "";
let notifier;
const title = "Stack Exchange notify-send";
console.log(title + ": https://stackapps.com/q/11981/121649");
if (process.platform === "linux") { // Dependencyless on Linux
const { spawn } = require("child_process");
// https://reddit.com/r/kde/comments/if5oeb/notifications_from_script_not_saving_to_history/g2lvzvj/
const persist = ["-h", "string:desktop-entry:org.kde.konsole"];
// libnotify-bin is default-installed on Ubuntu. Please install it if missing in other distros
notifier = message => void spawn("notify-send", [...persist, title, message], { stdio: "inherit" });
} else {
const { notify } = require("node-notifier");
notifier = message => void notify({ title, message });
}
// Surprising no authentication's required.
const s = new WebSocket("wss://qa.sockets.stackexchange.com"); // https://meta.stackexchange.com/q/218343/1373352
s.onmessage = e => {
data = JSON.parse(e.data)
console.log(e.data);
if (data.action === "hb") {
s.send("pong");
return;
}
notifier(e.data); // Crude but fault-tolerant
// Omitted filtering out 1 -> 0 upon clicking in browser.
};
s.onopen = () => {
console.log("Hello https://stackexchange.com/users/" + stackexchange_com_userid)
// Listen to all of the current user's inbox/reputation notifications across all sites
// Chat's not targeted by this app except perhaps if a ping enters the inbox
s.send(stackexchange_com_userid + "-topbar");
console.log("Connected. Now waiting for inbox messages or reputation changes...");
};
</code></pre>
<h3>Platform:</h3>
<p>Linux, macOS, and Windows</p>
<h3>Contact:</h3>
<p>I created this app. You can contact me on Stack Exchange Chat.</p>
<h3>License:</h3>
<p>SPDX-License-Identifier: CC-BY-SA-4.0 OR MIT OR Apache-2.0</p>
<h3>Code:</h3>
<p>The Node.js programming language was used to write this. No frameworks or tools are required. You can contribute by submitting an answer or suggested edit. The source code is in the "Install:" section above.</p>
https://stackapps.com/q/119730PLACEHOLDER - Antigravity Publisher - Personal Toolcastidiahttps://stackapps.com/users/1552072026-01-26T09:00:22Z2026-01-27T14:11:46Z
<h2>Screenshot / Code Snippet</h2>
<p>[None]</p>
<h2>About</h2>
<p>A minimal VS Code extension to publish questions to Stack Overflow.
Personal use only.</p>
<h3>License</h3>
<p>MIT</p>
<h3>Download</h3>
<p>Private / In development</p>
<h3>Platform</h3>
<p>VS Code / Antigravity</p>
<h2>Code</h2>
<p>Local</p>
https://stackapps.com/q/119092Navigate through ChallengesM--https://stackapps.com/users/670952025-09-22T06:19:08Z2026-03-06T19:22:41Z
<h3>About</h3>
<p>Stack Overflow's <a href="https://stackoverflow.com/beta/challenges">Challenges</a> can quickly become overwhelming when trying to track which posts you've already read or navigate back to someone's post. There are no pagination and posts are usually quite long, making scrolling at the very best tedious (if you're lucky enough to not scroll past what you need). This userscript provides a relatively clean navigation experience by adding view management and organization tools.</p>
<p>The script adds four main features:</p>
<ol>
<li><p>Navigation menu: A simple dropdown menu showing all posts with author names, dates, and preview text, ordered based on the order that they appear on the page with a blue indicator (if you have moderation privileges, you'll see the deleted posts at the bottom with a red indicator).</p>
</li>
<li><p>Individual post management: Each posts gets a "Viewed:" checkbox that you can check when finished reading. Checked posts automatically collapse to show just a compact banner with author name and date information. You can hit "Show" to view the content and collapse it again by hitting "Hide". Viewed posts get a green indicator in the dropdown menu.</p>
</li>
<li><p>Global toggle: An "Expand/Collapse All Viewed" button that lets you quickly show/hide all posts that you've marked as viewed.</p>
</li>
<li><p>Collapsed deleted posts for moderators. All the deleted posts are collapsed by default. You can expand them individually as needed.</p>
</li>
</ol>
<p>Your viewing preferences persist across page reloads, so you can return to a Challenge and immediately see which posts are new since your last visit.</p>
<p><img src="https://i.sstatic.net/0bM4twXC.png" alt="" /></p>
<h3>Installation</h3>
<p><a href="https://github.com/MdoubleDash/SOS_Userscripts/raw/refs/heads/main/Navigate%20Challenges.user.js" rel="nofollow noreferrer">Click to install with a script manager</a>. <strong>N.B.</strong> I have only tested this with Tampermonkey on Firefox.</p>
<h3>Repository</h3>
<p>Here is the source code for this userscript; <a href="https://github.com/MdoubleDash/SOS_Userscripts/" rel="nofollow noreferrer">source code repo</a></p>
<p>Special thanks to <a href="https://stackapps.com/users/62199/vlaz">VLAZ</a> for their code review and suggestions.</p>
https://stackapps.com/q/118231Obtaining all tagIds given a list of tag names in API v3chrispitudehttps://stackapps.com/users/1358472025-06-19T00:44:17Z2026-03-18T13:05:20Z
<p>I am a Stack Overflow for Teams app developer, and given <a href="https://meta.stackexchange.com/questions/410541/stack-exchange-api-stack-apps-updates-and-upcoming-version-3-beta">this recent announcement</a> that API v3 is being extended to the public platform, I am hoping we can start asking API v3 questions here.</p>
<p>Given a list of tag names:</p>
<pre class="lang-python prettyprint-override"><code>tag_names = [
"tag1",
"tag2",
"tag3",
]
</code></pre>
<p>I need to get the list of corresponding <code>tagId</code> integer values.</p>
<p>The <code>/tags</code> route makes this a bit cumbersome because:</p>
<ul>
<li>The tag name is always a <code>partialName</code>, thus requiring unwanted matches to be filtered.</li>
<li>Only one tag name can be specified per request, thus requiring multiple requests.</li>
</ul>
<p>This could be simplified if:</p>
<ul>
<li>A non-partial <code>name</code> parameter was supported.</li>
<li>The <code>name</code> and <code>partialName</code> parameters were enhanced to support an array of strings.</li>
</ul>
<p>Has anyone else run into this challenge with API v3?</p>
https://stackapps.com/q/108063HeapExchange: Stack Q&A ClientOhhhThatVarunhttps://stackapps.com/users/1174372025-05-18T13:31:44Z2026-03-07T10:40:12Z
<p>HeapExchange is an Android app designed to bring the power of Stack Exchanage to your fingertips.</p>
<ol>
<li>Browse anonymously trending sites, questions by tag or topic</li>
<li>View answers, vote, and read discussions</li>
<li>Swiflty switch between sites</li>
<li>Get notified</li>
</ol>
<p><em><strong>Edit (15-02-2026)</strong></em></p>
<p>App is now live on PlayStore: <a href="https://play.google.com/store/apps/details?id=com.heapexchange" rel="nofollow noreferrer">https://play.google.com/store/apps/details?id=com.heapexchange</a></p>
<p><a href="https://i.sstatic.net/9AjnJiKN.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/9AjnJiKN.jpg" alt="Screenshot" /></a>
<a href="https://i.sstatic.net/7GqLbbeK.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/7GqLbbeK.jpg" alt="Screenshot" /></a>
<a href="https://i.sstatic.net/mdG0gJhD.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/mdG0gJhD.jpg" alt="Screenshot" /></a>
<a href="https://i.sstatic.net/82VLvtgT.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/82VLvtgT.jpg" alt="Screenshot" /></a>
<a href="https://i.sstatic.net/XI8Fwupc.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/XI8Fwupc.jpg" alt="Screenshot" /></a>
<a href="https://i.sstatic.net/UDeYxYED.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/UDeYxYED.jpg" alt="Screenshot" /></a></p>
<p><em>App is currently in beta.</em></p>
https://stackapps.com/q/108035Copy code-blocks from Stack Exchange websitesM--https://stackapps.com/users/670952025-05-15T00:17:37Z2026-02-01T07:41:56Z
<h3>About</h3>
<p>Highlighting and copying code from questions/answers is not as straightforward as one hopes it'd be. Throughout the years, there were (at least) a couple of <a href="https://stackapps.com/q/10195">userscripts</a>/<a href="https://stackapps.com/q/6753">extensions</a> to address this need. However, they are not maintained and the links are dead.</p>
<p>I have found this <a href="https://gist.github.com/kpym/30d90be41ab5c248cdf7" rel="nofollow noreferrer">gist</a> by kpym to be still functional, however it could've used a facelift.</p>
<p>This userscript (written off of the linked gist) adds a copy button to the top right corner of code blocks to copy the code from questions and answers.</p>
<p><strong>Dark mode:</strong></p>
<p><img src="https://i.sstatic.net/8Awl5gTK.gif" alt="" /></p>
<p><strong>Light mode:</strong></p>
<p><img src="https://i.sstatic.net/26IEJV2M.gif" alt="" /></p>
<h3>Installation</h3>
<p><a href="https://github.com/MdoubleDash/SOS_Userscripts/raw/refs/heads/main/Copy%20Code%20from%20StackExchange.user.js" rel="nofollow noreferrer">Click to install with a script manager</a>. <strong>N.B.</strong> I have only tested this with Tampermonkey on Firefox.</p>
<h3>Repository</h3>
<p>Here is the source code for this userscript; <a href="https://github.com/MdoubleDash/SOS_Userscripts/" rel="nofollow noreferrer">source code repo</a></p>
https://stackapps.com/q/106111How to Resolve "Applications must have a registered Stack Apps post to write" Error when Requesting Write Access via OAuth?Ashwinihttps://stackapps.com/users/1089502024-09-19T07:29:10Z2026-02-13T18:05:45Z
<h3>Question Description:</h3>
<p>I am developing an application that integrates with Stack Overflow’s API, and I need to enable write access for it. I’ve successfully registered my application on the <a href="https://stackapps.com/">Stack Apps site</a>, and I am trying to request OAuth write access with the following URL:</p>
<p><a href="https://stackoverflow.com/oauth/dialog?client_id=26659&scope=write_access&redirect_uri=https://socialmedia.service.clouducaas.com/login_success">https://stackoverflow.com/oauth/dialog?client_id=26659&scope=write_access&redirect_uri=https://socialmedia.service.clouducaas.com/login_success</a></p>
<p>However, I keep receiving the error:</p>
<p><strong>"Applications must have a registered Stack Apps post to write."</strong></p>
<p>Here are the steps I've already followed:</p>
<ul>
<li>I have registered my app on Stack Apps and obtained my client ID.</li>
<li>I used the correct <code>client_id</code> and <code>redirect_uri</code>.</li>
<li>I included the <code>scope=write_access</code> parameter in my OAuth request.</li>
</ul>
<p>What could I be missing or doing wrong? How can I resolve this error and successfully enable write access for my application?</p>
<p>Any guidance on how to correctly register the Stack Apps post and link it to my app would be greatly appreciated!</p>
https://stackapps.com/q/97230Error calling Stack Overflow Teams API using Python requests libraryShadaehttps://stackapps.com/users/1059222023-05-07T04:15:21Z2026-01-21T12:04:45Z
<p>I'm trying to call a PUT/DELETE request using the Stack Overflow Teams API in Python, but I'm encountering errors. <em>As an FYI, I have a working PAT that allows me to make get requests for articles and questions.</em> Specifically, I'm trying to create an article, update an article, and delete an article using the API, but the PUT/DELETE requests don't seem to be working. When I try to run the code, I get an error message that says <em><strong>"no method found with this name</strong></em>" or <em><strong>{"error_id":400,"error_message":"title","error_name":"bad_parameter"}</strong></em>. The title might be the issue, but I don't think it goes against the requirements (string, 5 character+ length)</p>
<p>I have tried running the API calls using Python's requests module, and I have checked that my authentication token is correct. I have also tried adjusting the order of the payload and double-checking that the headers are correct. However, I'm still getting errors.</p>
<p>Here's my code (sanitized for privacy):</p>
<pre><code>import json
import os
import requests
from markdown_it import MarkdownIt
def create_article(title, access_token):
headers = {
"X-API-Access-Token": access_token,
"Content-Type": "application/json"
}
data = {
"title": title,
"body": "TEST",
"tags": "REDACTED",
"article_type": "knowledge-article",
"filter": "default"
}
json_data = json.dumps(data)
api_url = "https://api.stackoverflowteams.com/2.3/articles/add?team=[TEAM_NAME]"
response = requests.post(api_url, headers=headers, data=json_data)
print(f"API response status: {response.status_code}")
print(f"API response text: {response.text}")
return response.json()
def delete_article(access_token, artId):
headers = {
"X-API-Access-Token": access_token,
"Content-Type": "application/json"
}
data = {
"id": artId
}
json_data = json.dumps(data)
api_url = f"https://api.stackoverflowteams.com/2.3/articles/{artId}/delete?team=[TEAM_NAME]"
response = requests.delete(api_url, headers=headers, data=json_data)
print(f"API response status: {response.status_code}")
print(f"API response text: {response.text}")
return response.json()
def import_single_wiki_to_teams(input_directory, access_token, test_file):
input_file = os.path.join(input_directory, test_file)
if os.path.isfile(input_file):
with open(input_file, "r", encoding="utf-8") as f:
content = f.read()
html_content = convert_md_to_html(content)
# title = os.path.splitext(test_file)[0]
title = "TeArticle"
print(f"Title from OS is: {title!r}")
response = create_article('Test Article', access_token) # Use the title and html_content variables
print(response)
else:
print(f"File not found: {input_file}")
input_directory = PATH
access_token = [REDACTED]
test_file = "FILE_NAME"
import_single_wiki_to_teams(input_directory, access_token, test_file)
</code></pre>
https://stackapps.com/q/961134OpenAI detectorGlorfindelhttps://stackapps.com/users/340612022-12-23T20:21:25Z2026-03-09T20:13:35Z
<!-- thumbnail: https://i.sstatic.net/8Q61x.png -->
<!-- version: 0.1 -->
<!-- tag: [moderation] -->
<!-- excerpt: Adds a button to check the probability that a post was written by a bot -->
<h2>Screenshot / Code Snippet</h2>
<p><a href="https://i.sstatic.net/mDMTr.png" rel="noreferrer"><img src="https://i.sstatic.net/mDMTr.png" alt=""Detect OpenAI" link in post menu; notice with results" /></a></p>
<h2>About</h2>
<p>This script adds a link to each post on SE, revision on SE revision pages, and post Markdown views on metasmoke, to check it against <a href="https://huggingface.co/openai-detector" rel="noreferrer">Hugging Face's AI detector</a>.</p>
<p>The first click will test the Markdown text using the Hugging Face detector API for the likelihood it was created by GPT and report that as a percentage likelihood that the post is fake.</p>
<p>Lots of users and spammers edit the text provided by ChatGPT a bit, so if you click the button a second time (or use <kbd>Alt</kbd>-<kbd>Click</kbd>) an iframe to the detector demo page will open with the Markdown text pre-filled for you, so you can try some manipulations to see if the content was edited from ChatGPT source text. For example, on metasmoke it looks like:</p>
<p><a href="https://i.sstatic.net/5wyoP.gif" rel="noreferrer"><img src="https://i.sstatic.net/5wyoP.gif" alt="Animation of a post on metasmoke. First the base % FAKE is determined of 24.94%, then an iframe is opened showing that after removal of the spammer's added text the detection is 99.86% FAKE" /></a></p>
<h3>Download</h3>
<p>The script can be installed via <a href="https://github.com/Glorfindel83/SE-Userscripts/raw/master/openai-detector/openai-detector.user.js" rel="noreferrer">this link</a>; source code can be found <a href="https://github.com/Glorfindel83/SE-Userscripts/blob/master/openai-detector/openai-detector.user.js" rel="noreferrer">here</a>.</p>
<h3>Platform</h3>
<p>Tested with Violentmonkey in Firefox on macOS, but it's likely to work on all browsers and platforms. (Please let me know if it doesn't!)</p>
<h2>Contact</h2>
<p>Post a comment or answer here, or create an issue/pull request on GitHub.</p>
https://stackapps.com/q/94721JSONDecodeError: Expecting value: line 3 column 1 (char 3)Sparkling_Sayenahttps://stackapps.com/users/967522022-08-01T17:21:39Z2026-03-26T22:40:39Z
<p>I am trying the following simple code to get JSON from the Stack Exchange API and it gives me the following error:</p>
<blockquote>
<p>JSONDecodeError: Expecting value: line 3 column 1 (char 3)</p>
</blockquote>
<p>Here is my script:</p>
<pre><code>import requests
import json
url='https://api.stackexchange.com/docs/questions#order=desc&sort=activity&filter=default&site=stackoverflow&run=true'
r = requests.get(url)
r.json()
</code></pre>
https://stackapps.com/q/88929Stack Exchange One-Click Reviewsgparyanihttps://stackapps.com/users/276742021-03-22T06:21:52Z2026-02-16T00:00:45Z
<!-- version: 1.1 -->
<!-- tag: review -->
<!-- excerpt: Review items on Stack Exchange by simply clicking on the review action, rather than having to select and choose Submit -->
<h2>About</h2>
<p>The new UI for reviews introduced in early 2021 requires two clicks to submit reviews for an item: once to select the action, and a second time to submit the review. By contrast, the previous UI simply required a single click on an action button to submit a review.</p>
<p>Some users prefer the old behavior of simply having one click to submit a review. This script removes the requirement for a second click on the Submit button, and makes it so that clicking on a review action will immediately submit the review, restoring the former behavior of the old queue layout.</p>
<h3>Notes</h3>
<ul>
<li>To discourage robo-reviewing, there is a slight delay baked into the script: if you click on a review action too early, it will simply select the button without submitting the review.</li>
</ul>
<h3>Download</h3>
<p><a href="https://gitcdn.xyz/repo/gparyani/2bcc29740ab0da5fe38eff84e2a45efd/raw/d548b0b9a7a9480471d7888fa1ce64ea9462be14/oneclickreview.user.js" rel="nofollow noreferrer">Link to install the user script</a>. You will need to have a user script manager extension installed in your browser, such as Tampermonkey or Violentmonkey.</p>
<h3>Platform</h3>
<p>Tested with Tampermonkey on Microsoft Edge (new Chromium-based version) on Windows. Haven't tested with other browsers or user script managers, but should work with other platforms too.</p>
<h2>Code</h2>
<p><a href="https://gist.github.com/gparyani/2bcc29740ab0da5fe38eff84e2a45efd" rel="nofollow noreferrer">Source code</a></p>
https://stackapps.com/q/81688Why has my daily quota increased from 10k to 2 billion?Glorfindelhttps://stackapps.com/users/340612018-12-24T08:55:56Z2026-02-04T16:17:11Z
<p>I'm using the Stack Exchange API with an access token and API key, and I was just checking my remaining quota. According to the <a href="https://api.stackexchange.com/docs/throttle">documentation</a>, this should be a number (somewhat) lower than 10,000, which is consistent what I've seen in the past.</p>
<p>However, to my surprise, today it's more like the 32-bit integer maximum:</p>
<p><a href="https://i.sstatic.net/AvG3s.png" rel="noreferrer"><img src="https://i.sstatic.net/AvG3s.png" alt="enter image description here"></a></p>
<p>This happens for multiple API routes, not just for /sites. I do get occasional backoffs, which I obey to. What's going on here? Santa Exchange giving out unlimited quota as Christmas presents? It does not matter which IP address I'm calling the API from.</p>
https://stackapps.com/q/44678TrueBadges, a combination of StackExchange badges and TrueAchievementsA.Lhttps://stackapps.com/users/242662013-12-29T02:51:07Z2026-03-22T05:04:35Z
<!-- thumbnail: https://static.truebadges.com/screenshot_144_119.png -->
<!-- version: 1.0 -->
<!-- tag: badges -->
<!-- excerpt: Know the *real* value of your StackExchange badges -->
<h2>Screenshot</h2>
<p><a href="http://truebadges.com/" rel="nofollow noreferrer"><img src="https://static.truebadges.com/screenshot.png" alt="TrueBadges" />
TrueBadges</a></p>
<p>I've worked on this website since end of 2013 in my spare time. The initial goal was to <em>have fun</em> with <em>lot of data</em>.</p>
<p>The idea is to count StackExchange badges of an user in the same way as TrueAchievements does. This project has no practical use, you can view it as a fun website in order to have an overview of the efforts you put in StackExchange websites.</p>
<h2>About</h2>
<h3>TrueAchievements (TA)</h3>
<p><a href="http://www.trueachievements.com/" rel="nofollow noreferrer">TrueAchievements</a> is a website dedicated to Xbox and Windows games' achievements. Achievements are rewards given to players for realizing specific actions (complete a game, win 20 rounds in online game, etc.). Each achievement is associated with a score from <a href="http://www.trueachievements.com/a28781/stop-n-swop-achievement.htm" rel="nofollow noreferrer">0</a> to <a href="http://www.trueachievements.com/a12922/one-with-combat-achievement.htm" rel="nofollow noreferrer">300</a> (or more). The idea behind TrueAchievements is that the score can be corrected by the percentage of players having unlocked an achievement compared to the numbers of players who own a game. For example, it's easier to <a href="http://www.trueachievements.com/a21049/off-the-boat-achievement.htm" rel="nofollow noreferrer">get 5 points by starting the game GTA IV</a> than <a href="http://www.trueachievements.com/a21084/no-more-strangers-achievement.htm" rel="nofollow noreferrer">meeting all the random characters</a>. So the first achievement is worth 5 TA score and the second one is worth 13 TA score.</p>
<h3>StackExchange Badges (SEB)</h3>
<p>Badges are very similar to achievements, but they are only associated to bronze, silver or gold rank, they have no value in points.</p>
<h3>TrueBadges</h3>
<p>I want to use the same calculation in order to calculate a score based on the SEB earned by an user in all of the StackExchange websites. Note that this score is different from the reputation, even if the two scores are more or less correlated (eg. good answers give reputation and badges).</p>
<p>The value of each badge is calculated from the number of times a badge has been earned divided by the number of times the most earned badge has been earner. In other words, the rarest badges will be worth more points. The formula is still not perfect, I have to decide if I should cap score of each badge. Some badges are awarded only once, their value can be huge.</p>
<p>For each site, the website (TrueBadges) need to grab all the badges and the number of times they are awarded. Then the score of each badge can be calculated. Edit: the formula has been designed with the help of <a href="https://math.stackexchange.com/questions/630909/calculate-adjusted-reciprocal-values-from-a-sequence-of-numbers">Mathematics (Stack Exchange)</a>.</p>
<p>Once a user register to TrueBadges (the only required data is the id of the user on StackExchange), the website has to make several requests:</p>
<ol>
<li>Get the websites where the user logged in (StackOverflow, Arqade, etc.)</li>
<li>Get all the badges from the user on each site</li>
<li>Calculate the score for each badge of the user (a badge can be earned multiple times, so the value of a badge can be multiplied)</li>
<li>Calculate the score for each site</li>
<li>Calculate the total score of the user</li>
</ol>
<h3>Code</h3>
<p>I use Symfony2 (a PHP framework) and Doctrine2 (an abstraction layer for MySQL).</p>
<p>Here is the current database schema:</p>
<p><a href="https://i.sstatic.net/MB2Q9.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/MB2Q9m.png" alt="MySQL schema" /></a></p>
<h3>Status</h3>
<p>The <a href="http://truebadges.com/" rel="nofollow noreferrer">website is online</a> since beginning of 2014. <a href="http://truebadges.com/users/register/" rel="nofollow noreferrer">Registration</a> is opened and takes less than a minute.</p>
https://stackapps.com/q/37122Is there a difference between the API search and the search from within the site?James Mertzhttps://stackapps.com/users/49612012-10-15T17:17:28Z2026-03-14T23:05:10Z
<p>I'm curious if the search results from the API is calculated the same way as the searches from within the sites themselves?</p>
<p>Is there a difference between the two? If so, what are the differences?</p>
https://stackapps.com/q/35365Stacklense - Ubuntu Unity Lens to search Stack Exchange sitesStef Khttps://stackapps.com/users/116482012-07-12T00:21:20Z2026-03-15T09:37:05Z
<!-- version: 12.07.06 -->
<!-- tag: ubuntu-unity -->
<!-- excerpt: Stacklense uses Ubuntu Unity Lenses feature to search through questions titles and return results from answered, questions hosted at Stack Exchange sites. -->
<h2>Screenshot / Code Snippet</h2>
<p><img src="https://iccode.net/wp-content/uploads/2013/05/stacklense_starting.png" alt="" /></p>
<p><img src="https://iccode.net/wp-content/uploads/2013/05/stacklense_results.png" alt="" /></p>
<p>The application makes searches in question titles.</p>
<p>Please note that the lens will show only answered questions!</p>
<p>The names of the sites are usually one word, for example Ask Ubuntu becomes askubuntu, all names can be found at <a href="https://api.stackexchange.com/docs/sites#filter=default&run=true">https://api.stackexchange.com/docs/sites#filter=default&run=true</a> look for the "api_site_parameter":</p>
<p>Examples</p>
<ol>
<li><p>search for python django at Stack Overflow site:<br />
Type: <code>python django ~~stackoverflow;</code></p>
</li>
<li><p>search for ppa at Ask Ubuntu site:<br />
Type: <code>ppa ~~askubuntu;</code></p>
</li>
<li><p>search for mac os x lion at Super User site:<br />
Type: <code>mac os x lion ~~superuser;</code></p>
</li>
</ol>
<h2>About</h2>
<p>Stacklense is written with Python 2 (json, cStringIO, urllib2), using Stack Exchange API, Ubuntu Quickly workflow - platform; the code and the personal package archives are hosted at Launchpad.
It is written for people who like to mess with computers - programming languages and all the stuff Stack Exchange and Ubuntu Linux freely provide, with hope that may be useful to someone or hopefully to many out there.</p>
<h3>License</h3>
<p>Stacklense is free (as in freedom) software distributed under GNU General Public License v3.</p>
<h3>Download</h3>
<p>You can find the ppa at <a href="https://launchpad.net/%7Eiccode/+archive/staclense" rel="nofollow noreferrer">https://launchpad.net/~iccode/+archive/staclense</a>, instructions for installation at <a href="http://answers.launchpad.net/staclense/+faq/1998" rel="nofollow noreferrer">http://answers.launchpad.net/staclense/+faq/1998</a></p>
<h3>Platform</h3>
<p>Stacklense is written and tested on Ubuntu 12.04 LTS 64 bit, using the Unity Lenses feature;it will probably work on 32 bit architecture too (i386 build at ppa). There is a package for Ubuntu 12.10 available at Launchpad but not tested.</p>
<h2>Contact</h2>
<p>You can reach me using stef[at]iccode.net or at Launchpad. I am the only contributor since it is a small application but anyone can join if has ideas to implement - or wants to tweak the code.</p>
<h2>Code</h2>
<p>Python 2.X (default shipped with Ubuntu 12.04) using standard library modules only.
Ubuntu Quickly,
Stack Echange API,
Launchpad (as mentioned above to get the code or to contribute (open for all [may need to contact me first, i am not sure if i need to add you first])</p>
<h2>Made with</h2>
<p><a href="https://wiki.ubuntu.com/Quickly" rel="nofollow noreferrer">Ubuntu Quickly</a></p>
<p><a href="http://api.stackexchange.com/">Stack Exchange API</a></p>
https://stackapps.com/q/1109API Documentation and HelpKevin Montrosehttps://stackapps.com/users/22010-05-19T21:31:53Z2026-02-17T15:41:06Z
<h2>Method List</h2>
<p>All API methods can be found at <a href="https://api.stackexchange.com/docs"><code>https://api.stackexchange.com/docs</code></a>.</p>
<h3>Global Method Parameters</h3>
<p>All methods accept the following parameters:</p>
<ul>
<li><code>type=jsontext</code>: responds with mime-type <code>text/json</code>.</li>
<li><code>callback=functionname</code>: returns <a href="http://en.wikipedia.org/wiki/JSONP#JSONP" rel="nofollow noreferrer">JSON with Padding</a> instead of standard JSON</li>
<li><code>filter={filter}</code>: specifies which fields to return</li>
<li><strong>Deprecated</strong>: <code>key={key}</code>: validates this request to a specific application. (More <a href="https://stackapps.com/questions/2/getting-started-with-the-api">here</a>)
<ul>
<li>API keys should be passed as Authorization headers with a Bearer scheme, e.g. <code>Authorization: Bearer {API_KEY}</code>. (<a href="https://meta.stackexchange.com/q/417382">Read more about this change</a>)</li>
</ul>
</li>
</ul>
<p>Site specific methods also take</p>
<ul>
<li><code>site={sitename}</code>: specifies the site to query against, can be the full domain name or just part
<ul>
<li>for example <code>stackoverflow.com</code>, <code>askubuntu</code>, and <code>gaming</code> are all valid</li>
</ul>
</li>
</ul>
<h2>Authentication</h2>
<p>Updates to authentication options were released in June 2025 and are documented at <a href="https://stackapps.com/help/api-authentication"><code>https://stackapps.com/help/api-authentication</code></a></p>
<h2>Supported Sites</h2>
<p>Every site in the <a href="http://stackexchange.com/sites">Stack Exchange network</a> supports the API, with the exceptions of <a href="http://stackexchange.com/">stackexchange.com</a>, and <a href="http://area51.stackexchange.com/">Area 51</a>.</p>
<h3>Deprecated Help</h3>
<p>Old help methods can be found at <a href="http://api.stackoverflow.com/1.1/usage" rel="nofollow noreferrer"><code>http://api.stackoverflow.com/1.1/usage</code></a>. Further details may be found in the <a href="https://stackapps.com/posts/1/revisions">revision history of this post</a>.</p>
https://stackapps.com/q/251140Fast Multi Platform Data Dump Import for SQL Server (2000/2005/2008), SQLite and MySQLSky Sandershttps://stackapps.com/users/142010-04-02T23:38:52Z2026-04-06T05:57:41Z
<p><strong>UPDATE</strong>:</p>
<h2>Both soapi.info and skysanders.net have been offline for a while.</h2>
<hr>
<hr>
<p>The application readme file and hosting will be moved to <a href="http://soapi.info/tools/soddi.aspx" rel="nofollow noreferrer">http://soapi.info/tools/soddi.aspx</a>.</p>
<hr>
<p>Links are in the readme text below.</p>
<p><img src="https://i.sstatic.net/oIsxX.png" alt="??? SODDI dialog"></p>
<pre>
<strong>Stack Overflow Data Dump Import v.11</strong>
ClickOnce Installer: <a href="http://skysanders.net/tools/se/soddi/publish.htm" rel="nofollow noreferrer">http://skysanders.net/tools/se/soddi/publish.htm</a>
(c) 2010 Sky Sanders
licensed under MIT/GPL - see license.txt
msi :<a href="http://skysanders.net/files/soddi.11.msi" rel="nofollow noreferrer">http://skysanders.net/files/soddi.11.msi</a>
info:<a href="http://skysanders.net/tools/se" rel="nofollow noreferrer">http://skysanders.net/tools/se</a>
bin :<a href="http://skysanders.net/files/soddi.11.zip" rel="nofollow noreferrer">http://skysanders.net/files/soddi.11.zip</a>
src :<a href="http://bitbucket.org/bitpusher/soddi/" rel="nofollow noreferrer">http://bitbucket.org/bitpusher/soddi/</a>
SODDI is a .NET 3.5 SP1 executable written in C# that quickly and cleanly imports Stack Overflow
Data Dump XML files into [SQL Server][3] 2000/05/08, [MySQL][4] 5.1 and [SQLite][5] 3
(MySQL and SQLite drivers are included).
SODDI can be run as a command line utility or, when invoked with no arguments or GUI argument,
will present a [Windows Forms][6] interface.
<strong>Quick Start:</strong>
The quickest route to your own copy of the Stack Overflow databases is to use the ClickOnce installer,
browse to the uncompressed data dump, accept the default SQLite provider selection and click 'Import'.
<strong>USAGE:</strong>
soddi.exe source:"" target:"" [batch:5000] [split] [indices] [fulltext] [[meta] [so] [su] [sf]] [gui]
SOURCE The directory containing the individual site directories.
NOTE: do not include trailing slash in quoted path as the arg
parser will interpret it as an escaped quote and puke.
TARGET A valid ADO.NET connection string, including the provider invariant
name.
Platform specific connection string details:
SQL Server: the database must exist. Data will be loaded into tables segregated by
schema named as the site data being imported. e.g. so.Users, meta.Users.
The tables are dropped before import.
MySQL: The connection string should include server, each site's data will be loaded
into a database named as the site imported. The databases will be dropped and
recreated before import.
SQLite: The connection string should specify a directory. The data will be imported
into separate .db3 files, each named as the site imported. Existing data files
will be overwritten.
The target database/datafile/schema names can be modified by explicitly specifying
sites to import and appending the desired schema as a parameter value or editing
the Sites list item schema in the GUI.
-- OPTIONAL ARGUMENTS
SPLIT Normalize post tags by splitting the concatenated Posts.Tags field into individual
rows in a separate PostTags table.
INDICES Enables useful indexes on each table.
FULLTEXT Enables a full text index on Posts.Body and Posts.Title - SQL Server only.
BATCH Number of rows inserted in each transaction. Default 5000.
GUI Presents a Windows Forms interface. If SODDI is invoked with arguments and GUI, the
UI will be populated with the supplied arguments.
The console window will remain open to receive all debug and error output.
META|SO|SU|SF Specifies which sites to import. If none are specified, all site directories found
in SOURCE will be imported.
To specify a different target name simply treat the site name as a parameter.
e.g.
SQL Server - SO:StackOverflowData will load the data from the XXXXX SO directory
into the database specified in the connection string and the schema 'StackOverflowData'
MySQL - SO:StackOverflowData will load the data from the XXXXX SO directory
into a new database named StackOverflowData on the server specified in the connection
string.
SQLite - SO:StackOverflowData will load the data from the XXXXX SO directory into a
new db3 file named StackOverflowData.db3 in the directory specified in the connection
string.
In GUI mode you may edit the schema item in the Sites list.
Options are not case sensitive.
Example command lines.
GUI Mode:
soddi
SQLite - all sites:
soddi source:"F:\Export-030110" target:"data source=c:\temp;version=3;new=True;Provider=System.Data.SQLite"
MySQL - all sites:
soddi source:"F:\Export-030110" target:"server=localhost;user id=root;password=p@ssW0rd;Provider=MySql.Data.MySqlClient"
MySQL - Meta StackOverflow and StackOverflow data into specified databases:
soddi source:"F:\Export-030110" target:"server=localhost;user id=root;password=p@ssW0rd;Provider=MySql.Data.MySqlClient" meta:MetaDb so:SoDb
SQL Server - all sites:
soddi source:"F:\Export-030110" target:"data source=(local);initial catalog=SOData;integrated security=true;Provider=System.Data.SqlClient"
SQL Server - Stack Overflow data only (SO):
soddi source:"F:\Export-030110" target:"data source=(local);initial catalog=SOData;integrated security=true;Provider=System.Data.SqlClient" so
SQL Server - Stack Overflow data only into schema dbo:
soddi source:"F:\Export-030110" target:"data source=(local);initial catalog=SOData;integrated security=true;Provider=System.Data.SqlClient" so:dbo
SQL Server - Stack Overflow data only, split tags and add indices:
soddi source:"F:\Export-030110" target:"data source=(local);initial catalog=SOData;integrated security=true;Provider=System.Data.SqlClient" so split indices
The latest data dump can be found at
<a href="http://blog.stackoverflow.com/category/cc-wiki-dump/">http://blog.stackoverflow.com/category/cc-wiki-dump/</a>
04/01/2010 - Sky Sanders
04/09/2010 - Explicitly set platform to x86 to allow same binaries to run on x64.
</pre>