SVT Text finns redan på vanliga internet anpassad för mobil: http://m.svt.se/2.27903/svt_texttext-tv skrev: Text-TV populärast på Ipad
En sk app som visar SVT Text har
blivit den mest nedladdade betal-
appen för Ipad, skriver Ny Teknik.
(...)
-Det är fantastiskt att Sveriges
största skrivna nyhetsmedium finns med
i framtiden, säger Morgan Olofsson,
redaktionschef på SVT:s Rapport.
(...)
Tvärtemot vad man skulle kunna tro är
det inte SVT som har utvecklat appen,
utan ett privat företag.
(...)
-De tillhandahåller ett program som
gör det möjligt att läsa text-tv
i mobilen eller Ipad, men själva
innehållet är vårt.
Man kan naturligtvis läsa den utan att betala, med hjälp av en vanlig gratis generell webbläsare. Det som gör att folk betalar för appen (i princip en webbläsare som bara kan visa SVT Text) är tydligen att den visar ljus text på svart botten. Som på TV.
Det är ju bara löjligt. Folk måste lära sig att program och information är gratis.
Här är en gratis app som visar SVT Text med svart bakgrund. Den är skriven i python och kan f.n. bara användas i terminalen.
Kod: Markera allt
#!/usr/bin/python
# encoding: utf-8
#
# Copyright 2011 David Andersson
# Programmet får användas, modifieras och distribueras fritt.
#
usage="""\
mysvttext - Visa text-tv-sida från http://svt.se/svttext i terminalen.
Synopsis
mysvttext [VÄXLAR] [SIDNUMMER...]
Default sidnummer är 100.
Växlar
-h, --help Visa denna hjälptext
Unicode
Teckenkodningen för stdout måste kunna hantera unicode.
Om den är okänd antas UTF-8.
"""
import urllib2
import re
import sys
def write(string):
sys.stdout.write(string.encode(sys.stdout.encoding or 'UTF-8'))
def load_web_page(url):
fileHandle = urllib2.urlopen(url)
content = fileHandle.read()
fileHandle.close()
return content
class RegexScanner:
pos = 0
txt = None
m = None
def __init__(_, txt):
_.txt = txt
def match(_, re):
_.m = re.match(_.txt, _.pos)
if _.m:
_.pos = _.m.end()
return _.m
def search(_, re):
_.m = re.search(_.txt, _.pos)
if _.m:
_.pos = _.m.end()
return _.m
def group(_, g=0):
return _.m.group(g)
def eos(_):
return _.pos >= len(_.txt)
def look(_, count):
return _.txt[_.pos:min(_.pos+count,len(_.txt))]
ent_map = {
'&' : '&',
'<' : '<',
'>' : '>',
}
color_white_on_black = '\033[37;40m'
color_default = '\033[0m'
color_class_to_ansi = {
'BK' : '\033[30m', # förgrundsfärger
'R' : '\033[31m',
'G' : '\033[32m',
'Y' : '\033[33m',
'B' : '\033[34m',
'M' : '\033[35m',
'C' : '\033[36m',
'W' : '\033[37m',
'bgBK' : '\033[40m', # bakgrundsfärger
'bgR' : '\033[41m',
'bgG' : '\033[42m',
'bgY' : '\033[43m',
'bgB' : '\033[44m',
'bgM' : '\033[45m',
'bgC' : '\033[46m',
'bgW' : '\033[47m',
'DH' : '\033[1m', # dubbel höjd visas som fet stil
'' : '', # tom klass gör ingenting
}
def write_color_codes(props):
for color in props.split(' '):
write(color_class_to_ansi[color])
def texttvblock_to_braille(ttcode):
# Hittar ingen text-tv-grafik i unicode. Approximera med braille-tecken.
# Text-TV block-grafik, 3x2-matris.
# Addera vikterna med 32 för ASCII-kod.
# -- --
# | 1| 2|
# |--|--|
# | 4| 8|
# |--|--|
# |16|64|
# -- --
# Braille punkt-grafik, 4x2-matris.
# Addera vikterna med 0x2800 för Unicode-nummer.
# -- --
# | 1| 8|
# |--|--|
# | 2|16|
# |--|--|
# | 4|32|
# |--|--|
# |64|128
# -- --
braille = 0x2800
if ttcode & 1: braille |= 1
if ttcode & 2: braille |= 8
if ttcode & 4: braille |= 2+4
if ttcode & 8: braille |= 16+32
if ttcode & 16: braille |= 64
if ttcode & 64: braille |= 128
return unichr(braille)
# Regex-definitioner av tokens i html från webbsidan.
# re_charset och re_startpre används med 'search'. Text innan dem ignoreras.
# Övriga regex används mellan re_startpre och re_endpre och används med 'match'.
# Det ska inte finnas okänd text mellan dem. Allt mellan re_startpre och re_endpre
# ska vara kända tokens.
re_charset = re.compile('<meta[^<>]*charset=([^ "]*)')
re_startpre = re.compile('<pre class="root[^"]*">')
re_endpre = re.compile('</pre>')
re_text = re.compile('[^<&\r\n]+')
re_char_ent = re.compile('&#?\w+;')
re_newline = re.compile('\r?\n')
re_prop_graph = re.compile('<span class="([^"]*)" style="background: url\\(([^"()0-9]*)([0-9]*)[^"()]*\\)"> </span>')
re_graph = re.compile('<span style="background: url\\(([^"()0-9]*)([0-9]*)[^"()]*\\)"> </span>')
re_prop_square = re.compile('<span class="([^"]*)" style="background: url\\(../../images/mos/W/127.gif\\)"> </span>�')
re_square = re.compile('<span style="background: url\\(../../images/mos/W/127.gif\\)"> </span>�')
re_prop_begin = re.compile('<span class="([^"]*)">')
re_prop_end = re.compile('</span>')
re_page_ref = re.compile('<a href="(...)\\.html">(...)</a>')
def parse_html(htmltext):
lex = RegexScanner(htmltext)
if lex.search(re_charset):
web_encoding = lex.group(1)
else:
web_encoding = 'iso-8859-1'
while lex.search(re_startpre): # slinga över del-sidor
write('\n')
props = ''
while not lex.match(re_endpre): # slinga över rader på en sida
write(' '+color_white_on_black+' ')
while not lex.match(re_newline): # slinga över tokens på en rad
if lex.match(re_text):
text = lex.group()
write(unicode(text, web_encoding))
elif lex.match(re_prop_begin):
props = lex.group(1)
write_color_codes(props)
elif lex.match(re_prop_end):
pass
elif lex.match(re_square):
write(unichr(0x25A0))
elif lex.match(re_prop_square):
props = lex.group(1)
write_color_codes(props)
write(unichr(0x25A0))
elif lex.match(re_graph):
graph = int(lex.group(2))
write(texttvblock_to_braille(graph))
elif lex.match(re_prop_graph):
props = lex.group(1)
write_color_codes(props)
graph = int(lex.group(3))
write(texttvblock_to_braille(graph))
elif lex.match(re_page_ref):
pagenum = lex.group(1)
write(pagenum)
elif lex.match(re_char_ent):
ent = lex.group()
write(ent_map[ent])
else:
write(color_default+'\n')
raise SystemExit('Unrecognized token looking at: "'+lex.look(10)+'"')
write(color_white_on_black+' ')
write(color_default+'\n')
def main():
if len(sys.argv)>1 and sys.argv[1] in ['-h','--help']:
print usage
exit(0)
for pagenum in sys.argv[1:] or ['100']:
url = 'http://svt.se/svttext/tv/pages/'+pagenum+'.html'
htmltext = load_web_page(url)
parse_html(htmltext)
try:
main()
except Exception, msg:
print >>sys.stderr, msg
exit(1)