Closed jagbarcelo closed 2 years ago
El fichero guia.xml empieza con las siguientes líneas:
<?xml version='1.0' encoding='utf8'?>
<tv date="20220207210505" generator_info_url="http://wiki.xmltv.org/index.php/XMLTVFormat">
[...]
Según se indica en este hilo y según W3C parece que debería ser:
<?xml version='1.0' encoding='utf-8'?>
[...]
Vaya, gracias de nuevo por tus aportaciones 😄
Aunque uso Jellyfin, no para acceder a la TV en concreto porque no encontré forma de evitar que me haga transcode de todo.
Sé de dónde proviene el cambio, lo recuerdo bien. En un rato lo miro.
No salgo de mis sorpresas.
El motivo del cambio que provocó esto es que pasé de usar el método dump() del ElemenTree a usar el método tostring() y pasa algo muy curioso con éste último. Si le paso como argumento encoding="utf8"
el mismo ElementTree
me escribe la cabecera del xml, si le paso cualquier otra cosa, incluído encoding="utf-8"
no me la escribe y se la tengo que poner a mano.
Me di cuenta del cambio en su momento, pero como era el propio ElementTree
que estaba escribiendo la cabecera y tanto Kodi
como TiviMate
y OTT
lo entendían todo correctamente, pues lo dejé así. No me di cuenta de que Jellyfin fallaba.
Para que veas, este será el arreglo que hace que Jellyfin funcione de nuevo bien:
@@ -1400,7 +1411,8 @@ async def main():
ElTr.indent(xml)
except AttributeError:
pass
- guide = ElTr.tostring(xml, encoding="utf8")
+ guide = b"<?xml version='1.0' encoding='utf-8'?>\n"
+ guide += ElTr.tostring(xml, encoding="utf-8")
if args.guide:
with open(args.guide, "wb") as f:
Ya subí el fix, actualicé también la rama no_aiodns
.
Al final no le añado la declaración de xml a mano, había otro argumento para forzarlo:
diff --git a/tv_grab_es_movistartv b/tv_grab_es_movistartv
index adfd8bf..e8989fe 100755
--- a/tv_grab_es_movistartv
+++ b/tv_grab_es_movistartv
@@ -1401,7 +1401,7 @@ async def main():
ElTr.indent(xml)
except AttributeError:
pass
- guide = ElTr.tostring(xml, encoding="utf8")
+ guide = ElTr.tostring(xml, encoding="utf-8", xml_declaration=True)
if args.guide:
with open(args.guide, "wb") as f:
Gracias por tus aportes @jagbarcelo !
Incluso ahora que el encabezado indica 'utf-8', Jellyfin sigue sacando las mismas excepciones indicando 'utf8' (sin guión).
root@pi-u7d:/home# head guide.xml
<?xml version='1.0' encoding='utf-8'?>
<tv date="20220208144948" generator_info_url="http://wiki.xmltv.org/index.php/XMLTVFormat">
<channel id="3103.movistar.tv">
<display-name>Movistar Plus+</display-name>
</channel>
<channel id="2543.movistar.tv">
<display-name>La 1 HD</display-name>
</channel>
<channel id="4455.movistar.tv">
<display-name>La 2 HD</display-name>
root@pi-u7d:/home#
[2022-02-08 14:51:38.704 +01:00] [ERR] [81] Emby.Server.Implementations.LiveTv.LiveTvManager: Error getting programs for channel "Movistar Plus+"
System.Xml.XmlException: System does not support 'utf8' encoding. Line 1, position 31.
---> System.ArgumentException: 'utf8' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')
at System.Text.EncodingTable.InternalGetCodePageFromName(String name)
at System.Text.EncodingTable.GetCodePageFromName(String name)
at System.Text.Encoding.GetEncoding(String name)
at System.Xml.XmlTextReaderImpl.CheckEncoding(String newEncodingName)
--- End of inner exception stack trace ---
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.CheckEncoding(String newEncodingName)
at System.Xml.XmlTextReaderImpl.ParseXmlDeclaration(Boolean isTextDecl)
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlReader.ReadToDescendant(String name)
at Jellyfin.XmlTv.XmlTvReader.GetChannels()
at Emby.Server.Implementations.LiveTv.Listings.XmlTvListingsProvider.GetChannels(ListingsProviderInfo info, CancellationToken cancellationToken)
at Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV.GetEpgChannels(IListingsProvider provider, ListingsProviderInfo info, Boolean enableCache, CancellationToken cancellationToken)
at Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV.GetEpgChannelFromTunerChannel(IListingsProvider provider, ListingsProviderInfo info, ChannelInfo tunerChannel, CancellationToken cancellationToken)
at Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV.GetProgramsAsync(String channelId, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
at Emby.Server.Implementations.LiveTv.LiveTvManager.RefreshChannelsInternal(ILiveTvService service, IProgress`1 progress, CancellationToken cancellationToken)
[2022-02-08 14:51:38.708 +01:00] [INF] [81] Emby.Server.Implementations.ScheduledTasks.TaskManager: "Refresh Guide" Completed after 0 minute(s) and 3 seconds
[2022-02-08 14:51:38.711 +01:00] [INF] [81] Emby.Server.Implementations.ScheduledTasks.TaskManager: ExecuteQueuedTasks
He editado directamente el fichero guide.xml
con vi
para hacer un quick & dirty fix y le he puesto UTF-8 en mayúsculas.
He vuelto a Jellyfin y forzado la descarga de la guía y ahora sí la ha tomado bien. Tal vez el problema no era tanto que utf llevara o no llevara guión, sino más bien que estuviera o no en mayúsculas (o las 2 cosas).
Incluso ahora que el encabezado indica 'utf-8', Jellyfin sigue sacando las mismas excepciones indicando 'utf8' (sin guión).
Me cuesta creerlo. Si te digo que lo probé con Jellyfin es porque lo he hecho, estaba fallando como bien me indicaste y ha dejado de hacerlo.
Uso Jellyfin de la rama estable, 10.7:
Pero bueno, es cierto que originalmente usaba UTF-8
, y veo que no mientes, no entiendo por qué mi Jellyfin admite utf-8
y el tuyo no, pero lo he dejado como originalmente, UTF-8
.
¿Cómo tienes instalado el Jellyfin? ¿Qué versión es?
Puse los datos al principio del hilo:
Corriendo en un contenedor Docker de https://registry.hub.docker.com/r/jellyfin/jellyfin/
- Server: jellyfin
- Version: 10.7.7
- Operating System: Linux
- Architecture: X64
Todo eso corre en un Synology con DSM 7.0.1-42218 Update 2 y el paquete de Docker instalado que hace de anfitrión para el contenedor de Jellyfin.
Vaya, yo uso la rama estable pero lo buildeo localmente porque tengo un par de parches en el Jellyfin. Nada que ver con el xml este en cuestión.
¿Ahora te vuelve a funcionar todo correctamente, no?
Correcto. Después de unas horas funcionando y de dejar que Jellyfin descargara varias veces la guía, no ha saltado ninguna excepción. UTF-8 en mayúsculas soluciona el problema.
Corriendo en un contenedor Docker de https://registry.hub.docker.com/r/jellyfin/jellyfin/
Funcionando bien para la version anterior de movistar-u7d (de aproximadamente 1 mes) y con esta configuración:
Muestra los siguientes errores en el log:
Y no aparece absolutamente nada en la guía de programas, para ningún canal, en ningún día:
NOTA: Estoy corriendo la rama no_aiodns