slideshow 1 slideshow 2


WebGrab+Plus is a multi-site incremental xmltv epg grabber. It collects tv-program guide data from selected tvguide sites for your favourite channels.

Upgrade release
/ 55

Version V1.1.1/55 (same as Beta 55.27)
From Beta 55.27
    - PostProcess V1.9: added mdb-category
    - bug fixed: issue on Mono with PostProcess (MDB and REX) during removing of elements
    - improved: Date/Time Pattern to take into account the sites Culture info
From Beta 55.26
    - added: xmltv elements url (= program url) and country
    - added: argument pattern= to specify a non standard start and/or stop time result from scrub.
    - bug fixed: problem with include and/or exclude arguments in scrub
    - ProgramInfo: add initialization check
    - Logger: don't log to file, if no file was set
    - bug fixed: error on cleanup/keeplast, when no info is found
    - added: static ProgramInfo class. Contains info (author, fullname, co-author, ...)
    - move some common stuff to WG.Common
    - adjust minor logging
    - An interface can never have attributes on its properties. So declare them on the real classes
    - fix manifest issues (after renaming)
    - rename namespaces + move logger to its own namespace
    - Move LogSpecial() out of Log class
    - move RandomWord to Utils class
    - adding ideabox.txt file
    - change Logger into Log
    - only set in one place, the log file path
    - moving IElements and co, to a separate file
    - adding temp_7,temp_8 and temp_9 (thanks IElements) …
    - make advantage of IElements where possible
    - Solves times without start.scrub, accepts datetime string of syntax 'dateTtime'
    - add comment to notify a "bug"
From Beta 55.25
    - changed: grouping elements (internal data structure)
    - bug fixed: AddScope bug with index_showsplit inside an already existing scope
From Beta 55.24
    - bug fixed: subdetails got copied from previous show, when no subdetail page was grabbed
From Beta 55.23
    - bug fixed: wget correct lowercase function call (fails on linux)
    - bug fixed: partial fix for | edit
    - changed: clear tmp index page, because it is not collected by the GC (reduce memory footprint)
    - changed: adding out of memory info during exception
From Beta 55.22
    - bug fixed: crash when no user-agent was defined (introduced in Beta 55.21)
    - changed: try to reduce the memory footprint (especially with very large index pages)
From Beta 55.21
    - added: profiler (only for developers)
    - changed: util class now fully static
    - changed: logger also more static
    - changed: Remove \r and \n from user-agent, because this is an invalid value on linux.
    - changed: Use also the encoder type for reading directly from a file:\\
    - changed: only read the stream if it is not a redirect (speed up during redirections)
From Beta 55.20
    - changed: small fix bug  (but important)
From Beta 55.19
    - changed: speedup unidecode
    - changed: speedup title matching + fix memory bug
From Beta 55.18
    - bug fixed: crash on logger in WebGrab.Grab.FetchHtmlPage (introduced in 55.16)
From Beta 55.17
    - bug fixed: formatted date not always correct done (now invariant culture output)
From Beta 55.16
    - added: new logger instance
    - changed: speedup splitindex parsing
    - changed: MDB fix crash on invalid ID
    - changed: made productiondate detection more robust
    - changed: some other minor fixes
From Beta 55.15 (first build from repo)
    - bug fixed: "!?!?!" should be also "!??!"
    - bug fixed: "!??!" replaced with "|" during output now
From Beta 55.14
    - PostProcess
        - bug fixed: allows one letter subtitles in MDB
From Beta 55.13
        - added    : command set: element.modify {set(opt args)|expression_1}
                    will set element to the value of expression_1 irrespective of the current value of element
        - bug fixed: the date of the next start was not properly determined
        - added    : numeric datetimes values (e.g UNIX and Ticks) in start and stop are now supported
        - added    : the datetimeformat in calculate format=time,datetimeformat accept a space if entered between "" , like format=time,"yyyy/MM/dd HH:mm"
        - bug fixed: headers for urlshow was identical to those for urlsubdetail.
From Beta 55.12
    - improved: loading cookies into the htpp request rejects non valid cookies
From Beta 55.11
    - bug fixed: logging of shows added in case of times from showdetail page was inaccurate
    - changed : scope splitindex allows operations with the absence of index_showsplit.modify
    - changed : index_showsplit.modify gets scope=splitindex automatically
    - changed : de base date for urldate.format changed to site date (was computer date)
    - added   : error handling and logging of cultureinfo entry in siteini
    - bug fixed: stop time with date component not always properly implemented
    - bug fixed: unit test firstshow  failed
    - bug fixed: basic unittest stop time not properly saved
    - first evaluation version with the new 'times' class
    - details of this class:
    -- allows a date component in start and stop
    -- possible time input combinations:
        start only
        start with date only
        start and stop
        start with date and stop
        start and date both with date
        start and duration
        start with date and duration
        all the combinations above from the detail show
            (these 'mode' have reduced functionality elsewhere, no incremental grabbing and no 'oneshow-only' debugging)
        date from index_page with all the combinations above without date component
        start from index show (with or without date) and stop from detail show
        start from index show (with or without date) and duration from detail show     
    -- allows duration in minutes besides the HH:mm
    -- allows duration in dd:HH:mm (recommended, enables > 24h)
    -- improved globalisation of datetime formats
    -- automatic timeoverlap detection and correction
    - improved: the addition of 55.11.2 now also works if the an error occurred during grabbing
    - added   : if the index_page fails to grab the existing xmltv data will be restored and the update process will be interrupted.
    - changed : the bug fixed in beta 55.7 that corrected the error that shows were blocked that happened on the day before of the user timezone
                into shows being blocked that are actually already past, is now changed that all shows are blocked that took place on the day before the actual day in the tvguide timezone.
    - added   : logging of the .net version and the mono version
From Beta 55.10
    - MDB/REX postprocess V1.8
        - bug fixed: in REX : runtime error if description end with ()
        - improved : in REX : expand logged a warning if the input string is ""
        from Eval 55.10.2
    - bug fixed: introduced through the changes made in 5.10.1 in scrub type url composing the headstring and the scrubresult
        from Eval 55.10.1
    - improved: scrub results for empty values , for single, multi and regex, are properly passed.
From Beta 55.9
    - MDB postprocess V 1.7
        - improved : new matching algoritme for serie location in the local DB. Now finds the best matching serie episode rather than
          the first one that passes the matching criteria.
From Beta 55.8
    - bug fixed: update mode in XmlSource was implemented on basis of local times instead of guide-site times
From Beta 55.7
    - improved : statistics upload error handling when is unavailable.
    - bug fixed: shows were blocked that have showtimes before local time instead of before guide-site time
    - MDB postprocess V 1.6
    - added: log and console warning if a match cannot be added to the local mdb file because of a conflicting show
From Beta 55.6
    - bug fixed: the 'improvement' in calculate in 55.3 causes errors. Reverted
From Beta 55.5
    - bug fixed: the combination of certain escape values resulted in a mix up
From Beta 55.4
    - bug fixed: in method POSTBACK VIEWSTATE value was kept in header postdata for subsequent channels
From Beta 55.3
    - improved : calculate returns "" if input is ""
    - bug fixed: sort called for the wrong 'getelement' variant
    - bug fixed: introduced with beta 55.1, spaces in some preconditionals where removed
From Beta 55.2
    - added    : for operation 'select' the operator can be negated with the addition 'not' in front of it
From Beta 55.1
    - added    : argument keeplast or keepfirst (default) in cleanup removeduplicates


From now on, we also have a Google+ page


Utility release

EpgEdit, an EPGViewer/Editor
… and another approach of epg categories ..

To view (and edit) your EPG on the PC before you send it to your TV or Mediacentre. But it can do a lot more: like adding 'viewer categories'! Click on this link to find out all about it.
It is free to use for registered users and also available as C# source in the form of a Visual Studio Project for users who want to improve/extend it.
The executable is provided 'As Is', meaning that we will not do much support for it. Users of it can communicate about it on

enjoy     ..  Jan

See versions.txt
V1.4 Some bugs fixed
 - fixed missing description in display window in V1.3
 - fixed credits not always refreshed in the display window

Utility release

SiteIniIDE is a portable IDE created to simple create/debug/edit siteini file setups. With a few shortcuts in the IDE, you can quickly create new siteini's. Just run WG++IDE.exe.

Check the readme.txt file for more info.

Upgrade release
/ 54

Changes, improvements and bugs fixed:

- bug fixed : when the config calls a non existend siteini loading empty.ini was not properly implemented
- bug fixed : argument value 'minimum=' was not properly implemented in MDBpostprocessor
- update     : new tzdatabase based on tzdata2014e
- changed  : default max value in each loop is length source element with a limit of 10000
- improved : unmatched timezone now logs al timezones sorted with coming DST date
- added      : timezone query  , (add ? to timezone name in ini), lists timezone details in log file
- bug fixed : not fully working debug switch in loops
- bug fixed : index_variable_element in 'foreach' loop didn't work
- improved : parsing and error handling maxdays
- bug fixed : replace type regex did not accept #### as new string (that was internally used)
- improved : logging and error handling loops
- added      : 'foreach' loop first implementatie
    e.g loop {(debug each 'index_temp_6' in 'index_actor' max=15)|end}
- changed  : loop condition is now executed as real precondition, condition false -- loop not executed
- improved : loop debug logging
- added      : config mode switch ~ , as in <mode>#~</mode> to switch off the 3 seconds wait at the end of a run
- added      : forgotten arguments for command sort  (descending ascending string integer) added to argument and preconditional extraction
- bug fixed : error in the new argument extraction corrected
- improved : MinSWversion check syntax check
- bug fixed : the order of the arguments in an operation created problems when the preconditional was not the first after debug
- improved : the overall internal extraction of preconditionals and other arguments in operations
- bug fixed : small typo in log  "pdate"  changed in "update"
- bug fixed : datetime globalization error in // indexpage overlaps ? (date MM/dd/yyyy cannot parse in dd/MM/yyyy)
- bug fixed : preconditionals ~~ and == were not properly implemented
- Postprocess V1.5
     - added: url headers
- bug fixed : a conditional string between [] is considered a wildcard even if it is no * or ?
- bug fixed : request header host cannot be empty, condition added
- added      : loadcookie=cookiefilename,domain    domain=* will disable domain filter
- bug fixed : request header referer was not used in method GET
- added      : request header host

Docs release

Version 1.1.4 of the manual.
This latest edition of the manual. With a lot of small additions of new features. It now also includes documentation of the MDBIni files.


Brought to you by Jan van Straaten

Program Development - Jan van Straaten ------- Web design - Francis De Paemeleere
Supported by: