CloudCannon / 11feed

11feed is an open-source, self-hosted, minimal RSS reader built with the static site generator 11ty.
MIT License
13 stars 3 forks source link

feed parsing errors #3

Open rdela opened 6 months ago

rdela commented 6 months ago

here are the errors that came from running a big batch of gnarly old feeds through.

maybe we could use them to test and decide what to investigate.

the CSS parsing bug is in there twice, once for https://feeds.feedburner.com/leaverou and the other for the actual feed https://lea.verou.me/feed.xml

Error: Could not parse CSS stylesheet
    at exports.createStylesheet (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js:37:21)
    at HTMLStyleElementImpl._updateAStyleBlock (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:68:5)
    at HTMLStyleElementImpl._poppedOffStackOfOpenElements (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:42:10)
    at JSDOMParse5Adapter.onItemPop (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/browser/parser/html.js:175:43)
    at Parser.onItemPop (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/parser/index.js:158:90)
    at OpenElementStack.pop (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/parser/open-element-stack.js:89:22)
    at endTagInText (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/parser/index.js:2287:20)
    at Parser._endTagOutsideForeignContent (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/parser/index.js:931:17)
    at Parser.onEndTag (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/parser/index.js:897:18)
    at Tokenizer.emitCurrentTagToken (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/tokenizer/index.js:402:26) 
.contrast-color {
  --text-shadow: 0 0 .05em black;
  --text-shadow-2: var(--text-shadow), var(--text-shadow);
  --text-shadow-4: var(--text-shadow-2), var(--text-shadow-2);
  --text-shadow-8: var(--text-shadow-4), var(--text-shadow-4);
  text-shadow: var(--text-shadow-8);
  color: white;
}

#demo {
  display: flex;
  gap: 2em;
  padding-block: 2rem;

  color-picker {
    flex: 1;

    &::part(swatch) {
      flex: 1.8;
    }
  }

  input[type=number] {
    field-sizing: content;
    background: none;
    color: inherit;
    border: .1em solid;
    border-radius: .2em;
  }

  table {
    width: auto;
    margin-bottom: 0;
  }
}

@supports (color: oklch(from red l c h)) {
  :root {
    --supports-rcs: 1;
  }

  .if-no-rcs {
    display: none;
  }

  .contrast-color {
    --l: clamp(0, (var(--l-threshold) / l - 1) * infinity, 1);
    color: oklch(from var(--color) var(--l) 0 h);
    text-shadow: none;
  }
}

Error: Could not parse CSS stylesheet
    at exports.createStylesheet (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js:37:21)
    at HTMLStyleElementImpl._updateAStyleBlock (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:68:5)
    at HTMLStyleElementImpl._childTextContentChangeSteps (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:36:12)
    at TextImpl.replaceData (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js:108:23)
    at set data [as data] (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js:26:10)
    at set data [as data] (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js:385:35)
    at collapseWhitespace (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1030:17)
    at new RootNode (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1153:3)
    at TurndownService.turndown (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1331:37)
    at safeContent (/Users/r/Documents/code/gh/rdela/eleventy/feed/feeds.js:36:26) .contrast-color { --text-shadow: 0 0 .05em black; --text-shadow-2: var(--text-shadow), var(--text-shadow); --text-shadow-4: var(--text-shadow-2), var(--text-shadow-2); --text-shadow-8: var(--text-shadow-4), var(--text-shadow-4); text-shadow: var(--text-shadow-8); color: white; } #demo { display: flex; gap: 2em; padding-block: 2rem; color-picker { flex: 1; &::part(swatch) { flex: 1.8; } } input[type=number] { field-sizing: content; background: none; color: inherit; border: .1em solid; border-radius: .2em; } table { width: auto; margin-bottom: 0; } } @supports (color: oklch(from red l c h)) { :root { --supports-rcs: 1; } .if-no-rcs { display: none; } .contrast-color { --l: clamp(0, (var(--l-threshold) / l - 1) * infinity, 1); color: oklch(from var(--color) var(--l) 0 h); text-shadow: none; } } 
Error: Could not parse CSS stylesheet
    at exports.createStylesheet (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js:37:21)
    at HTMLStyleElementImpl._updateAStyleBlock (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:68:5)
    at HTMLStyleElementImpl._childTextContentChangeSteps (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:36:12)
    at TextImpl.replaceData (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js:108:23)
    at set data [as data] (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js:26:10)
    at set data [as data] (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js:385:35)
    at collapseWhitespace (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1036:25)
    at new RootNode (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1153:3)
    at TurndownService.turndown (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1331:37)
    at safeContent (/Users/r/Documents/code/gh/rdela/eleventy/feed/feeds.js:36:26) .contrast-color { --text-shadow: 0 0 .05em black; --text-shadow-2: var(--text-shadow), var(--text-shadow); --text-shadow-4: var(--text-shadow-2), var(--text-shadow-2); --text-shadow-8: var(--text-shadow-4), var(--text-shadow-4); text-shadow: var(--text-shadow-8); color: white; } #demo { display: flex; gap: 2em; padding-block: 2rem; color-picker { flex: 1; &::part(swatch) { flex: 1.8; } } input[type=number] { field-sizing: content; background: none; color: inherit; border: .1em solid; border-radius: .2em; } table { width: auto; margin-bottom: 0; } } @supports (color: oklch(from red l c h)) { :root { --supports-rcs: 1; } .if-no-rcs { display: none; } .contrast-color { --l: clamp(0, (var(--l-threshold) / l - 1) * infinity, 1); color: oklch(from var(--color) var(--l) 0 h); text-shadow: none; } }
Processing https://lea.verou.me/feed.xml

Error: Could not parse CSS stylesheet
    at exports.createStylesheet (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js:37:21)
    at HTMLStyleElementImpl._updateAStyleBlock (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:68:5)
    at HTMLStyleElementImpl._poppedOffStackOfOpenElements (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:42:10)
    at JSDOMParse5Adapter.onItemPop (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/browser/parser/html.js:175:43)
    at Parser.onItemPop (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/parser/index.js:158:90)
    at OpenElementStack.pop (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/parser/open-element-stack.js:89:22)
    at endTagInText (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/parser/index.js:2287:20)
    at Parser._endTagOutsideForeignContent (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/parser/index.js:931:17)
    at Parser.onEndTag (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/parser/index.js:897:18)
    at Tokenizer.emitCurrentTagToken (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/parse5/dist/cjs/tokenizer/index.js:402:26) 
.contrast-color {
  --text-shadow: 0 0 .05em black;
  --text-shadow-2: var(--text-shadow), var(--text-shadow);
  --text-shadow-4: var(--text-shadow-2), var(--text-shadow-2);
  --text-shadow-8: var(--text-shadow-4), var(--text-shadow-4);
  text-shadow: var(--text-shadow-8);
  color: white;
}

#demo {
  display: flex;
  gap: 2em;
  padding-block: 2rem;

  color-picker {
    flex: 1;

    &::part(swatch) {
      flex: 1.8;
    }
  }

  input[type=number] {
    field-sizing: content;
    background: none;
    color: inherit;
    border: .1em solid;
    border-radius: .2em;
  }

  table {
    width: auto;
    margin-bottom: 0;
  }
}

@supports (color: oklch(from red l c h)) {
  :root {
    --supports-rcs: 1;
  }

  .if-no-rcs {
    display: none;
  }

  .contrast-color {
    --l: clamp(0, (var(--l-threshold) / l - 1) * infinity, 1);
    color: oklch(from var(--color) var(--l) 0 h);
    text-shadow: none;
  }
}
Error: Could not parse CSS stylesheet
    at exports.createStylesheet (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js:37:21)
    at HTMLStyleElementImpl._updateAStyleBlock (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:68:5)
    at HTMLStyleElementImpl._childTextContentChangeSteps (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:36:12)
    at TextImpl.replaceData (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js:108:23)
    at set data [as data] (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js:26:10)
    at set data [as data] (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js:385:35)
    at collapseWhitespace (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1030:17)
    at new RootNode (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1153:3)
    at TurndownService.turndown (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1331:37)
    at safeContent (/Users/r/Documents/code/gh/rdela/eleventy/feed/feeds.js:36:26) .contrast-color { --text-shadow: 0 0 .05em black; --text-shadow-2: var(--text-shadow), var(--text-shadow); --text-shadow-4: var(--text-shadow-2), var(--text-shadow-2); --text-shadow-8: var(--text-shadow-4), var(--text-shadow-4); text-shadow: var(--text-shadow-8); color: white; } #demo { display: flex; gap: 2em; padding-block: 2rem; color-picker { flex: 1; &::part(swatch) { flex: 1.8; } } input[type=number] { field-sizing: content; background: none; color: inherit; border: .1em solid; border-radius: .2em; } table { width: auto; margin-bottom: 0; } } @supports (color: oklch(from red l c h)) { :root { --supports-rcs: 1; } .if-no-rcs { display: none; } .contrast-color { --l: clamp(0, (var(--l-threshold) / l - 1) * infinity, 1); color: oklch(from var(--color) var(--l) 0 h); text-shadow: none; } } 
Error: Could not parse CSS stylesheet
    at exports.createStylesheet (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js:37:21)
    at HTMLStyleElementImpl._updateAStyleBlock (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:68:5)
    at HTMLStyleElementImpl._childTextContentChangeSteps (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:36:12)
    at TextImpl.replaceData (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js:108:23)
    at set data [as data] (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js:26:10)
    at set data [as data] (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js:385:35)
    at collapseWhitespace (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1036:25)
    at new RootNode (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1153:3)
    at TurndownService.turndown (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@joplin/turndown/lib/turndown.cjs.js:1331:37)
    at safeContent (/Users/r/Documents/code/gh/rdela/eleventy/feed/feeds.js:36:26) .contrast-color { --text-shadow: 0 0 .05em black; --text-shadow-2: var(--text-shadow), var(--text-shadow); --text-shadow-4: var(--text-shadow-2), var(--text-shadow-2); --text-shadow-8: var(--text-shadow-4), var(--text-shadow-4); text-shadow: var(--text-shadow-8); color: white; } #demo { display: flex; gap: 2em; padding-block: 2rem; color-picker { flex: 1; &::part(swatch) { flex: 1.8; } } input[type=number] { field-sizing: content; background: none; color: inherit; border: .1em solid; border-radius: .2em; } table { width: auto; margin-bottom: 0; } } @supports (color: oklch(from red l c h)) { :root { --supports-rcs: 1; } .if-no-rcs { display: none; } .contrast-color { --l: clamp(0, (var(--l-threshold) / l - 1) * infinity, 1); color: oklch(from var(--color) var(--l) 0 h); text-shadow: none; } }
Processing https://feeds.feedburner.com/leaverou

Processing https://blog.alfredapp.com/feed/
Error: Unquoted attribute value
Line: 0
Column: 27
Char: e
    at error (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/sax/lib/sax.js:652:10)
    at strictFail (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/sax/lib/sax.js:678:7)
    at SAXParser.write (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/sax/lib/sax.js:1368:13)
    at exports.Parser.Parser.parseString (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/xml2js/lib/parser.js:327:31)
    at Parser.parseString (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/xml2js/lib/parser.js:5:59)
    at /Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/rss-parser/lib/parser.js:33:22
    at new Promise (<anonymous>)
    at Parser.parseString (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/rss-parser/lib/parser.js:32:16)
    at parseFeed (/Users/r/Documents/code/gh/rdela/eleventy/feed/feeds.js:148:5)
    at async Promise.allSettled (index 84)

Processing https://zinasaunders.blogspot.com//feeds/posts/default
Error: Invalid character in tag name
Line: 40
Column: 121
Char: ;
    at error (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/sax/lib/sax.js:652:10)
    at strictFail (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/sax/lib/sax.js:678:7)
    at SAXParser.write (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/sax/lib/sax.js:1284:17)
    at exports.Parser.Parser.parseString (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/xml2js/lib/parser.js:327:31)
    at Parser.parseString (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/xml2js/lib/parser.js:5:59)
    at /Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/rss-parser/lib/parser.js:33:22
    at new Promise (<anonymous>)
    at Parser.parseString (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/rss-parser/lib/parser.js:32:16)
    at parseFeed (/Users/r/Documents/code/gh/rdela/eleventy/feed/feeds.js:148:5)
    at async Promise.allSettled (index 135)

Processing https://objective-see.com/rss.xml
Error: Attribute without value
Line: 54
Column: 17
Char: s
    at error (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/sax/lib/sax.js:652:10)
    at strictFail (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/sax/lib/sax.js:678:7)
    at SAXParser.write (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/sax/lib/sax.js:1341:13)
    at exports.Parser.Parser.parseString (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/xml2js/lib/parser.js:327:31)
    at Parser.parseString (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/xml2js/lib/parser.js:5:59)
    at /Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/rss-parser/lib/parser.js:33:22
    at new Promise (<anonymous>)
    at Parser.parseString (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/rss-parser/lib/parser.js:32:16)
    at parseFeed (/Users/r/Documents/code/gh/rdela/eleventy/feed/feeds.js:148:5)
    at async Promise.allSettled (index 153)

Error: Bad response for https://www.hackingwithswift.com/articles/rss (403): Forbidden
    at RemoteAssetCache.fetch (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/@11ty/eleventy-fetch/src/RemoteAssetCache.js:69:11)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async run (/Users/r/Documents/code/gh/rdela/eleventy/feed/node_modules/p-queue/dist/index.js:163:29) {
  [cause]: Response {
    size: 0,
    timeout: 0,
    [Symbol(Body internals)]: { body: [Gunzip], disturbed: false, error: null },
    [Symbol(Response internals)]: {
      url: 'https://www.hackingwithswift.com/articles/rss',
      status: 403,
      statusText: 'Forbidden',
      headers: [Headers],
      counter: 0
    }
  }
}
Could not reach https://www.hackingwithswift.com/articles/rss
rdela commented 6 months ago

code https://github.com/rdela/11feed/tree/ricky

feed list (OPML export from feedbin) https://github.com/rdela/11feed/blob/ricky/src/_feeds/ricky.xml