Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [Python] Lista m3u dinamica

    Salve a tutti, sono qui per chiedere consiglio in merito ad uno script che vorrei costruire.
    Ho una lista m3u relativa ad Iptv che scarico da internet, la struttura del file è come quella seguente:
    codice:
    #EXTM3U
    #EXTINF:-1,Rai 1 HD
    url : percorso....................................217.ts
    #EXTINF:-1,Rai 2 HD
    url : percorso....................................225.ts
    #EXTINF:-1,Rai 3 HD
    url : percorso....................................218.ts
    etc.etc....

    Mentre la struttura rimane invariata il contenuto muta periodicamente, capita che si aggiungono altri canali o si modifica il percorso url di quelli già esistenti, in pratica muta il numerino finale.
    Ho iniziato a studiare il linguaggio di programmazione Python per risolvere il mio problema iniziale: modificare il nome del canale in modo da renderlo facilmente associabile, sia al suo logo, sia ad una guida TV che riportavano entrambi nomi leggermente differenti.

    Lo script che ho così costruito scaricava la lista e trasformava "Rai 1HD" semplicemente in "Rai 1".

    codice:
    #scarica il file dal sito e lo converte in un file txt da leggere
    import urllib2
    m3ufile = urllib2.urlopen("link_per_scaricare_il_mio_file")
    output = open('lista.txt','w')
    output.write(m3ufile.read())
    output.close()
    
    def format(fname):
        # Lettura del file di testo origine
        f = open("lista.txt","r")
        testo1 = f.read()
        f.close()
        # Definizione del dizionario delle vocali da sostituire
        diz = {"Rai 1 HD":"Rai 1","Rai 2 HD":"Rai 2","Rai 3 HD":"Rai 3"}
        for item in diz:
            testo1 = testo1.replace(item, diz[item])
            
        # Scrittura del file con il testo aggiornato
        f = open("lista_output.m3u", 'w')
        f.write(testo1)
        f.close()
        # print testo1

    Tutto funziona a perfezione e il player legge perfettamente i canali rinominati e li classifica secondo l'ordine della lista (esempio 1). Ciò che ora volevo creare è una lista personalizzata di canali nel senso di dargli un nuovo ordine. (esempio 2)
    codice:
    Esempio 1:--------------------------Esempio 2:
    1)Rai 1----------------------------->1) Rai 3
    2)Rai 2----------------------------->2) Rai 1
    3)Rai 3----------------------------->3) Rai 2
    Vichiedo un suggerimento su come strutturare lo script in quanto devo spostare stringhe di testo in un ordine preciso ma devo tener conto del fatto che ciascun canale ha un suo nome che fa riferimento ad un percorso che a sua volta può variare nel tempo.

    Cercandodi schematizzare:
    z = internet
    y = percorso
    x = nome canale

    x=f(y) ma y=f(z)
    codice:
    #EXTM3U
     #EXTINF:-1,(x)
    url : percorso....................................(y).ts
    La poca esperienza mi porta a chiedere consiglio è il fatto che ci siano due"dipendenze" mi crea molte difficoltà. Vi ringrazio anticipatamente per l'attenzione.
    Ultima modifica di MItaly; 10-11-2015 a 16:55

  2. #2
    Non è complicato lavorando per righe e tenendole separate in una lista; il metodo esatto dipende da come intendi specificare il riordino da effettuare - in altre parole, tu vuoi che un certo canale vada ad un certo numero e gli altri slittino? O vuoi specificare le posizioni di tutti? O vuoi che un certo canale venga prima di un altro e gli altri come sono nella lista originale? O intendi solo scambiare certi canali?
    Ultima modifica di MItaly; 10-11-2015 a 22:42
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Grazie MItaly per avermi dedicato attenzione e per aver mostrato interesse.
    In effetti la mia lista è formata da una parte di canali dinamici e da una parte di canali statici relativi all'on demand. Questi ultimi sono posizionati in fondo ed è la sezione soggetta all'integrazione di ulteriori canali.
    La mia idea è quella di movimentare gran parte dei canali dinamici (Rai 1,Rai 2 etc...) e lasciare invariati quelli statici (on demand), altri vorrei eliminarli perchè non ne usufruisco.
    Volendo fornire un esempio:

    1)Rai 1----------------------------->1) Rai 3
    2)Rai 2----------------------------->2) Rai 1
    3)Rai 3----------------------------->3) Rai 2
    ...
    ...
    9)Tv estera -------------------------> (ELIMINARE)
    ...
    ...
    401)Canale on demand 1 -------------> 401)Canale on demand 1
    402)Canale on demand 2 -------------> 402)Canale on demand 2
    403)Canale on demand 3 -------------> 403)Canale on demand 3
    ______FINE LISTA_____ -------------> 404) Canale on demand 4 (NUOVO)
    ________________________________________FINE LISTA_____

    Immagino che dovrò armarmi di molta pazienza in quanto i canali dinamici sono oltre 200 ma non è un problema se pensi che nel dizionario dello script ho inserito i nomi di tutti i canali.
    Sono qui soprattutto per imparare e per ricevere un consiglio su come lavorare in modo efficiente. Spero di essere stato chiaro se hai altre domande sono a completa disposizione.
    Ultima modifica di Nikopeeee; 11-11-2015 a 01:06 Motivo: correzione sintassi linguistica

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Il punto è che non è chiaro secondo quale criterio vuoi ordinarli
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Vorrei specificare la posizione di ciascun canale secondo un ordine da me stabilito.
    Non c'è un vero e proprio criterio al massimo, se conviene, potrei dargli come riferimento una lista che mi sono costruito da solo spostando manualmente tutte le righe.

  6. #6
    Sì ma l'input qual è? Una lista di canali (dati come? come numero nella sequenza iniziale? come nome? altro ancora?) che devono restare in quell'ordine? Una mappa dall'identificatore del canale a posizione finale nella sequenza? Una lista di scambi da effettuare? I canali che non vengono citati in queste liste come devono finire? Non dare le specifiche come i commerciali...
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Chiedo scusa se mi sono espresso male.
    Ho creato un file canali.zip che mostra 2 tabelle:

    Nella prima sono presenti i dati così come entrano e così come vorrei che uscissero.
    (Ho omesso il percorso del canale ma ho riportato il numerino con il quale finisce (y))

    La seconda tabella invece è più semplicistica e mostra l'ordine dei canali sulla lista sorgente e sulla lista che ne dovrebbe derivare (ho usato anche i colori per identificare gli spostamenti).

    E' più facile da visualizzare che da spiegare.
    Spero di essere riuscito nel mio intento. Grazie mille!

  8. #8
    Ad occhio mi sembra che tu stia chiedendo una cosa diversa... ovvero, assegnare una categoria ad ogni canale, raggruppare insieme i canali di ogni categoria e poi ordinare le categorie secondo un certo ordine, corretto? O più semplicemente vuoi avere una rimappatura canale X finisce in posizione N? In tal caso, quelli che non vengono citati dalla rimappatura che fine devono fare?
    Nella prima sono presenti i dati così come entrano e così come vorrei che uscissero. ... E' più facile da visualizzare che da spiegare.
    Continui a dare le specifiche come i commerciali... dare esempi != dare specifiche; "si vede" non è una specifica o sai descrivere un algoritmo preciso, o stiamo parlando di aria fritta
    Ultima modifica di MItaly; 17-11-2015 a 00:39
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Misá che con il metodo "commerciale" ho fatto solo casino provo a rimediare:

    Vorrei poter ordinare ciascun canale X mettendolo in posizione N eccetto per l'ultima parte della lista, quella relativa a tutti i servizi "on demand" che vorrei fosse copiata così com'è nel file output. (Questo perché è spesso soggetta ad integrazioni di ulteriori canali)
    Quelli che non vengono citati nella rimappatira possono essere rimossi.

    il file output presenterà anche il raggruppamento dei canali in sottogruppi, e ciò sono in grado di farlo seguendo il comune schema dei file m3u. inserisco accanto al nome del primo canale di una determinata categoria, il titolo del gruppo di appartenenza e risolvo!

    EXTINF 0, tvg-name="Nome canale" group-title="Gruppo#",Nome canale
    url:....

    Quindi il mio problema è semplicemente spostare il canale X in posizione N, cancellare quelli di cui non ho bisogno e copiare così com'è la sezione "on demand". Grazie ancora !

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.