Ecco la guidaTV gratuita per sky!

ora che ci penso, ma non c'era un tizio che aveva detto che avrebbe provato ad adattare il programma a linux? Era su questo forum? O me lo sono sognato?!? :eusa_think:
 
Ok, forse sono riuscito ad individuare il problema.
Visto che c'ero, ho fatto altre modifiche... per cui ora potrei aver aggiunto ALTRI problemi...

Versione 3.0.0
Scatto di versione a causa di cambi all'interfaccia:
' Eliminato auto-popup della finestra di download
' Aggiunto pulsante cancellazione foglio
' Messi pulsanti in entrambi i fogli
' Invertito ordine dei fogli: ora viene mostrato per primo quello con tutti i risultati
' Aggiunta checkbox per scaricare le trame complete anche nel foglio globale (LENTISSIMO!)
' Aggiunta checkbox per forzare scaricamento file gia' presenti su disco (per default ora non li ri-scarica).

Altre modifiche:
' Adattato a nuovo formato SKY

Non ho fatto molte prove (ho scaricato solo un giorno), per cui fate un po' di esperimenti.

Soprattutto, verificate le date, ho il dubbio di aver perso alcune modifiche precedenti che risolvevano il bug delle date, ma non ho avuto tempo di controllare.
I palinsesti HD non funzionano, non so perche', controllero'...
 
Nuova release 3.1.0:
' 3.1.0
' Riattivato doppio click su colonna trama per scaricamento trama completo (disattivato per errore).
' Aggiunto commento in colonna trama sulla possibilità di scaricarla completa.
' Reinseriti campi "genere" e "sottogenere" (scomparsi dopo modifiche a formato file SKY).
' Ripulito codice per aumentare la velocità di scaricamento.
' Aggiunti numerosi commenti alla procedura di conversione da JSON a tabella per facilitare il porting.

Il mio programma è piuttosto lungo e complesso perche' offre varie opzioni di pre-filtraggio e scelta, ma di per sè la conversione dei file della EPG sky non è difficile; ecco la procedura che se ne occupa (sperando che passi da qualche parte uno sviluppatore linux ;-) ):

Codice:
Sub JSON_Extractor(ContenutoFileEvento As String, canale As String, posizione As String, nome As String, genere As String, Data As String)
    Prima = InStr(ContenutoFileEvento, "[") + 1
    Ultima = InStrRev(ContenutoFileEvento, "]") - 1
    ContenutoFileEvento = Mid$(ContenutoFileEvento, Prima, Ultima - Prima) ' Contenuto completo file evento.
    ContenutoFileEvento = Replace(ContenutoFileEvento, "\'", "*")    ' L'apostrofo è un delimitatore, se è presente nel testo, confonde il programma.
    ContenutoFileEvento = Replace(ContenutoFileEvento, "'", "*")     ' L'apostrofo è un delimitatore, se è presente nel testo, confonde il programma.
    ContenutoFileEvento = Replace(ContenutoFileEvento, Chr(34), "'") ' Sostituisce virgolette con apostrofo.
    ContenutoFileEvento = Replace(ContenutoFileEvento, Chr(13) & Chr(10), "")  ' Elimina i ritorni a capo
    ContenutoFileEvento = Replace(ContenutoFileEvento, Chr(10), "")  ' Elimina i ritorni a capo
    
    While InStr(ContenutoFileEvento, "{") > 0
                        If abort = True Then
                            frmSetup.txtStatus.Caption = "INTERROTTO"
                            Exit Sub
                        End If
        frmSetup.txtStatus.Caption = "Eventi totali: " & NumEventi
        DoEvents
        frmSetup.txtStatus.Caption = "Canale " & canale & ", evento " & NumEventi
        NumEventi = NumEventi + 1
        
        ' Raccolta dati su singolo evento in unica variabile:
        InizioRiga = InStr(ContenutoFileEvento, "{") + 1
        FineRiga = InStr(ContenutoFileEvento, "}") - 1
        LunghRiga = FineRiga - InizioRiga + 1
        riga = Mid$(ContenutoFileEvento, InizioRiga, LunghRiga)
        'riga = Replace(Mid$(ContenutoFileEvento, InizioRiga, LunghRiga), Chr$(10), "")
        'riga = Replace(riga, "\'", "*") ' L'apostrofo è un delimitatore, se è presente nel testo, confonde il programma.
        'riga = Replace(riga, "'", "*") ' L'apostrofo è un delimitatore, se è presente nel testo, confonde il programma.
        'riga = Replace(riga, Chr(34), "'") ' Sostituisce virgolette con apostrofo.
        'Debug.Print riga
        
        ' ************* Formato della "riga" (in realta' gruppo di dati con ritorni a capo, poi trasformato in riga): ***********
        '      'id':'28324961',
        '      'pid':'5365',
        '      'starttime':'00:30',
        '      'dur':'55',
        '      'title':'Dr. House',
        '      'normalizedtitle': 'dr-house',
        '         'desc':'3* Stagione Ep.9 -...',
        '      'genre':'intrattenimento',
        '      'subgenre':'fiction',
        '      'prima':false
        
        
        Colonna = COLONNA_BASE
        ' Le prime "colonne" sono occupate da altri campi:
        '      {'channel':'931',
        '       'banned':false,
        '       'plan':[
        
        Selezionato = False ' Se nella riga c'e' un evento selezionato, lo scrive anche nel foglio a parte.
        ' Questo flag viene quindi attivato se l'evento attualmente elaborato corrisponde ai criteri di ricerca.
        
        ' *************  Estrazione campi dalla riga ************
        While InStr(riga, "'") > 0
                        If abort = True Then
                            frmSetup.txtStatus.Caption = "INTERROTTO"
                            Exit Sub
                        End If
            Colonna = Colonna + 1
            
            ' ********** Estrazione dati singolo campo
            InizioCampo = InStr(riga, "'")
            FineCampo = InStr(InizioCampo + 1, riga, "'")
            LunghCampo = FineCampo - InizioCampo - 1
            If LunghCampo > 0 Then
                campo = Mid$(riga, InizioCampo + 1, LunghCampo) ' Elimina ritorni a capo.
                'campo = Replace(Mid$(riga, InizioCampo + 1, LunghCampo), Chr$(13) & Chr$(10), "") ' Elimina ritorni a capo.
                campo = Replace(campo, "*", "'") ' Rimette a posto eventuali apostrofi cancellati.
            Else
                campo = "VUOTO"
            End If
            
            ' Costruzione data:
            DataEvento = Mid$(Data, 4, 2) & "/" & Mid$(Data, 7, 2) & "/" & "20" & Mid$(Data, 1, 2)
            If Weekday(DataEvento) = 1 Then
                GiornoSettimanaEvento = WeekdayName(7)
            Else
                GiornoSettimanaEvento = WeekdayName(Weekday(DataEvento) - 1)
            End If
            
        ' "Colonna" è in realtà il contatore della posizione del campo nel file. Nel nuovo formato di file,
        ' anche i nomi dei campi sono delimitati e quindi appaiono come se fossero campi, quindi vanno saltati.
        ' La variabile serve per capire a quale variabile assegnare il valore letto per il campo.
            If Colonna = COLONNA_BASE + 2 Then IdEvento = campo
            If Colonna = COLONNA_BASE + 4 Then IdInternoEvento = campo
            If Colonna = COLONNA_BASE + 6 Then OrarioEvento = campo
            If Colonna = COLONNA_BASE + 8 Then DurataEvento = campo
            If Colonna = COLONNA_BASE + 10 Then TitoloEvento = campo
            If Colonna = COLONNA_BASE + 12 Then TitoloNormEvento = campo
            If frmSetup.chkPlot.Value = True Then
                TramaEvento = ScaricaTrama((IdEvento)) ' Scarica trama completa
            Else
                If Colonna = COLONNA_BASE + 14 Then TramaEvento = campo
            End If
            If Colonna = COLONNA_BASE + 16 Then GenereEvento = campo
            If Colonna = COLONNA_BASE + 18 Then SottoGenereEvento = campo
            
            
            If ricerca <> "" And InStr(UCase$(campo), UCase$(ricerca)) > 0 Then ' Se l'evento corrisponde al campo di ricerca...
                Selezionato = True
            End If

            riga = Right$(riga, Len(riga) - FineCampo - 1) ' Cancella dall'inizio della riga il campo appena elaborato, e ricomincia.
        Wend
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 1) = genere
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 2) = canale
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 3) = posizione
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 4) = nome
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 5) = GiornoSettimanaEvento
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 6) = DataEvento
            ' ******** fine campi indipendenti dal file-evento
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 7) = IdEvento
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 8) = IdInternoEvento
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 9) = OrarioEvento
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 10) = DurataEvento
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 11) = TitoloEvento
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 12) = TramaEvento
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 14) = GenereEvento
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, 15) = SottoGenereEvento
            Worksheets(NOME_FOGLIO_GLOBALE).Cells(NumEventi, COLONNA_LINK) = Replace(STRINGA_EVENTO, "EEEEEEEE", IdEvento)
            
            
        If Selezionato = True Then ' Se richiesto, mette in altro foglio risultati di ricerca:
            Debug.Print "Scarico dettagli evento " & IdEvento
            TramaEvento = ScaricaTrama((IdEvento))
            NumeroEventiSelezionati = NumeroEventiSelezionati + 1
            Worksheets(NOME_FOGLIO_RICERCA).Cells(NumeroEventiSelezionati, 1) = nome
            Worksheets(NOME_FOGLIO_RICERCA).Cells(NumeroEventiSelezionati, 2) = posizione
            Worksheets(NOME_FOGLIO_RICERCA).Cells(NumeroEventiSelezionati, 3) = GiornoSettimanaEvento
            Worksheets(NOME_FOGLIO_RICERCA).Cells(NumeroEventiSelezionati, 4) = DataEvento
            Worksheets(NOME_FOGLIO_RICERCA).Cells(NumeroEventiSelezionati, 5) = OrarioEvento
            Worksheets(NOME_FOGLIO_RICERCA).Cells(NumeroEventiSelezionati, 6) = DurataEvento
            Worksheets(NOME_FOGLIO_RICERCA).Cells(NumeroEventiSelezionati, 7) = TitoloEvento
            Worksheets(NOME_FOGLIO_RICERCA).Cells(NumeroEventiSelezionati, 8) = TramaEvento
            Selezionato = False
        End If

        ContenutoFileEvento = Right$(ContenutoFileEvento, Len(ContenutoFileEvento) - FineRiga - 1) ' Elimina dalla stringa la riga appena letta.
    Wend
End Sub
Questi sono gli URL da usare:
STRINGA_GENERE = "http://guidatv.sky.it/app/guidatv/contenuti/data/grid/grid_GGGGGGGG_channels.js"
STRINGA_CANALE = "http://guidatv.sky.it/app/guidatv/contenuti/data/grid/AA_MM_GG/ch_CCCCCCCC.js"
STRINGA_EVENTO = "http://guidatv.sky.it/EpgBackend/event_description.do?eid=EEEEEEEE"
 
Versione 3.1.0 non scarica tutte le colonne

Grazie per il lavoro ma io con Excel 2003 Sp3 su Seven Professional 32 bit
scarico solo le prime 3 colonne.
Genere canale
Posizione
Nome Canale

Tutte le altre colonne sono vuote ...
 
rob64 ha scritto:
Grazie per il lavoro ma io con Excel 2003 Sp3 su Seven Professional 32 bit
scarico solo le prime 3 colonne.
Genere canale
Posizione
Nome Canale

Tutte le altre colonne sono vuote ...
c'e' una cartella TEMP in C:\ ?
 
Tutto OK !!

jumpjack ha scritto:
c'e' una cartella TEMP in C:\ ?

Si c'è.
L'ho svuotata.

Ora l'excel riempie tutte le colonne.

Grazie ancora jumpjack !!
 
jumpjack ha scritto:
c'e' una cartella TEMP in C:\ ?
Era anche il mio problema. Dici che è possibile, in una prossima versione, usare la temp dell'utente (leggendola dall'ambiente) in modo che non sia più necessario creare la cartella in c:\ ?
grazie e complimenti per il tuo lavoro
 
nicksoft ha scritto:
Era anche il mio problema. Dici che è possibile, in una prossima versione, usare la temp dell'utente (leggendola dall'ambiente) in modo che non sia più necessario creare la cartella in c:\ ?
grazie e complimenti per il tuo lavoro
Se in VBA si possono leggere le variabili d'ambiente, sì.
Indagherò.
 
Complimenti!

Ottimo lavoro! Finalmente si ritorna al cinema!
Il programma (ver 3.10) è già utilizzabile così com'è ma volevo segnalarti alcuni malfunzionamenti e chiedere chiarimenti con l'intento di migliorare il sw.
1) Il link dati porta ad un file con estensione ".do" (Db Oracle?) scaricabile o apribile (anche con notepad) ma che contiene comunque la trama visibile con doppio click. A cosa serve?
2) Il link pagina non funziona
3) Alla luce della nuova programmazione Sky eliminerei la voce "hd" nella finestra scarica che infatti se settata non scarica nulla
4) A cosa serve il foglio Excel "Dettagli"?
5) Non ho capito a cosa servono le opzioni "Forza scaricamento" e "Trame (lento)". Se selezionati, uno o entrambi, non riesco a vedere differenze rispetto allo scaricamento senza selezionarli.
Ti ringrazio ancora per l'ottimo lavoro sicuramente apprezzato da tutti e ti saluto.
 
niente con mac nn riesco farlo funzionare.
ho openoffice apro la macro ma niente dà un errore di compilazione.
avete qlk consiglio da darmi?
grazie
 
Aspettare che esca Office Mac 2011, che ripristinerà il supporto alle macro in Excel (sperando che non ci siano comandi non supportati), oppure cercare di tradurla in AppleScript o ObjectiveC.
 
Marcellotwo ha scritto:
Ottimo lavoro! Finalmente si ritorna al cinema!
Il programma (ver 3.10) è già utilizzabile così com'è ma volevo segnalarti alcuni malfunzionamenti e chiedere chiarimenti con l'intento di migliorare il sw.
1) Il link dati porta ad un file con estensione ".do" (Db Oracle?) scaricabile o apribile (anche con notepad) ma che contiene comunque la trama visibile con doppio click. A cosa serve?
A scaricare il file originale da cui estraggo la trama. In effetti forse è inutile... :icon_rolleyes:
Non è oracle, è un file di testo in formato JSON.

2) Il link pagina non funziona
Infatti non ho controllato se funzionava. :D

3) Alla luce della nuova programmazione Sky eliminerei la voce "hd" nella finestra scarica che infatti se settata non scarica nulla
Ah, quindi non ha cambiato nome? E' stata solo eliminata la sezione quando tutti i canali sono diventati HD?

4) A cosa serve il foglio Excel "Dettagli"?
A visuaizzare solo i risultati della ricerca per singolo canale e/o evento, mostrando per gli eventi trovati anche le trame complete.

5) Non ho capito a cosa servono le opzioni "Forza scaricamento"
Se hai già usato almeno una volta la macro, sull'hard disk ci sono già i file scaricati, quindi è inutile perdere tempo a riscaricarli. Se pero' i file sono vecchi, va forzato lo scaricamento.

e "Trame (lento)".
Il programma diventa circa un centinaio di volte più lento :5eek:, perche' scarica le trame di ogni singolo evento!

niente con mac nn riesco farlo funzionare.
ho openoffice apro la macro ma niente dà un errore di compilazione.
avete qlk consiglio da darmi?
grazie
Non mi risulta che le macro in Visual Basic girino su openoffice, bisognerebbe riscriverle da zero in python...

Comunque mi ha contattato uno sviluppatore Linux che ha detto che proverà a fare il porting.

Mi chiedo se non si potrebbe usare anche semplicemente Javascript per scrivere la macro JSON_extractor: così girerebbe su qualunque piattaforma... forse persino su cellulare!
Javascript puo' creare file su disco? :eusa_think:
 
Nuova versione 3.2.0:
' 3.2.0
' Implementata listbox con canali (utente Rob64 di digital-forum)
' Corretta colonna link pagina
' Sveltito scaricamento trame
' Riordinata interfaccia
' Ripristinata funzionalità del tasto CANCELLA FOGLIO in maschera
' Eliminato genere HD (non piu' disponibile online perche' integrato in CINEMA)

DOWNLOAD
 
Disattivare lo ri-scaricamento dei file causa un problema, perche' nei nomi dei file non è specificata la data dicaricamento...
Versione che corregge il problema:


Nuova versione 3.2.1:
' 3.2.1
' Modificato nome dei file salvati su disco (aggiunta data)
' Modificata cartella salvataggio file temporanei (non piu' C:\temp ma la cartella del programma)
' Corretto bug minore su una checkbox
DOWNLOAD
 
Capisco che non si può accontentare tutti ma la modifica della C:\Temp non mi sembra una buona idea perchè mi ritrovo una sfilza di file di lavoro (inutili per un accesso diretto) nella stessa cartella dove risiedono per default tutti i files di Excel di uso quotidiano! Una mescolanza davvero orribile!:eusa_naughty:
Pur non campendo qual'era il problema di allocare i files in C:\Temp le soluzioni (ammesso che tu abbia voglia di approntare una ver 3.2.2) potrebbero essere diverse:
1) La cartella di sistema "C:\Users\Fiorenzo\AppData\Local\Temp" (Nel caso di Windows 7)
2) La cartella dove si trova il file "palinsesti-sky-321.xls" che poi naturalmente l'utente metterà dove vuole
3) Tramite un pulsante "Configurazione" lasciarlo decidere all'utente:D
4) Solo al momento del primo utilizzo far aprire "Esplora risorse" e lasciar scegliere all'utente .

Per il resto ora il programma è perfetto, meglio di prima!
 
guida sky su linux

ho creato un piccolo script in python che crea un file csv con i palinsesti dei canali sky. basta importarlo in excel, openoffice o quello che preferite per crearvi il vostro palinsesto personalizzato.

è utile per chi usa linux e non può usare il file excel creato da jumpjack (dovrebbe funzionare anche su altre piattaforme)

per adesso funziona solo con i canali cinema, se lo trovate utile posso aggiungere anche gli altri generi (intrattenimento, sport, ecc)

per usarlo basta estrarre il file zip e nella cartella estratta eseguite il comando:

python skycsv.py


ecco il programma:
http://dl.dropbox.com/u/6912991/skycsv.zip
 
Marcellotwo ha scritto:
Capisco che non si può accontentare tutti ma la modifica della C:\Temp non mi sembra una buona idea perchè mi ritrovo una sfilza di file di lavoro (inutili per un accesso diretto) nella stessa cartella dove risiedono per default tutti i files di Excel di uso quotidiano! Una mescolanza davvero orribile!:eusa_naughty:
Pur non campendo qual'era il problema di allocare i files in C:\Temp le
E' che non tutti hanno la cartella Temp in C: !

soluzioni (ammesso che tu abbia voglia di approntare una ver 3.2.2) potrebbero essere diverse:
1) La cartella di sistema "C:\Users\Fiorenzo\AppData\Local\Temp" (Nel caso di Windows 7)
Si potrebbe fare leggendo la variabile di ambiente... pero' ho scoperto che esistono DUE variabili d'ambiente (TEMP e TMP), quindi...? :eusa_think:

2) La cartella dove si trova il file "palinsesti-sky-321.xls" che poi naturalmente l'utente metterà dove vuole
E' quello che succede adesso! :eusa_think:

3) Tramite un pulsante "Configurazione" lasciarlo decidere all'utente:D
2 palle.... :eusa_whistle: ;)

4) Solo al momento del primo utilizzo far aprire "Esplora risorse" e lasciar scegliere all'utente .
V. punto 3.

@francescoeightfour
Grazie per la collaborazione, immagino che molti apprezzeranno.
Posso mettere il tuo file sul mio sito?
 
E se facessimo un port in php? Cosi' funzionerebbe persino sui cellulari, visto che l'elaborazione avverrebbe sul server! (su www.110mb.com c'e' il supporto gratuito per php).
 
Indietro
Alto Basso