Gratis text-tv-app

..när det gäller Ubuntu, eller kanske något helt annat. Lite som "Ordet är fritt", men man måste följa de regler som gäller. Här är roligt, trevligt, mysigt och kanske man tar en kopp kaffe tillsammans!
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Gratis text-tv-app

Inlägg av David Andersson »

Såg en nyhet på SVT Text igår:
text-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.
SVT Text finns redan på vanliga internet anpassad för mobil: http://m.svt.se/2.27903/svt_text
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>&#0;')
re_square      = re.compile('<span style="background: url\\(../../images/mos/W/127.gif\\)"> </span>&#0;')
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)
Användarvisningsbild
nicefinger
Inlägg: 1800
Blev medlem: 14 jul 2006, 08:18
OS: Annat GNU/Linux
Utgåva: 23.04 Lunar Lobster
Ort: Uddevalla

Re: Gratis text-tv-app

Inlägg av nicefinger »

Funkar :) Men man får ju bara en sida i taget.
Borde väl gå att bygga på programmet så att man kan navigera på vanligt sätt?
Kolsyrat gangesvatten, socker, målarfärgämne (sockerkulör), surhetsgivande medel (saltsyra), dioxin, konservmedel (E211), du-är-så-sötningsmedel (E952), arom, oxidationsmedel.
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Gratis text-tv-app

Inlägg av David Andersson »

nicefinger skrev:Funkar :) Men man får ju bara en sida i taget.
Man får flera sidor om man anger flera argument. Eller om sidan är en fler-sida.
nicefinger skrev:Borde väl gå att bygga på programmet så att man kan navigera på vanligt sätt?
Ja, man skulle kunna bygga på så man t.ex. kan bläddra i terminalen med piltangenterna. T.ex. med modulen curses. Men jag tror det ger mer att bygga ett riktigt grafiskt gränssnitt. Har ännu inte bestämt mej om Tkinter eller pygkt är bäst, och om själva tv-bilden ska vara en canvas- eller textfält-widget.

Sen, hur får man in det i iPhones programförråd (app store)?
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Gratis text-tv-app

Inlägg av David Andersson »

David Andersson skrev:Har ännu inte bestämt mej...
Medans man väntar. Ett bash-script som frågar efter sidnummer eller kommandon och anropar mysvttext. Spara filen i ~/bin/mysvttextwrapper
(Förutsätter att mysvttext från första inlägget ovan är sparad i ~/bin/mysvttext)

Kod: Markera allt

#!/bin/bash
#
page=100

while true; do
    mysvttext $page

    while [ -z "$nextpage" ]; do
        read -n 3 -p $'\r'"($page) Enter page number or n/p/q: " cmd
        case "$cmd" in
            q) exit;;
            p|$'\e[B'|$'\e[D') nextpage=$((page-1));;
            n|$'\e[A'|$'\e[C') nextpage=$((page+1));;
            [1-8][0-9][0-9]) nextpage=$cmd;;
            "") ;;
            *) echo " Unrecognized command or number range: $cmd";;
        esac
        case "$nextpage" in
            99|099) nextpage="";;
            900) nextpage="";;
        esac
    done
    page=$nextpage
    nextpage=""
done
När man anger tre-siffrigt sidnummer behöver man inte avsluta med Return. Man kan bläddra med piltangenter eller "p" och "n". Avsluta med "q".
m!rage
Inlägg: 2550
Blev medlem: 28 apr 2009, 21:47
OS: Arch Linux
Ort: Lund

Re: Gratis text-tv-app

Inlägg av m!rage »

David Andersson skrev:---
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.
---
Förstår du nu varför det ligger så mycket pengar i utveckling för mobila plattformar? Sådant som varit gratis i tiotals år blir folk plötsligt beredda att betala för.
ledoyen
Inlägg: 1
Blev medlem: 14 maj 2009, 22:19
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS

Re: Gratis text-tv-app

Inlägg av ledoyen »

Kan någon förklara steg för steg hur man går till väga för att använda sig av text tv i terminalen?

Räcker det med att spara informationen i en text fil och sedan döpa den till .py?
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Gratis text-tv-app

Inlägg av David Andersson »

ledoyen skrev:Kan någon förklara steg för steg hur man går till väga för att använda sig av text tv i terminalen?
  • Skapa en mapp i din hemmamapp som heter "bin" (på unix-språk heter den alltså ~/bin)
  • Om ~/bin inte fanns förut och du just skapade den, så logga ut och logga in igen.
  • Öppna en text-editor och kopiera in programmet från första inlägget, spara som ~/bin/mysvttext (på människospråk alltså som "mysvttext" i mappen "bin" i hemmamappen)
  • Öppna en terminal
  • Sätt exekveringsrättighet på mysvttext, antingen genom att högerklicka filen och gå till rättigheter, eller i en terminal med kommandot chmod +x ~/bin/mysvttext
  • Skriv i terminalen kommandot mysvttext 100
  • Skriv i terminalen kommandot mysvttext 101
  • och så vidare...
ledoyen skrev:Räcker det med att spara informationen i en text fil och sedan döpa den till .py?
Spara en textfil, ja. Men den behöver inte heta .py. Det som gör att datorn förstår att det är python är att första raden börjar med #!/usr/bin/python. Alla program måste ha exekveringsrättigheter, oavsett om det är bython, bash, kompilerad C, eller vadsomhelst. (I princip alltså. Det skulle gå att starta mysvttext utan exekveringsrättigheter med kommandot python ~/bin/mysvttext 100)
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Gratis text-tv-app

Inlägg av David Andersson »

David Andersson skrev: Folk måste lära sig att program och information är gratis.
Har upptäckt att den finns gratis text-tv-app för android. Det kanske finns hopp trots allt.
bittin
Inlägg: 1471
Blev medlem: 05 jun 2007, 14:03
OS: Debian
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Täby
Kontakt:

Re: Gratis text-tv-app

Inlägg av bittin »

du kanske kan få med den i: http://cydia.saurik.com/
Skriv svar

Återgå till "Ubuntu Café"