XMLTV som EPG till EyeTV

Tråden skapades och har fått 25 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Sundbyberg
  • 2012-07-15 15:21

Hur får man igång sin TV-guide via XMLTV och tv.swedb.se?

Jag är en icke-hacker och begriper inte tjänsterna.
Finns det någon enkel lösning för mig och andra som vill kunna
använda EPG utan att använda tvtv.uk som ju uppenbarligen tagit
bort stödet för många svenska kanaler?

  • Medlem
  • Strängnäs
  • 2012-07-16 01:30

Denna fil kör jag med sen några år:

#!/usr/bin/env ruby


# SweDB XMLTV Grabber for EyeTV
# by Henrik Nyh <http://henrik.nyh.se>.
# Free to modify and redistribute with credit.


# Configure the list of channels below and run this script as a cron job, e.g.
#   * */12 * * * ruby /path/to/this/script.rb
# to run it every 12 hours (suggested since cron jobs don't run if the computer is off).
# For more detailed instructions (in Swedish), see 
# Elgato.
# Every time it runs it will get schedules for those channels and import them into EyeTV 3.
# The script uses conditional GET to only update files if they've changed.


# CHANGELOG
# 2008-10-30 1.2: EyeTV no longer steals focus on import.
# 2008-09-15 1.1: Always update channel list; not just if updated on server. Don't break on 404.
# 2008-03-09 1.0: First version.


# Use ids as listed in http://tv.swedb.se/xmltv/channels.xml.gz.
CHANNELS = %w[
  tv6.viasat.se
  hd.svt.se
  svt1.svt.se
  svt2.svt.se
  svtb.svt.se
  svt24.svt.se
  tv4.se
  axess.se
]




%w[zlib open-uri date fileutils rubygems hpricot].each {|lib| require lib }


DAYS        = 15  # A value from 1 to 15. Fetches yesterday + n days.
                  # We need yesterday for today's early morning shows.


ROOT_URL    = "http://tv.swedb.se/xmltv/channels.xml.gz"
USER_AGENT  = "SweDB XMLTV Grabber for EyeTV/1.2 <henrik@nyh.se>"


DIRECTORY   = "/Library/Application Support/EyeTV/XMLTV"
DB          = File.join(DIRECTORY, "condget.db")


SCHEDULE_RE = /_(\d{4}-\d{2}-\d{2})\.xml$/
YESTERDAY   = Date.today - 1




# Load or create DB hash mapping file paths to Conditional GET modification dates.
# Using file paths instead of URLs since this makes removing out-of-date entries easier.
$db = File.open(DB) {|file| Marshal.load(file) } rescue Hash.new("")




# This method does conditional GET based on Last-Modified/If-Modified-Since only (no etag)
# and assumes gzipped content.
# Returns local file path if new content was retrieved, false otherwise.
def condget(url)
  filename = File.basename(url, ".gz")
  path = path_from_url(url)
  open(url, "If-Modified-Since" => $db[path], "User-Agent" => USER_AGENT) do |response|
    # Store last-modified
    $db[path] = response.meta["last-modified"]
    # Gunzip
    response_body = Zlib::GzipReader.new(response).read
    File.open(path, 'w') {|file| file.write response_body }
    path
  end
rescue OpenURI::HTTPError => e
  raise unless e.message =~ /^(304|404)/
  false
end


def path_from_url(url)
  filename = File.basename(url, ".gz")
  File.join(DIRECTORY, filename)
end




# Remove expired schedules


glob = File.join(DIRECTORY, "*.xml")
expired_files = Dir[glob].select {|file| file =~ SCHEDULE_RE && Date.parse($1) < YESTERDAY }
expired_files.each do |file|
  File.delete(file)
  $db.delete(file)
end




# Update scheduling


updates = []


# Create directory structure if it doesn't exist already
FileUtils.mkdir_p DIRECTORY


# Get and parse root file
new_root_file = condget(ROOT_URL)
doc = Hpricot(open(path_from_url(ROOT_URL)))


# Create active_channels.xml file containing only the requested channels
excluded_channels = doc.search('channel').reject {|channel| CHANNELS.include?(channel[:id]) }
Hpricot::Elements[*excluded_channels].remove
active_channels_file = File.join(DIRECTORY, "active_channels.xml")
active_channels_xml = doc.to_s.gsub(/\n\s+\n/, "\n")  # get rid of excess whitespace
File.open(active_channels_file, "w") {|file| file.write active_channels_xml }


updates << active_channels_file


# Loop over channels and get schedules
channels = doc.search('channel').map {|channel| [channel[:id], channel.at('base-url').inner_text] }
channels.each do |channel|
  id, base_url = channel
  
  (YESTERDAY).upto(YESTERDAY + DAYS) do |day|
    filename = "#{id}_#{day}.xml.gz"
    url = File.join(base_url, filename)
    if path = condget(url)
      updates << path
    end
  end
end




# Persist the conditional GET DB hash to disk
File.open(DB, "w") {|file| Marshal.dump($db, file) }


# Do the actual EyeTV import
command = %w[open -ga EyeTV] + updates
system(*command)


och sen har jag följande rad i min crontab:

* */12 * * * ruby /Users/tv/eyetv_xmltv_grabber.rb

Hur den sen kommer in i eyetv kommer jag inte riktigt ihåg men den dök upp där när jag tog bort tvtv som guide.

  • Medlem
  • Sundbyberg
  • 2012-07-16 09:33

Kanon!
Men det är här problemet ligger. Hur gör jag? Hur 'kör' jag filen?
Vad är 'crontab' tex? Och hur får man den att uppdateras varje dag?

Vore kanon med en steg-för-steg guide, då blir du först på nätet
med att ge oss icke-hackers en väg till TV-guiden!

Thanx a bunch!

  • Medlem
  • Strängnäs
  • 2012-07-16 15:03

Filen är skriven i ett språk som heter Ruby och måste installeras på din dator. Det var en del pyssel med det förra gången och jag fick inte igång det på min laptop med OSX 10.7 när jag provade lite snabbt nu. Det finns en hel del exempel på hur man gör för att installera det om man googlar men inget som jag fick att funka.

Crontab är en scheduler i unix som kör kommandon enligt ett schema. Den ändrar jag normalt med kommandot crontab -e för att lägga till och ta bort jobb. Men det kräver återigen att man håller på med terminalen vilket inte är helt enkelt om man är ovan. Jag hittade ett ganska bra GUI för crontab på cronnix - OSX crontab editor - Google Project Hosting som verkar vettigt för de som inte gillar terminalens editorer.

Som du ser blev det inga enkla svar och jag kommer att våndas en del om jag själv uppgraderar min tvdator från 10.6 till något nyare då jag förmodligen måste installera om Ruby då.

Kanske någon annan här kan tipsa om någon steg för steg guide till att få igång ruby på OSX 10.7 ?

  • Medlem
  • Sundbyberg
  • 2012-07-16 23:34

OK, supertack för ett begripligt svar. Då ska jag ge mig i kast med att få igång Ruby
på Lion (som suger i sig...) och sen få igång crontab med GUIt du rekommenderade.

Vi hoppas på svar ang Ruby på Lion här på 99mac.

Tack för hjälpen!

Ursprungligen av Pepe:

OK, supertack för ett begripligt svar. Då ska jag ge mig i kast med att få igång Ruby
på Lion (som suger i sig...) och sen få igång crontab med GUIt du rekommenderade.

Vi hoppas på svar ang Ruby på Lion här på 99mac.

Tack för hjälpen!

Har för mig att ruby hoppade igång efter att jag installerat xcode, men jag är inte helt 100%...

  • Medlem
  • Sundbyberg
  • 2012-07-16 23:53

K, hittade den här sidan om bla det att Ruby/Rails redan finns där.

  • Medlem
  • 2012-08-28 22:27

Bumpar...

Jag kör mac mini som tv-dator med Boxer. EPG:n via xmltv i EyeTV försvann efter uppgradering till Mountain lion härom veckan. Uppgraderade direkt från Snow leopard (där allt funkade allt prima). Kör scriptet som nämns ovan och ruby-kommandot (https://gist.github.com/10779). Nu får jag felmeddelande i Terminalen: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- hpricot (LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'

Har googlat som en galning för att hitta en lösning, men jag är riktig rookie på sånt här. Är det någon som vet hur man får EPG att fungera i EyeTV och mountain lion?

Ursprungligen av braun:

Bumpar...

Jag kör mac mini som tv-dator med Boxer. EPG:n via xmltv i EyeTV försvann efter uppgradering till Mountain lion härom veckan. Uppgraderade direkt från Snow leopard (där allt funkade allt prima). Kör scriptet som nämns ovan och ruby-kommandot (https://gist.github.com/10779). Nu får jag felmeddelande i Terminalen: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- hpricot (LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'

Har googlat som en galning för att hitta en lösning, men jag är riktig rookie på sånt här. Är det någon som vet hur man får EPG att fungera i EyeTV och mountain lion?

Jag hade samma problem som dig, gjorde följande för att få det att fungera.
1. Installera Xcode
2. Installera "Command Line Tools" i Xcode (ligger under menyn Xcode->Preferences, fliken Downloads)
3. Starta en terminal och kör kommandot: sudo gem install hpricot

Efter detta så fungerade det för mig.

Ett tipps är också att ändra länken som tablåerna laddas ner från till: http://xmltv.tvtab.la/xmltv/channels.xml.gz
Denna sida har fler kanaler än tv.swedb.se

  • Medlem
  • 2012-09-04 20:10

Strålande! Nu funkar det igen. Stort tack för hjälpen!

Har försökt följa er guide här men får tyvärr följande fel:

ruby /Users/tv/eyetv_xmltv_grabber.rb
/usr/local/lib/ruby/gems/1.8/gems/hpricot-0.8.6/lib/hpricot_scan.bundle: dlopen(/usr/local/lib/ruby/gems/1.8/gems/hpricot-0.8.6/lib/hpricot_scan.bundle, 9): no suitable image found.  Did find: (LoadError)
    /usr/local/lib/ruby/gems/1.8/gems/hpricot-0.8.6/lib/hpricot_scan.bundle: mach-o, but wrong architecture - /usr/local/lib/ruby/gems/1.8/gems/hpricot-0.8.6/lib/hpricot_scan.bundle
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/local/lib/ruby/gems/1.8/gems/hpricot-0.8.6/lib/hpricot.rb:20
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
    from /Users/tv/eyetv_xmltv_grabber.rb:39
    from /Users/tv/eyetv_xmltv_grabber.rb:39:in `each'
    from /Users/tv/eyetv_xmltv_grabber.rb:39

Kör mountain lion, samt just nu ruby 1.8.7, lyckas inte installera 1.9.3.
Har kört in hpricot, så vet inte vad jag kan testa nu.

  • Medlem
  • Strängnäs
  • 2013-01-11 23:12

Och din användare heter "tv" precis som min ?

Annars bör du ändra i kommandot till det din användare heter.

>Dum fråga från mig. Jag testade nu med en fil som inte finns och det står inte så. Sorry.

Ursprungligen av stralis:

Och din användare heter "tv" precis som min ?

Annars bör du ändra i kommandot till det din användare heter.

>Dum fråga från mig. Jag testade nu med en fil som inte finns och det står inte så. Sorry.

Skrev om användarnamnet här i hopp om att förenkla tips/förklaringar. Men antar att de blir att installera om mac os i hopp om att mina troliga missar försvinner då det verkar vara något som spökar.

"Gör om gör rätt", som morfar alltid sa!

Jag formatera om datorn helt, samt följde denna guide till punkt och pricka och nu fungerar allt:
http://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/

Jaha, nu kom Mavericks och ny version av ruby. Då slutade allt att fungera.
Jag har återinstallerat hpricot men problemet ligger nu på den rad i grabberskriptet som lyder
"response_body = Zlib::GzipReader.new(response).read"
I Mountain Lion fungerade allt perfekt men nu i Mavericks får jag här ett fel:
"not in gzip format (Zlib::GzipFile::Error)"
Tyvärr förstår jag inte ruby men på mig verkar det som om Zlib::GzipReader hanterar data på ett annorlunda sätt.
Är det någon som har installerat Mavericks och kör med detta skript?

Ursprungligen av macinstead:

I Mountain Lion fungerade allt perfekt men nu i Mavericks får jag här ett fel:
"not in gzip format (Zlib::GzipFile::Error)"

Jag har samma problem, och har skickat ett mejl till Henrik Nyh, skaparen av skriptet eyetv_xmltv_grabber.rb, för att fråga om han har en uppdatering för Mavericks.

Senast redigerat 2013-10-25 14:49
  • Medlem
  • Vallentuna
  • 2013-10-25 21:47
Ursprungligen av Addicts brorsa:

Jag har samma problem, och har skickat ett mejl till Henrik Nyh, skaparen av skriptet eyetv_xmltv_grabber.rb, för att fråga om han har en uppdatering för Mavericks.

Jag (Henrik) använder inte scriptet själv längre, men jag kollade om det gick att fixa snabbt, och det gjorde det. Ändra följande snutt: https://gist.github.com/henrik/10779#file-eye...

Fixen av Henrik Nyh "did the trick". Tack Henrik! Nu funkar allt igen.

  • Medlem
  • Vallentuna
  • 2013-10-26 13:26

Det behövdes visst en rad till för att fixa alla(?) problem: https://gist.github.com/henrik/10779#file-eye...

Ursprungligen av malesca:

Tack för den snabba supporten!

Jag var för snabb med att ropa tjoho igår kväll, jag fick bara data första dygnet men sedan var det tomt. Efter att ha lagt till response.rewind så tar jag mig friheten att ropa tjoho igen, nu har jag data 15 dagar framåt.

  • Medlem
  • 2014-01-01 22:27

Hej, hoppar in i denna tråden för att be om lite hjälp.
Ruby är igång och jag kan se i crontab -l att det ligger där i. Nu är min fråga, hur får man in detta i EyeTV -inställningar /Guide..
Hur kommer detta skrytet upp som en tjänst?

Tacksam för all hjälp.

  • Medlem
  • International user
  • 2015-04-18 18:02

Skriptet har funkar bra fram till nu men har nyligen slutat fungera, och jag gissar att det beror på någon (mindre) OSX-uppdatering nyligen. Jag kör 10.8.5 och Ruby 2.2.2 men får detta felmeddelande:

/usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http/header.rb:17:in `block in initialize_http_header': undefined method `strip' for nil:NilClass (NoMethodError)
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http/header.rb:15:in `each'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http/header.rb:15:in `initialize_http_header'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http/generic_request.rb:43:in `initialize'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http/request.rb:14:in `initialize'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/open-uri.rb:319:in `new'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/open-uri.rb:319:in `block in open_http'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http.rb:853:in `start'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/open-uri.rb:318:in `open_http'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/open-uri.rb:736:in `buffer_open'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/open-uri.rb:211:in `block in open_loop'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/open-uri.rb:209:in `catch'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/open-uri.rb:209:in `open_loop'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/open-uri.rb:150:in `open_uri'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/open-uri.rb:716:in `open'
from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/open-uri.rb:34:in `open'
from /Applications/_Script/eyetv_xmltv_grabber.rb:172:in `condget'
from /Applications/_Script/eyetv_xmltv_grabber.rb:216:in `<main>'

De sista två raderna motsvarar raderna 76 och 120 i original-scriptet.

Någon som kan guida mig i detta problem?

  • Medlem
  • International user
  • 2015-06-22 23:13

Hittade efter mycket felsökande vad felet var.

Tydligen hade någon av de senaste OSX-uppdateringarna ändrat säkerhetsinställningarna till att endast tillåta exekvering av mjukvara från ”App Store och angivna utvecklare” (Systeminställningar -> Säkerhet och integritet -> Tillåt program hämtade från ).
Ett så simpelt fel, men ändå så svårt att hitta... :-/

Det var troligtvis detta som förhindrade Ruby att laddas in korrekt och därmed även skriptet från att köras.

Nu har jag återigen finfin EPG-data i EyeTV! Jippie!

Ursprungligen av nightjar:

Tydligen hade någon av de senaste OSX-uppdateringarna...

Senaste? Den inställningen kom väl i 10.8?

  • Medlem
  • International user
  • 2015-06-23 00:43
Ursprungligen av Jesper Ohlsson:

Senaste? Den inställningen kom väl i 10.8?

Ja, själva inställningen som sådan kom säkert med 10.8. Men det var (troligtvis) en mindre uppdatering som ändrade mina inställningar att tillåta vilka program som helst att köras, till att bara tillåta sådana från "Mac App Store och angivna utvecklare".

1
Bevaka tråden