[Bug]: Issues automatically downloading from some RSS feeds #1175

Closed
opened 2026-04-24 23:34:54 +02:00 by adam · 4 comments
Owner

Originally created by @revilo951 on GitHub (Jun 6, 2023).

Describe the issue

Feeds like this one don't automatically download new episodes, but manually searching and selecting the episode, it will download fine.

https://latenightlinux.com/feed/mp3

Seems to pass an online validator:

https://www.castfeedvalidator.com/validate.php?url=https://latenightlinux.com/feed/mp3

Steps to reproduce the issue

  1. Add https://latenightlinux.com/feed/mp3 to ABS, set to automatically download.
  2. Wait :)

Audiobookshelf version

v2.2.22

How are you running audiobookshelf?

Docker

Originally created by @revilo951 on GitHub (Jun 6, 2023). ### Describe the issue Feeds like this one don't automatically download new episodes, but manually searching and selecting the episode, it will download fine. https://latenightlinux.com/feed/mp3 Seems to pass an online validator: https://www.castfeedvalidator.com/validate.php?url=https://latenightlinux.com/feed/mp3 ### Steps to reproduce the issue 1. Add https://latenightlinux.com/feed/mp3 to ABS, set to automatically download. 2. Wait :) ### Audiobookshelf version v2.2.22 ### How are you running audiobookshelf? Docker
adam added the bug label 2026-04-24 23:34:54 +02:00
adam closed this issue 2026-04-24 23:34:54 +02:00
Author
Owner

@advplyr commented on GitHub (Jun 6, 2023):

It is the same function used to manually download and to automatically download. Can you check what the error is in the docker logs?

Can you share your schedule settings for that podcast?

image

@advplyr commented on GitHub (Jun 6, 2023): It is the same function used to manually download and to automatically download. Can you check what the error is in the docker logs? Can you share your schedule settings for that podcast? ![image](https://github.com/advplyr/audiobookshelf/assets/67830747/05724dc4-1cee-4eb2-a141-8e829db7f010)
Author
Owner

@revilo951 commented on GitHub (Jun 7, 2023):

Schedule had disabled itself due to failing too many times. I've re-enabled it, and will keep an eye on it, and report back.

Logs from when I initially noticed the issue below:

audiobookshelf  | [2023-04-11 03:00:00] INFO: [PodcastManager] runEpisodeCheck: "Linux After Dark" | Last check: Mon Apr 10 2023 23:00:01 GMT+0000 (Coordinated Universal Time) | Latest episode pubDate: Fri Mar 31 2023 14:56:39 GMT+0000 (Coordinated Universal Time)
audiobookshelf  | [2023-04-11 03:00:05] ERROR: [podcastUtils] getPodcastFeed Error AxiosError: getaddrinfo EAI_AGAIN linuxafterdark.net
audiobookshelf  |     at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:109:26) {
audiobookshelf  |   hostname: 'linuxafterdark.net',
audiobookshelf  |   syscall: 'getaddrinfo',
audiobookshelf  |   code: 'EAI_AGAIN',
audiobookshelf  |   errno: -3001,
audiobookshelf  |   config: {
audiobookshelf  |     transitional: {
audiobookshelf  |       silentJSONParsing: true,
audiobookshelf  |       forcedJSONParsing: true,
audiobookshelf  |       clarifyTimeoutError: false
audiobookshelf  |     },
audiobookshelf  |     adapter: [Function: httpAdapter],
audiobookshelf  |     transformRequest: [ [Function: transformRequest] ],
audiobookshelf  |     transformResponse: [ [Function: transformResponse] ],
audiobookshelf  |     timeout: 6000,
audiobookshelf  |     xsrfCookieName: 'XSRF-TOKEN',
audiobookshelf  |     xsrfHeaderName: 'X-XSRF-TOKEN',
audiobookshelf  |     maxContentLength: -1,
audiobookshelf  |     maxBodyLength: -1,
audiobookshelf  |     env: { FormData: [Function] },
audiobookshelf  |     validateStatus: [Function: validateStatus],
audiobookshelf  |     headers: {
audiobookshelf  |       Accept: 'application/json, text/plain, */*',
audiobookshelf  |       'User-Agent': 'axios/0.27.2'
audiobookshelf  |     },
audiobookshelf  |     responseType: 'arraybuffer',
audiobookshelf  |     method: 'get',
audiobookshelf  |     url: 'https://linuxafterdark.net/feed/podcast',
audiobookshelf  |     data: undefined
audiobookshelf  |   },
audiobookshelf  |   request: <ref *1> Writable {
audiobookshelf  |     _writableState: WritableState {
audiobookshelf  |       objectMode: false,
audiobookshelf  |       highWaterMark: 16384,
audiobookshelf  |       finalCalled: false,
audiobookshelf  |       needDrain: false,
audiobookshelf  |       ending: false,
audiobookshelf  |       ended: false,
audiobookshelf  |       finished: false,
audiobookshelf  |       destroyed: false,
audiobookshelf  |       decodeStrings: true,
audiobookshelf  |       defaultEncoding: 'utf8',
audiobookshelf  |       length: 0,
audiobookshelf  |       writing: false,
audiobookshelf  |       corked: 0,
audiobookshelf  |       sync: true,
audiobookshelf  |       bufferProcessing: false,
audiobookshelf  |       onwrite: [Function: bound onwrite],
audiobookshelf  |       writecb: null,
audiobookshelf  |       writelen: 0,
audiobookshelf  |       afterWriteTickInfo: null,
audiobookshelf  |       buffered: [],
audiobookshelf  |       bufferedIndex: 0,
audiobookshelf  |       allBuffers: true,
audiobookshelf  |       allNoop: true,
audiobookshelf  |       pendingcb: 0,
audiobookshelf  |       constructed: true,
audiobookshelf  |       prefinished: false,
audiobookshelf  |       errorEmitted: false,
audiobookshelf  |       emitClose: true,
audiobookshelf  |       autoDestroy: true,
audiobookshelf  |       errored: null,
audiobookshelf  |       closed: false,
audiobookshelf  |       closeEmitted: false,
audiobookshelf  |       [Symbol(kOnFinished)]: []
audiobookshelf  |     },
audiobookshelf  |     _events: [Object: null prototype] {
audiobookshelf  |       response: [Function: handleResponse],
audiobookshelf  |       error: [Function: handleRequestError],
audiobookshelf  |       socket: [Array]
audiobookshelf  |     },
audiobookshelf  |     _eventsCount: 3,
audiobookshelf  |     _maxListeners: undefined,
audiobookshelf  |     _options: {
audiobookshelf  |       maxRedirects: 21,
audiobookshelf  |       maxBodyLength: 10485760,
audiobookshelf  |       protocol: 'https:',
audiobookshelf  |       path: '/feed/podcast',
audiobookshelf  |       method: 'GET',
audiobookshelf  |       headers: [Object],
audiobookshelf  |       agent: undefined,
audiobookshelf  |       agents: [Object],
audiobookshelf  |       auth: undefined,
audiobookshelf  |       hostname: 'linuxafterdark.net',
audiobookshelf  |       port: null,
audiobookshelf  |       nativeProtocols: [Object],
audiobookshelf  |       pathname: '/feed/podcast'
audiobookshelf  |     },
audiobookshelf  |     _ended: true,
audiobookshelf  |     _ending: true,
audiobookshelf  |     _redirectCount: 0,
audiobookshelf  |     _redirects: [],
audiobookshelf  |     _requestBodyLength: 0,
audiobookshelf  |     _requestBodyBuffers: [],
audiobookshelf  |     _onNativeResponse: [Function (anonymous)],
audiobookshelf  |     _currentRequest: ClientRequest {
audiobookshelf  |       _events: [Object: null prototype],
audiobookshelf  |       _eventsCount: 7,
audiobookshelf  |       _maxListeners: undefined,
audiobookshelf  |       outputData: [],
audiobookshelf  |       outputSize: 0,
audiobookshelf  |       writable: true,
audiobookshelf  |       destroyed: false,
audiobookshelf  |       _last: true,
audiobookshelf  |       chunkedEncoding: false,
audiobookshelf  |       shouldKeepAlive: false,
audiobookshelf  |       maxRequestsOnConnectionReached: false,
audiobookshelf  |       _defaultKeepAlive: true,
audiobookshelf  |       useChunkedEncodingByDefault: false,
audiobookshelf  |       sendDate: false,
audiobookshelf  |       _removedConnection: false,
audiobookshelf  |       _removedContLen: false,
audiobookshelf  |       _removedTE: false,
audiobookshelf  |       strictContentLength: false,
audiobookshelf  |       _contentLength: 0,
audiobookshelf  |       _hasBody: true,
audiobookshelf  |       _trailer: '',
audiobookshelf  |       finished: true,
audiobookshelf  |       _headerSent: true,
audiobookshelf  |       _closed: false,
audiobookshelf  |       socket: [TLSSocket],
audiobookshelf  |       _header: 'GET /feed/podcast HTTP/1.1\r\n' +
audiobookshelf  |         'Accept: application/json, text/plain, */*\r\n' +
audiobookshelf  |         'User-Agent: axios/0.27.2\r\n' +
audiobookshelf  |         'Host: linuxafterdark.net\r\n' +
audiobookshelf  |         'Connection: close\r\n' +
audiobookshelf  |         '\r\n',
audiobookshelf  |       _keepAliveTimeout: 0,
audiobookshelf  |       _onPendingData: [Function: nop],
audiobookshelf  |       agent: [Agent],
audiobookshelf  |       socketPath: undefined,
audiobookshelf  |       method: 'GET',
audiobookshelf  |       maxHeaderSize: undefined,
audiobookshelf  |       insecureHTTPParser: undefined,
audiobookshelf  |       path: '/feed/podcast',
audiobookshelf  |       _ended: false,
audiobookshelf  |       res: null,
audiobookshelf  |       aborted: false,
audiobookshelf  |       timeoutCb: null,
audiobookshelf  |       upgradeOrConnect: false,
audiobookshelf  |       parser: null,
audiobookshelf  |       maxHeadersCount: null,
audiobookshelf  |       reusedSocket: false,
audiobookshelf  |       host: 'linuxafterdark.net',
audiobookshelf  |       protocol: 'https:',
audiobookshelf  |       _redirectable: [Circular *1],
audiobookshelf  |       [Symbol(kCapture)]: false,
audiobookshelf  |       [Symbol(kBytesWritten)]: 0,
audiobookshelf  |       [Symbol(kEndCalled)]: true,
audiobookshelf  |       [Symbol(kNeedDrain)]: false,
audiobookshelf  |       [Symbol(corked)]: 0,
audiobookshelf  |       [Symbol(kOutHeaders)]: [Object: null prototype],
audiobookshelf  |       [Symbol(kUniqueHeaders)]: null
audiobookshelf  |     },
audiobookshelf  |     _currentUrl: 'https://linuxafterdark.net/feed/podcast',
audiobookshelf  |     _timeout: null,
audiobookshelf  |     [Symbol(kCapture)]: false
audiobookshelf  |   }
audiobookshelf  | } (podcastUtils.js:221)
audiobookshelf  | [2023-04-11 03:00:05] ERROR: [PodcastManager] checkPodcastForNewEpisodes invalid feed payload for Linux After Dark (ID: li_oetx5xechnjkqp50f0) false (PodcastManager.js:276)
@revilo951 commented on GitHub (Jun 7, 2023): Schedule had disabled itself due to failing too many times. I've re-enabled it, and will keep an eye on it, and report back. Logs from when I initially noticed the issue below: ``` audiobookshelf | [2023-04-11 03:00:00] INFO: [PodcastManager] runEpisodeCheck: "Linux After Dark" | Last check: Mon Apr 10 2023 23:00:01 GMT+0000 (Coordinated Universal Time) | Latest episode pubDate: Fri Mar 31 2023 14:56:39 GMT+0000 (Coordinated Universal Time) audiobookshelf | [2023-04-11 03:00:05] ERROR: [podcastUtils] getPodcastFeed Error AxiosError: getaddrinfo EAI_AGAIN linuxafterdark.net audiobookshelf | at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:109:26) { audiobookshelf | hostname: 'linuxafterdark.net', audiobookshelf | syscall: 'getaddrinfo', audiobookshelf | code: 'EAI_AGAIN', audiobookshelf | errno: -3001, audiobookshelf | config: { audiobookshelf | transitional: { audiobookshelf | silentJSONParsing: true, audiobookshelf | forcedJSONParsing: true, audiobookshelf | clarifyTimeoutError: false audiobookshelf | }, audiobookshelf | adapter: [Function: httpAdapter], audiobookshelf | transformRequest: [ [Function: transformRequest] ], audiobookshelf | transformResponse: [ [Function: transformResponse] ], audiobookshelf | timeout: 6000, audiobookshelf | xsrfCookieName: 'XSRF-TOKEN', audiobookshelf | xsrfHeaderName: 'X-XSRF-TOKEN', audiobookshelf | maxContentLength: -1, audiobookshelf | maxBodyLength: -1, audiobookshelf | env: { FormData: [Function] }, audiobookshelf | validateStatus: [Function: validateStatus], audiobookshelf | headers: { audiobookshelf | Accept: 'application/json, text/plain, */*', audiobookshelf | 'User-Agent': 'axios/0.27.2' audiobookshelf | }, audiobookshelf | responseType: 'arraybuffer', audiobookshelf | method: 'get', audiobookshelf | url: 'https://linuxafterdark.net/feed/podcast', audiobookshelf | data: undefined audiobookshelf | }, audiobookshelf | request: <ref *1> Writable { audiobookshelf | _writableState: WritableState { audiobookshelf | objectMode: false, audiobookshelf | highWaterMark: 16384, audiobookshelf | finalCalled: false, audiobookshelf | needDrain: false, audiobookshelf | ending: false, audiobookshelf | ended: false, audiobookshelf | finished: false, audiobookshelf | destroyed: false, audiobookshelf | decodeStrings: true, audiobookshelf | defaultEncoding: 'utf8', audiobookshelf | length: 0, audiobookshelf | writing: false, audiobookshelf | corked: 0, audiobookshelf | sync: true, audiobookshelf | bufferProcessing: false, audiobookshelf | onwrite: [Function: bound onwrite], audiobookshelf | writecb: null, audiobookshelf | writelen: 0, audiobookshelf | afterWriteTickInfo: null, audiobookshelf | buffered: [], audiobookshelf | bufferedIndex: 0, audiobookshelf | allBuffers: true, audiobookshelf | allNoop: true, audiobookshelf | pendingcb: 0, audiobookshelf | constructed: true, audiobookshelf | prefinished: false, audiobookshelf | errorEmitted: false, audiobookshelf | emitClose: true, audiobookshelf | autoDestroy: true, audiobookshelf | errored: null, audiobookshelf | closed: false, audiobookshelf | closeEmitted: false, audiobookshelf | [Symbol(kOnFinished)]: [] audiobookshelf | }, audiobookshelf | _events: [Object: null prototype] { audiobookshelf | response: [Function: handleResponse], audiobookshelf | error: [Function: handleRequestError], audiobookshelf | socket: [Array] audiobookshelf | }, audiobookshelf | _eventsCount: 3, audiobookshelf | _maxListeners: undefined, audiobookshelf | _options: { audiobookshelf | maxRedirects: 21, audiobookshelf | maxBodyLength: 10485760, audiobookshelf | protocol: 'https:', audiobookshelf | path: '/feed/podcast', audiobookshelf | method: 'GET', audiobookshelf | headers: [Object], audiobookshelf | agent: undefined, audiobookshelf | agents: [Object], audiobookshelf | auth: undefined, audiobookshelf | hostname: 'linuxafterdark.net', audiobookshelf | port: null, audiobookshelf | nativeProtocols: [Object], audiobookshelf | pathname: '/feed/podcast' audiobookshelf | }, audiobookshelf | _ended: true, audiobookshelf | _ending: true, audiobookshelf | _redirectCount: 0, audiobookshelf | _redirects: [], audiobookshelf | _requestBodyLength: 0, audiobookshelf | _requestBodyBuffers: [], audiobookshelf | _onNativeResponse: [Function (anonymous)], audiobookshelf | _currentRequest: ClientRequest { audiobookshelf | _events: [Object: null prototype], audiobookshelf | _eventsCount: 7, audiobookshelf | _maxListeners: undefined, audiobookshelf | outputData: [], audiobookshelf | outputSize: 0, audiobookshelf | writable: true, audiobookshelf | destroyed: false, audiobookshelf | _last: true, audiobookshelf | chunkedEncoding: false, audiobookshelf | shouldKeepAlive: false, audiobookshelf | maxRequestsOnConnectionReached: false, audiobookshelf | _defaultKeepAlive: true, audiobookshelf | useChunkedEncodingByDefault: false, audiobookshelf | sendDate: false, audiobookshelf | _removedConnection: false, audiobookshelf | _removedContLen: false, audiobookshelf | _removedTE: false, audiobookshelf | strictContentLength: false, audiobookshelf | _contentLength: 0, audiobookshelf | _hasBody: true, audiobookshelf | _trailer: '', audiobookshelf | finished: true, audiobookshelf | _headerSent: true, audiobookshelf | _closed: false, audiobookshelf | socket: [TLSSocket], audiobookshelf | _header: 'GET /feed/podcast HTTP/1.1\r\n' + audiobookshelf | 'Accept: application/json, text/plain, */*\r\n' + audiobookshelf | 'User-Agent: axios/0.27.2\r\n' + audiobookshelf | 'Host: linuxafterdark.net\r\n' + audiobookshelf | 'Connection: close\r\n' + audiobookshelf | '\r\n', audiobookshelf | _keepAliveTimeout: 0, audiobookshelf | _onPendingData: [Function: nop], audiobookshelf | agent: [Agent], audiobookshelf | socketPath: undefined, audiobookshelf | method: 'GET', audiobookshelf | maxHeaderSize: undefined, audiobookshelf | insecureHTTPParser: undefined, audiobookshelf | path: '/feed/podcast', audiobookshelf | _ended: false, audiobookshelf | res: null, audiobookshelf | aborted: false, audiobookshelf | timeoutCb: null, audiobookshelf | upgradeOrConnect: false, audiobookshelf | parser: null, audiobookshelf | maxHeadersCount: null, audiobookshelf | reusedSocket: false, audiobookshelf | host: 'linuxafterdark.net', audiobookshelf | protocol: 'https:', audiobookshelf | _redirectable: [Circular *1], audiobookshelf | [Symbol(kCapture)]: false, audiobookshelf | [Symbol(kBytesWritten)]: 0, audiobookshelf | [Symbol(kEndCalled)]: true, audiobookshelf | [Symbol(kNeedDrain)]: false, audiobookshelf | [Symbol(corked)]: 0, audiobookshelf | [Symbol(kOutHeaders)]: [Object: null prototype], audiobookshelf | [Symbol(kUniqueHeaders)]: null audiobookshelf | }, audiobookshelf | _currentUrl: 'https://linuxafterdark.net/feed/podcast', audiobookshelf | _timeout: null, audiobookshelf | [Symbol(kCapture)]: false audiobookshelf | } audiobookshelf | } (podcastUtils.js:221) audiobookshelf | [2023-04-11 03:00:05] ERROR: [PodcastManager] checkPodcastForNewEpisodes invalid feed payload for Linux After Dark (ID: li_oetx5xechnjkqp50f0) false (PodcastManager.js:276) ```
Author
Owner

@bboysoulcn commented on GitHub (Jun 16, 2023):

I use http proxy

AxiosError: write EPROTO 140570487950128:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:331:

@bboysoulcn commented on GitHub (Jun 16, 2023): I use http proxy AxiosError: write EPROTO 140570487950128:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:331:
Author
Owner

@revilo951 commented on GitHub (Jun 19, 2023):

For me, this issue is no longer present.

@revilo951 commented on GitHub (Jun 19, 2023): For me, this issue is no longer present.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf#1175