Skip to content

Instantly share code, notes, and snippets.

@GeoffreyPlitt
Last active January 5, 2026 01:03
Show Gist options
  • Select an option

  • Save GeoffreyPlitt/9a612f3294df628022f66afd8e35ebba to your computer and use it in GitHub Desktop.

Select an option

Save GeoffreyPlitt/9a612f3294df628022f66afd8e35ebba to your computer and use it in GitHub Desktop.
Feedly Export Bookmarklet
javascript:(function() {
const stories = [];
document.querySelectorAll('article.entry').forEach(article => {
const titleLink = article.querySelector('a.EntryTitleLink');
if (!titleLink) return;
const title = titleLink.innerText.trim();
const url = titleLink.href;
const noteEl = article.querySelector('.EntryNote__description');
const note = noteEl ? noteEl.innerText.trim() : "";
const divs = Array.from(article.querySelectorAll('div'));
let summary = "";
const candidates = divs.filter(d => {
const text = d.innerText.trim();
return text.length > 30 &&
!d.querySelector('article') &&
!d.querySelector('.EntryTitleLink') &&
!d.querySelector('.EntryNote__description') &&
!d.querySelector('.EntryMetadataSource') &&
!d.querySelector('.EntryMetadataWrapper') &&
!text.includes(title.substring(0, 20));
});
if (candidates.length > 0) {
candidates.sort((a, b) => b.innerText.length - a.innerText.length);
summary = candidates[0].innerText.trim();
}
stories.push({ title, url, summary, note });
});
const output = stories.map(s => `${s.title}\n${s.url}\n${s.summary}\n${s.note}`).join('\n\n');
navigator.clipboard.writeText(output).then(() => {
alert('Extracted ' + stories.length + ' stories to clipboard.');
console.log(output);
}).catch(err => {
console.error('Failed to copy: ', err);
alert('Failed to copy to clipboard. Results logged to console.');
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment