Συλλογικός προγραμματισμός: eradio-playlist-generator  Το θέμα επιλύθηκε

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Συλλογικός προγραμματισμός: eradio-playlist-generator  Το θέμα επιλύθηκε

Δημοσίευσηαπό simosx » 05 Ιούλ 2011, 18:46

Αποτέλεσμα του έργου - λίστες αναπαραγωγής για άμεση χρήση (19 Ιουλίου 2012)

24radio

Μορφή XSPF: https://raw.github.com/ubuntu-gr/eradio ... ylist.xspf
Μορφή PLS: https://raw.github.com/ubuntu-gr/eradio ... aylist.pls

e-radio
Μορφή XSPF: https://raw.github.com/ubuntu-gr/eradio ... ylist.xspf
Μορφή PLS: https://raw.github.com/ubuntu-gr/eradio ... aylist.pls

Οδηγίες: Πάρτε ένα από τα παραπάνω αρχεία και εισάγετέ τα στο πρόγραμμα αναπαραγωγής μουσικής. Παραδείγματα τέτοιων προγραμμάτων είναι Banshe και Rhythmbox.


Στο https://github.com/ubuntu-gr/eradio-playlist-generator ξεκινάμε τον προγραμματισμό για λογισμικό όπου
παράγει λίστα αναπαραγωγής (playlist) με e-Radio σταθμούς στην Ελλάδα.

Θέλουμε να γράψουμε νέο πρόγραμμα όπου παράγει λίστα αναπαραγωγής, κατά το πρόγραμμα που έφτιαξε ο ftso,
viewtopic.php?f=6&t=15885

Μπαίνουμε στη διαδικασία αυτή για να μάθουμε να προγραμματίζουμε μαζί.

1. Φτιάξτε λογαριασμό στο http://www.github.com κατά τις οδηγίες και δώστε εδώ το όνομα χρήστη (username),
viewtopic.php?f=9&t=19319
2. Με
Κώδικας: Επιλογή όλων
git clone git://github.com/ubuntu-gr/eradio-playlist-generator.git
είστε σε θέση να κλωνοποιήσετε το αποθετήριο για να ξεκινήσετε τον προγραμματισμό.

Για οποιεσδήποτε απορίες, γράψτε παρακάτω.
Τελευταία επεξεργασία από simosx και 19 Ιούλ 2012, 19:27, έχει επεξεργασθεί 3 φορά/ες συνολικά
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Συλλογικός προγραμματισμός: eradio-playlist-generator

Δημοσίευσηαπό simosx » 05 Ιούλ 2011, 19:25

Πρόσθεσα στο πρόγραμμα, τώρα τυπώνει (ως κείμενο) τη λίστα με τους ραδιοφωνικούς σταθμούς.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Συλλογικός προγραμματισμός: eradio-playlist-generator

Δημοσίευσηαπό simosx » 06 Ιούλ 2011, 08:45

Έχω αρκετές γραμμές κειμένου της μορφής
Κώδικας: Επιλογή όλων
{ mediatitle: "Υδρόγειος 106,9", city: "ΗΡΑΚΛΕΙΟ", mediaid: 181, logo: "/logos/gr/mini/ydrogeios.gif" },


Υπάρχει κάποιος όμορφος τρόπος με την Python ώστε να μετατραπεί σε δομή (όπως dict);

Δηλαδή, π.χ.
Κώδικας: Επιλογή όλων

a = { "mediatitle": "Υδρόγειος 106,9", "city": "ΗΡΑΚΛΕΙΟ", "mediaid": 181, "logo": "/logos/gr/mini/ydrogeios.gif" }
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Συλλογικός προγραμματισμός: eradio-playlist-generator

Δημοσίευσηαπό pmav99 » 06 Ιούλ 2011, 11:29

Καλημέρα Σίμο

Ερώτηση : το 106,9 είναι δυνατόν να μετατραπεί σε 106.9 δηλαδή να έχει τελεία αντί για κόμμα? Αν ναι είναι πολύ εύκολο. Και από python γίνεται να το αλλάξεις αυτό αλλά ίσως είναι πιο ευκολο να το κάνεις κατευθείαν στο αρχείο.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Συλλογικός προγραμματισμός: eradio-playlist-generator

Δημοσίευσηαπό sv1jsb » 06 Ιούλ 2011, 11:40

Αν μπορείς ανέβασε και στο github ένα αρχείο δοκιμών με πραγματικές εγγραφές.
Στις γραμμές υπάρχουν οι αγκύλες και το τελευταίο κόμμα;
Αυτές τις γραμμές πιο πρόγραμμα τις παράγει;
Μήπως είναι πιο εύκολο σε αυτό το πρόγραμμα να γίνει μετατροπή ώστε το αποτέλεσμα να είναι:
Κώδικας: Επιλογή όλων

"mediatitle":"Υδρογειος 106.9","....":"...."

Οπότε και θα ήταν πιο εύκολο.
Programming blog
Γνώσεις ⇛ Linux: Καλά ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 10.04 64bit
Προδιαγραφές ⇛ Phenom II │ 8GB │ 2xATI 5670 │ HD Audio │ TFT 23"
Άβαταρ μέλους
sv1jsb
babeTUX
babeTUX
 
Δημοσιεύσεις: 88
Εγγραφή: 01 Ιουν 2011, 23:50
Εκτύπωση

Re: Συλλογικός προγραμματισμός: eradio-playlist-generator

Δημοσίευσηαπό pmav99 » 06 Ιούλ 2011, 11:44

Εν ολίγοις, αφού έχει γίνει το κόμμα τελεία, και έχεις διαβάσει το αρχείο γραμμή γραμμή, θα έχεις ένα τέτοιο string
Κώδικας: Επιλογή όλων
line = '{ mediatitle: "Υδρόγειος 106.9", city: "ΗΡΑΚΛΕΙΟ", mediaid: 181, logo: "/logos/gr/mini/ydrogeios.gif" },'

Το καθαρίζεις λοιπόν από τα περιττούς characters και δίνεις:
Κώδικας: Επιλογή όλων
line = line[2:-3]
mydict = dict((k.strip(), v.strip()) for k,v in (item.split(":") for item in line.split(",")))

Ίσως χρειαστεί να αφαιρέσεις περισσότερους χαρακτήρες από το τέλος για να φύγει και ο "\n"

Μπορεί να γραφεί και με λιγότερο ιδιωματικό κώδικα, αλλά αυτό θα είναι το καλύτερο από πλευράς απόδοσης. Python 3 για να μην υπάρχουν μπλεξίματα με τα encodings.

Αν θες ανέβασε το πλήρες αρχείο κάπου.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Συλλογικός προγραμματισμός: eradio-playlist-generator

Δημοσίευσηαπό simosx » 06 Ιούλ 2011, 12:09

sv1jsb έγραψε:Αν μπορείς ανέβασε και στο github ένα αρχείο δοκιμών με πραγματικές εγγραφές.


Υπάρχει και είναι το αρχείο radiolist.js.
Εκτέλεσε
Κώδικας: Επιλογή όλων
./playlist-generator.py

και θα δεις ότι το πρόγραμμα διαβάζει αυτό το παράξενο .js (το λαμβάνουμε από δικτυακό τόπο που έχει την πλήρη λίστα)
και εξάγει γραμμές όπως αυτήν που δίνω παραπάνω.

pmav99 έγραψε:
Ερώτηση : το 106,9 είναι δυνατόν να μετατραπεί σε 106.9 δηλαδή να έχει τελεία αντί για κόμμα? Αν ναι είναι πολύ εύκολο. Και από python γίνεται να το αλλάξεις αυτό αλλά ίσως είναι πιο ευκολο να το κάνεις κατευθείαν στο αρχείο.


Είναι καλύτερο το πρόγραμμα σε Python να μπορέσει να ανταπεξέλθει στο πρόβλημα. Π.χ. να καταλαβαίνει από quoted strings.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Συλλογικός προγραμματισμός: eradio-playlist-generator

Δημοσίευσηαπό pmav99 » 06 Ιούλ 2011, 13:24

simosx έγραψε:
pmav99 έγραψε:
Ερώτηση : το 106,9 είναι δυνατόν να μετατραπεί σε 106.9 δηλαδή να έχει τελεία αντί για κόμμα? Αν ναι είναι πολύ εύκολο. Και από python γίνεται να το αλλάξεις αυτό αλλά ίσως είναι πιο ευκολο να το κάνεις κατευθείαν στο αρχείο.


Είναι καλύτερο το πρόγραμμα σε Python να μπορέσει να ανταπεξέλθει στο πρόβλημα. Π.χ. να καταλαβαίνει από quoted strings.

Όπως το λες, θα χρειαστούν regular expressions. Δεν έχω πολυασχοληθεί αλλά αν δεν το έχει δει κανείς, ίσως προλάβω να το κοιτάξω αύριο

Κώδικας: Επιλογή όλων

class PlaylistGenerator:
def __init__(self):
with codecs.open(RADIOLIST, 'r', 'iso-8859-7') as f:
text = f.readlines() # Create a list with the lines
text = text[1:-1] # Remove first and last lines
text[-1] += "," # Add a comma at the last entry
for line in text:
line = line[2:-4] # clean-up each line
print line


Όταν ανοίγεις αρχεία θεωρείται γενικά καλύτερο να το κανεις με το with statement. Κάθε line είναι ένα string της μορφής
Κώδικας: Επιλογή όλων
mediatitle: "Ράδιο Κυπαρισσία 93,6", city: "ΚΥΠΑΡΙΣΣΙΑ", mediaid: 44, logo: "/logos/gr/mini/936.gif"
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Συλλογικός προγραμματισμός: eradio-playlist-generator

Δημοσίευσηαπό simosx » 06 Ιούλ 2011, 13:32

Off topic:
@pmav99: φαίνεται να είσαι σε καλό δρόμο. Φτιάξε λογαριασμό στο github και γράψε το όνομα χρήστη για να σε προσθέσω, και να βάλεις τον κώδικα όταν αυτός είναι έτοιμος.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Συλλογικός προγραμματισμός: eradio-playlist-generator

Δημοσίευσηαπό pmav99 » 06 Ιούλ 2011, 14:35

Γίνεται και χωρίς RE. Αντιστρέφεις το string και κάνεις split σε όλες εκτός από την τελευταία εμφάνιση του ",". Ξανααντιστρέφεις τα νέα string και επιστρέφεις τη λίστα που δημιουργήθηκε. Δεν είναι full-proof αλλά δουλεύει.
Κώδικας: Επιλογή όλων

import codecs

RADIOLIST = 'radiolist.js'

class PlaylistGenerator:
def __init__(self):
self.stations = []

self.read_stations()

def read_stations(self):
with codecs.open(RADIOLIST, 'r', 'iso-8859-7') as f:
text = f.readlines() # Create a list with the lines
text = text[1:-1] # Remove first and last lines
text[-1] += "," # Add a comma at the last entry
for i,line in enumerate(text):
line = line[2:-4] # clean-up each line

line = self._split_line(line)

self.stations.append(dict(
(k.strip(), v.strip()) for k,v in (
item.split(":", 1) for item in line)))

def _split_line(self, s, sep = ",", ignore = 1):
"""
reverses string s and splits it at sep.
The first `ignore` occurences of sep are ingored
"""
numbers = max(s.count(sep) - ignore, 0)
new_s = []
rev_s = s[::-1]
rev_s = rev_s.split(sep, numbers)
for item in rev_s:
new_s.append(item.strip()[::-1])
return new_s

if __name__ == '__main__':
playlist = PlaylistGenerator()
for dic in playlist.stations:
for key, value in dic.iteritems():
print key, value

Off topic:
ως pmav99 είμαι και στο github
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Επόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron