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

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

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

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

Δημοσίευσηαπό pmav99 » 08 Ιούλ 2011, 00:08

Λίστα είναι, αλλά μέσα έχει dictionaries. Αυτό που λέω είναι το εξής:

1. To match.groupdict() επιστρέφει ένα dictionary
2. Έχουμε το container stations (λίστα για την ώρα)
Κώδικας: Επιλογή όλων
self.stations = []

3. Κάθε στοιχείο του container αυτού είναι ένα dictionary
Κώδικας: Επιλογή όλων
self.stations.append(match.groupdict())

άρα όταν λέμε
Κώδικας: Επιλογή όλων
for station in self.stations

Το station είναι ένα dictionary. Το station είναι ένα αυτόνομο object. Τα "cname" και το "weblink" ανήκουν στο σταθμό και όχι κάπου αλλού, για αυτό λέω να μην είναι σε ξεχωριστό dictionary. To station είναι η βασική μας μονάδα.

To self.stations δεν είναι υποχρεωτικό να είναι λιστα. Απλά έτσι το εχουμε κάνει για την ώρα.

Από εκεί και πέρα, αυτό που προτείνεις στο δεύτερο code tag είναι συντακτικό λάθος. Μήπως εννοείς nested dicts, δηλαδή αυτό?
Κώδικας: Επιλογή όλων

stations = {'1197': { 'logo': u'/logos/gr/mini/nologo.gif', 'title': u'\u0386\u03bb\u03c6\u03b1 Radio 96', 'city': u'\u03a3\u0395\u03a1\u03a1\u0395\u03a3'}, ...}


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

Οι λίστες είναι κατάλληλες όταν θέλεις να διατρέχεις τα στοιχεία σου διαδοχικά το ένα μετά το άλλο με συγκεκριμένη σειρά. Σε ενδιαφέρει δηλαδή το index. Τα dicts έχουν νόημα όταν δε σε ενδιαφέρει η σειρά (δεν είναι sorted γιατί) αλλά σε ενδιαφέρει να μπορείς να βρεις κάποιο συγκεκριμένο στοιχείο του βάση κάποιου key-value ζεύγους

Αν θέλουμε να βρίσκουμε τον 56ο σταθμό της λίστας. Θέλουμε list. Αν θέλουμε να βρίσκουμε τον σταθμό "Ubuntu.gr radio" θέλουμε dict.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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

Τώρα βλέπω την απάντησή σου. Έκανα πριν λίγο το παρακάτω commit. Δες το και πες μου. Κάτι που βοηθάει είναι στην εύκολη προσθήκη του url στο dict.


Νέα προσθήκη: https://github.com/ubuntu-gr/eradio-pla ... fcc37554cc

έγραψε:Using dict of dicts instead of list of dicts.

* Changed self.stations to dict, using 'id' (Station ID) as key.
* Added TESTCOUNT (=3) as testing count for web access.
* Using http://www.e-radio.gr/asx/SID.asx as format for URL.
προσωπικό ιστολόγιο ϗ πλανήτης 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

Δημοσίευσηαπό sv1jsb » 08 Ιούλ 2011, 00:47

Αν είναι σίγουρο για το SID ότι βρίσκεται πάντα στο :
Κώδικας: Επιλογή όλων

http://www.e-radio.gr/asx/SID.asx


τότε το με τελευταίο commit μου είναι έτοιμο.
Δουλεύει κανονικά για τα 3 πρωτα που είναι το TESTCOUNT.
Φόρτωσα το pls στο rythmbox και στο vlc και τους παίζουν.

(Μήπως πρέπει να σκεφτούμε τα threads γιατί παίρνει πολύ ώρα;)
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

Δημοσίευσηαπό sv1jsb » 08 Ιούλ 2011, 01:04

Έβαλα και το TESTCOUNT στο make_pls γιατί είχε NumberofEntries 657 και μόνο 3 σταθμούς.
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

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

Έχω αυτό το patch όπου δεν αναλύει τους συνδέσμους .asx ακόμα και απλά τους χρησιμοποιεί.
Όπως βλέπω, για το .PLS μπορούμε να βάλουμε ένα URL μόνο, οπότε εδώ έχει νόημα να βάλουμε το .asx.

Ακόμα, είδα ότι σε URL δίνουν επιλογή για http://... και mms://..., το mms://... απλά δε λειτουργεί.

Κώδικας: Επιλογή όλων
diff --git a/playlist-generator.py b/playlist-generator.py
index a46dea1..27b0715 100755
--- a/playlist-generator.py
+++ b/playlist-generator.py
@@ -35,6 +35,7 @@ class Spider(HTMLParser):
HTMLParser.__init__(self)

self.src = ""
+ self.urls = []

req = urllib.urlopen(url)
self.feed(req.read())
@@ -44,6 +45,13 @@ class Spider(HTMLParser):
for attr in attrs:
if attr[0] == "src" and attr[1].startswith("playerX"):
self.src = attr[1]
+ elif tag == "ref":
+ for attr in attrs:
+ if attr[0] == 'href':
+ self.urls.append(attr[1])
+ else:
+ print("Found strange ASX:", attr)
+

class PlaylistGenerator(object):
def __init__(self):
@@ -79,9 +87,19 @@ class PlaylistGenerator(object):
self.stations[match.groupdict()['id']] = match.groupdict()

def print_stations(self):
- for sid in self.stations.keys():
- print(u"Τίτλος : {0}\nΠόλη : {1}\nId : {2}\nLogo : {3}\n".format(
- self.stations[sid]['title'], self.stations[sid]['city'], sid, self.stations[sid]['logo']))
+ for (index, sid) in enumerate(self.stations.keys()):
+ print(u"Τίτλος : {0}\nΠόλη : {1}\nId : {2}\nLogo : {3}\nURL : {4}\n".format(
+ self.stations[sid]['title'], self.stations[sid]['city'], sid, self.stations[sid]['logo'], self.stations[sid]['url']))
+ if index >= TESTCOUNT:
+ break
+
+ def print_urls(self):
+ for (index, sid) in enumerate(self.stations.keys()):
+ print("Trying out", self.stations[sid]['url'])
+ spider = Spider(self.stations[sid]['url'])
+ print(sid, spider.urls)
+ if index >= TESTCOUNT:
+ break

def get_radiolist(self):
f = urllib.urlopen(self.url_rlist)
@@ -175,7 +193,8 @@ class PlaylistGenerator(object):
if __name__ == '__main__':
playlist = PlaylistGenerator()
playlist.get_radiostation_files()
- #playlist.print_stations()
+ playlist.print_urls()
+ playlist.print_stations()
playlist.make_pls()
print(u'Created .PLS playlist file, playlist.pls')
playlist.make_xspf()


Στο patch αυτό χρησιμοποιούμε το Spider και για την ανάλυση των .asx.
προσωπικό ιστολόγιο ϗ πλανήτης 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

Δημοσίευσηαπό sv1jsb » 08 Ιούλ 2011, 17:48

Έφτιαξα ένα νέο branch το thread, όπου έχω γράψει μια multithreading έκδοση του προγράμματος. Ρίξτε μια ματιά. Ο κώδικας είναι πάνω κάτω ο ίδιος.
Λείπει η κεντρική κλάση και όλες οι μέθοδοι της έχουν γίνει συναρτήσεις.
Με τέσσερα thread τελειώνει σε λιγότερο από 5 λέπτα. (Πρέπει να επηρεάζει τον χρόνο και η σύνδεση του καθενός).
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 » 08 Ιούλ 2011, 18:08

Ψάχνω για ΒΒCode για flame war και δε βρίσκω!!!
sv1jsb έγραψε:Έφτιαξα ένα νέο branch το thread

Εδώ με ένα και δεν παλεύεται το GIT. Που είναι το γλυκούλι το mercurial?!?!
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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

pmav99 έγραψε:
Εδώ με ένα και δεν παλεύεται το GIT. Που είναι το γλυκούλι το mercurial?!?!


Η άσκηση που κάνουμε εδώ είναι για να μάθουμε όσο το δυνατόν καλύτερα το git οπότε η εισαγωγή κλάδου (branch) είναι και στην εκπαιδευτική διαδικασία.
Πες τι ακριβώς πρόβλημα αντιμετωπίζεις. Υπάρχει git reference, http://gitref.org/ και αρκετά βίντεο στο διαδίκτυο.

sv1jsb έγραψε:
Έφτιαξα ένα νέο branch το thread, όπου έχω γράψει μια multithreading έκδοση του προγράμματος. Ρίξτε μια ματιά. Ο κώδικας είναι πάνω κάτω ο ίδιος.
Λείπει η κεντρική κλάση και όλες οι μέθοδοι της έχουν γίνει συναρτήσεις.
Με τέσσερα thread τελειώνει σε λιγότερο από 5 λέπτα. (Πρέπει να επηρεάζει τον χρόνο και η σύνδεση του καθενός).


1. Πιστεύω ότι είναι καλό να διατηρήσουμε τις δύο εκδόσεις, με χρήση του κλάδου thread.
2. Νομίζω ότο προσεγγίζουμε τη λύση, οπότε είναι καλό να φτιάξουμε τα παραγόμενα αρχεία, pls και xspf ώστε να τα δώσουμε στα μέλη μας.
Μπορείς να τα βάλεις π.χ. σε κάποιο dropbox; Κάποιος άλλος χώρος που είναι καλό να τα φιλοξενήσουμε (όχι σε rapidshare, κτλ);
3. Προσπαθούμε να μην χρησιμοποιούμε πολλούς πόρους από το e-radio.gr, οπότε από τη στιγμή που φτιάξαμε τη λίστα είμαστε εντάξει
και απλά ελέγχουμε για ανανεώσεις με νεότερους σταθμούς.
προσωπικό ιστολόγιο ϗ πλανήτης 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

Δημοσίευσηαπό medigeek » 08 Ιούλ 2011, 21:18

Κάνω process τα links, τα βάζω σε μια "βάση δεδομένων" με shelve module. Υπάρχουν IDs σταθμών που δεν δουλεύουν και τα βάζω σε blacklist.
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 09 Ιούλ 2011, 00:52

Τελειωσα, αν και ο κωδικας θέλει ένα γενικό καθάρισμα και.. περιποίηση προσώπου. :P

Blacklist: ['1715', '1887', '307', '1803', '1758', '1805', '801']
π.χ. http://www.e-radio.gr/player/player.el.asp?sid=801
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

ΠροηγούμενηΕπόμενο

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