Argus-TV Guide Enhancer

ChrisRichner
Posts: 42
Joined: Tue Dec 25, 2012 11:16 am
Location: Lucerne, Switzerland
Contact:

Re: Argus-TV Guide Enhancer

Post by ChrisRichner » Wed May 13, 2015 10:41 pm

Hi tripkip

You're right. It's odd to run one extra service on the machine only to enrich the EPG data. So much overhead, right?

So which workflows in the ARGUS-TV application should the enricher be a part of?

- Importing EPG Data
- Create or edit Schedules

One way to extend ARGUS-TV with new functionality is to support (discover,load,execute) Add-ins that can opt-in into the workflows they're interested in to extend. But for that approach to work ARGUS-TV must provide the Add-In feature. Once the SDK is in place and working the whole product becomes easily extendable for third parties. This in turn could make the application more appealing to users.. I've consider this a win-win :D

Did your thoughts go into the same direction?
Last edited by ChrisRichner on Wed May 13, 2015 11:08 pm, edited 1 time in total.

Christoph21x
Posts: 1070
Joined: Wed Oct 19, 2011 9:39 am
Location: Berne / Switzerland

Re: Argus-TV Guide Enhancer

Post by Christoph21x » Wed May 13, 2015 10:44 pm

Let me add one thought of dot-i, which he responded to my thoughts with the Argus2LightsOut Service:
- Let's not forget, Argus shall be or become a OS-independent application.

For "ATV2LO" this was a killer - Guide Enricher is another story, would be worth for any OS, but let's not forget the work to get this..

Greetz - Chris
"One must still have chaos within oneself, to give birth to a dancing star." (F. Nietzsche)

ChrisRichner
Posts: 42
Joined: Tue Dec 25, 2012 11:16 am
Location: Lucerne, Switzerland
Contact:

Re: Argus-TV Guide Enhancer

Post by ChrisRichner » Wed May 13, 2015 11:11 pm

Thanks for sharing this insight with us. In these days the .net runtime and tooling starts to be cross platform (Windows, Linux and Mac OS X). The Addins themselves should only depend on .net and the ARGUS-TV SDK, right?

User avatar
tripkip
Posts: 29
Joined: Mon Feb 09, 2015 4:28 pm

Re: Argus-TV Guide Enhancer

Post by tripkip » Thu May 14, 2015 11:06 am

IMO the best fit for ATVGE would be where Argus TV imports the xmltv data into the EPG database. Not as an Add-in but really part of the ATV core code.
Here ATGVE can scrape the EPG data from the XML and enrich other data and store it directly in Argus TV's EPG database:
- IMDB ID
- Movie Year
- Director
- Cast
- Season #
- Episode #
- Genre

SQLDBA
Posts: 37
Joined: Tue Aug 27, 2013 4:55 pm

Re: Argus-TV Guide Enhancer

Post by SQLDBA » Fri Jul 31, 2015 5:18 pm

Has there been any consideration to adding a configuration option that allows for enriching ALL EPG data and not just scheduled recordings? I've had to switch to using EPG data pulled down OTA and it's pretty sparse. I get ~30 channels and ~2 days of EPG data at a time so I don't think it's a lot of overhead to enrich data once a day, especially if there's caching of tvdb data on the local system.

I could see this as OFF by default but enabled via the XML config.

SQLDBA
Posts: 37
Joined: Tue Aug 27, 2013 4:55 pm

Re: Argus-TV Guide Enhancer

Post by SQLDBA » Sun Aug 02, 2015 11:34 pm

One more suggestion: a fuzzy match method. I'm finding that some shows just don't match using any of the existing methods. For example, here's the description of The Tonight Show With Jimmy Fallon from the OTA EPG data:
Actor Kevin Bacon; TV personality Mel B.; comic Russell Howard.
The description for the episode in TheTvDb is similar:
Kevin Bacon, Mel B, Russell Howard
Easy for a human to spot and see that it's the same episode, not so much for the existing algorithms. I've been playing around with some fuzzy matching and I think this would make a good candidate for another match type. Using a simple example from http://fuzzystringmatching.codeplex.com/ the TvDb episode comes up as the closest match of all the episodes in the series. I've played around with a few other shows in my EPG and found that using the first 75-100 characters seems to produce the best results.

I've just been playing around with this in PowerShell to do a proof of concept; my next step is to grab the code, add a fuzzy match method, and create a local build to if it works out against a larger number of shows.

bef5000
Posts: 3
Joined: Tue Aug 04, 2015 3:42 am

Re: Argus-TV Guide Enhancer

Post by bef5000 » Tue Aug 04, 2015 3:53 am

sgibbers17 wrote:I just installed the newest version and the default language is still overridden be the un-commented

Code: Select all

<add key="TvDbLanguage" value="de"/>
I have tried to comment that line and changing it to "en" but I am still getting German enhancements.

Here is my current .config file.

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="seriesMapping" type="GuideEnricher.Config.SeriesNameMapsSection, GuideEnricherService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true"/>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    <section name="MatchMethodsSection" type="GuideEnricher.Config.MatchMethodsSection, GuideEnricherService"/>
  </configSections>
  <!--
      This section allows you to create mappings from names in the 
      guide data (i.e., SchedulesDirect) to names in thetvdb.com.
      
      You need this because the names are not always equal.  It comes
      in handy for shows that have the same name a really old shows....
      Like Chase on NBC needs to have a mapping to Chase (2010) to help 
      this tool find the proper series.

      Use the logs to help debug.

      If a regular name mapping does not work, you can use thetvdb.com
      show ID as a direct map as shown with $..! My Dad Says below.
      
      Also, you can use regular expressions to handle schedulesDirectNaming
      problems for series names that occasionally have too much information 
      in it.  The third example shows the use of a regex to tvdb.com name.
      The fourth example shows using a regex to tvdb.com id

      For shows that you record but know you're not going to find reliable
      data on thetvdb.com, you can just choose to ignore them.  See 
      the fifth entry for an example.  The tvdbComName still needs to be there
      for the XML parser, so just make it an empty string like the example.

    <seriesMap schedulesDirectName="$..! My Dad Says" tvdbComName="id=164951" />
    <seriesMap schedulesDirectName="regex=Boston Leg.*" tvdbComName="Boston Legal" />
    <seriesMap schedulesDirectName="regex=Boston Lega.*" tvdbComName="id=74058" />GuideEnricher.tvdb.TvdbLibAccess
    <seriesMap schedulesDirectName="regex=The Daily Show.*" tvdbComName="" ignore="true" />
   -->
  <seriesMapping>
    <!-- Check out seriesMapping.xml (https://github.com/ChrisRichner/ARGUS-TV-GuideEnhancer/blob/develop/Setup/seriesMapping.xml) for copy & paste seriesMaps! -->
  </seriesMapping>
  <MatchMethodsSection>
    <MatchMethods>
      <add name="GuideEnricher.EpisodeMatchMethods.EpisodeTitleMatchMethod"/>
      <add name="GuideEnricher.EpisodeMatchMethods.NoPunctuationMatchMethod"/>
      <add name="GuideEnricher.EpisodeMatchMethods.RemoveCommonWordsMatchMethod"/>
      <add name="GuideEnricher.EpisodeMatchMethods.InQuotesInDescriptionMatchMethod"/>
      <add name="GuideEnricher.EpisodeMatchMethods.FirstSentenceInDescriptionMatchMethod"/>
      <add name="GuideEnricher.EpisodeMatchMethods.DescriptionStartsWithEpisodeTitleMatchMethod"/>
      <add name="GuideEnricher.EpisodeMatchMethods.SeasonAndEpisodeInDescriptionMatchMethod"/>
      <add name="GuideEnricher.EpisodeMatchMethods.NumericSeasonEpisodeMatchMethod"/>
      <add name="GuideEnricher.EpisodeMatchMethods.AirDateMatchMethod"/>
      <add name="GuideEnricher.EpisodeMatchMethods.AbsoluteEpisodeNumberMatchMethod" />
    </MatchMethods>
  </MatchMethodsSection>
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="guideenricher.log"/>
      <appendToFile value="true"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="5MB"/>
      <rollingStyle value="Size"/>
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %message%newline"/>
      </layout>
    </appender>
    <appender name="Console" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message%newline"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingLogFileAppender"/>
      <appender-ref ref="Console"/>
    </root>
    <!-- 
      If you wish to overide logging level for specific class or namespace you can do so like the following
      <logger name="GuideEnricher.EpisodeMatchMethods.AbsoluteEpisodeNumberMatchMethod">
        <level value="warn" />
      </logger>
      
      or
      <logger name="GuideEnricher.EpisodeMatchMethods">
        <level value="error" />
      </logger>
    -->
  </log4net>
  <appSettings>
    <!-- Location to store cache of thetvdb.com data -->
    <add key="TvDbLibCache" value="c:\\tvdblibcache\\"/>
    <!-- uncomment the following line and set it to your language if you want to use another language than en (de for German, fr for French, ...) -->
    <add key="TvDbLanguage" value="en"/>
    <!-- 
         serviceUrl:
         This is the url used for FTR to call teh guideenricher
         Make sure the port is not used by anything else... i.e.,
         if you have issues, try changing the port.
      -->
    <add key="serviceUrl" value="net.tcp://localhost:49830/GuideEnricher"/>
    <!-- 
         how long the wait thread waits before doing a run of guide enricher 
         
       -->
    <add key="sleepTimeInHours" value="12"/>

    <!--
         This number determines the maxiumum number of shows that can be updated at once.
         If more than this need to be updated, the GuideEnricher will loop through 
         the shows by maxShowNumberPerUpdate until they are all updated.

         The reason to limit the number of shows is due to the FTR server timing out
         the webservice call for taking too long to update the shows.  So the number is
         probably dependent on the FTR server performance
      -->
    <add key="maxShowNumberPerUpdate" value="20"/>

    <!--
         The next properties are used to build the
         URL to the FTR server
      -->
    <add key="ftrUrlHost" value="localhost"/>
    <add key="ftrUrlPort" value="49943"/>
    <!-- leave ftrUrlPassword blank if you don't use password -->
    <add key="ftrUserName" value=""/>
    <add key="ftrUrlPassword" value=""/>
    <!-- 
      set dumpepisodes to 'true' if you want all episodes for a series dumped in the log file
      make sure logging is set to at least info level
    -->
    <add key="dumpepisodes" value="false"/>
    <!-- 
      set updateAll to true if you want to refresh all information in your schedules with the infromation from theTvDb
      This is useful if a shows information is completely changed on theTvDb, or you suspect a bad run of the enricher.
    -->
    <add key="updateAll" value="true"/>
    <!--
      If you want to filter your recordings based on season number the only way possible for now is to use the description field with a contains filter.
      In your recordings you would set Description Contains "S02E" for example.
    -->
    <add key="episodeInDescription" value="false"/>
    <!-- 
      set updateTitle to true if you want to update any of your schedules programs with the subtitle that it is 
      matched with from thetvdb.  Note however that if something is incorrectly matched, that this will overwrite 
      the current title for one that may be incorrect...
    -->
    <add key="updateSubtitles" value="true"/>
  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-2.6.8.0" newVersion="2.6.8.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-2.6.8.0" newVersion="2.6.8.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
I tried uploading my log file but it keeps saying extension not allowed. I tried changing the extension to something else but was still not able to upload it.
Hey sgibber17, did clearing the tvdblibcache folder work for you? I'm having the same problem and this seems to be the only place where this issue is talked about (could be that I'm not doing something right and it's not actually an issue). I tried deleting that folder, but everything still comes back in German, and the guideenricher.txt file still shows that it's pulling German info from TVdBLib, despite having changed the line in the config file to <add key="TvDbLanguage" value="en"/>. I'm going to try un- and re-installing Guide Enhancer, followed by installing everything from scratch. That's the only potential solution I can see that I haven't tried yet, but I've only been using Argus for a week...

bef5000
Posts: 3
Joined: Tue Aug 04, 2015 3:42 am

Re: Argus-TV Guide Enhancer

Post by bef5000 » Wed Aug 05, 2015 3:57 am

My post from last night still has not been approved by the moderators, however I believe that I have solved (at least temporarily) the problem that both myself and sgibbers17 were having. The issue was that the default language is German ("de") and when I modified the config file, Notepad changed the encoding from UTF-8 to ANSI. Changed it back to UTF-8, restarted the computer, and all of my TV show titles are in English! I'm assuming that if a properly encoded config file isn't detected, it reverts to the default values.

ChrisRichner
Posts: 42
Joined: Tue Dec 25, 2012 11:16 am
Location: Lucerne, Switzerland
Contact:

Re: Argus-TV Guide Enhancer

Post by ChrisRichner » Wed Aug 05, 2015 6:14 pm

Hi

Please consult https://github.com/ChrisRichner/ARGUS-TV-GuideEnhancer for information and troubleshooting tips!

Everbody is very welcome to suggest new troubleshooting and FAQ content!

cdavidson
Posts: 2
Joined: Sun Oct 25, 2015 5:54 pm

Re: Argus-TV Guide Enhancer

Post by cdavidson » Sun Oct 25, 2015 5:58 pm

Hello all,

I can't seem to get Guide Enricher to work. I got it to work properly one time but not sure what I did and it's no longer working. Here's the error I'm seeing when I start it up. Any thought? Thank in advance for any advice.

Code: Select all

2015-10-25 11:53:14 [5] INFO  GuideEnricher.Service - Starting
2015-10-25 11:53:14 [7] INFO  GuideEnricher.Service - Connection and event listener task started...
2015-10-25 11:53:24 [3] INFO  GuideEnricher.Service - SubscribeServiceEvents() succeeded
2015-10-25 11:53:30 [6] ERROR GuideEnricher.Service - Error enriching
System.AggregateException: One or more errors occurred. ---> System.ArgumentNullException: Value cannot be null.
Parameter name: input
   at System.Text.RegularExpressions.Regex.IsMatch(String input)
   at GuideEnricher.Enricher.<AddUpcomingProgramsAsync>d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at GuideEnricher.Enricher.<EnrichUpcomingProgramsAsync>d__8.MoveNext()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at GuideEnricher.Service.Enrich(Object state, ElapsedEventArgs eventArgs)
---> (Inner Exception #0) System.ArgumentNullException: Value cannot be null.
Parameter name: input
   at System.Text.RegularExpressions.Regex.IsMatch(String input)
   at GuideEnricher.Enricher.<AddUpcomingProgramsAsync>d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at GuideEnricher.Enricher.<EnrichUpcomingProgramsAsync>d__8.MoveNext()<---

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest