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

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

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

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

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

H super() έχει να κάνει με την inheritance. Στην προκειμένη περίπτωση δεν έχει ιδιαίτερο νόημα είτε μπει είτε όχι (γιατί δεν έχουμε inheritance) αλλά προσωπικά το βάζω παντα. Σε python 3 η σύνταξη απλοποιείται λίγο.

Off topic:
Για περισσότερες πληροφορίες δες τα παρακάτω καθώς και τα links που περιέχουν.
http://python.org.gr/index.php?option=c ... Itemid=107
http://python.org.gr/index.php?option=c ... Itemid=107
http://python.org.gr/index.php?option=c ... Itemid=107
http://rhettinger.wordpress.com/2011/05 ... red-super/


Ποιες είναι οι διαφορές dict και namedtuple ακριβώς δε ξέρω. Για αναζήτηση σίγουρα τα dicts είναι καλύτερα από απλά tuple και lists, ιδιαίτερα όσο μεγαλώνει ο αριθμός των δεδομένων [είναι Ο(1)]. Στα namedtuples ίσως και εκεί να είναι O(1) αλλά μπορεί και όχι. Αν έχεις όρεξη παίξε λίγο με την timeit και πες μας.
Το προσόν τους σε σχέση με τα dicts είναι ότι είναι immutable, δηλαδή απαξ και δημιουργηθούν δε μπορούν να αλλάξουν τα στοιχεία τους ούτε να προστεθούν άλλα entries, οπότε γενικά μιλώντας είναι πιο δύσκολο να υπάρξουν bugs. To τι είναι κάθε φορά πιο κατάλληλο είναι ανάλογα με την περίπτωση. Σε προγράμματα αυτής της περιπλοκότητας (απλότητας πιο σωστά) δεν έχει και ιδιαίτερη σημασία.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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

έγραψε:from __future__ import print_function

Αυτό δε χρειάζεται νομίζω, από την python 2.5 και μετά το print() (με τις παρενθέσεις) δουλεύει μια χαρά: http://docs.python.org/release/2.5/ref/print.html
Δε νομίζω να χρησιμοποιήσουμε κάτι περισσότερο από απλό print("Hello my greek world") :)

Επίσης το .format() χρησιμοποιείται στο python 2.6: http://docs.python.org/library/stdtypes.html#str.format ("New in version 2.6")

έγραψε: for line in text:
line = line[2:-4] # clean-up each line
fields = re.search(REGEX_PATTERN, line)
self.stations.append(MediaData(fields.group(2), fields.group(4),
fields.group(6), fields.group(8)))

Το for loop μπορεί να αφαιρεθεί αν χρησιμοποιηθεί το
Κώδικας: Επιλογή όλων
result_list = re.findall(REGEX_PATTERN, line, re.M)

Το result_list θα είναι array με τα προαναφερθέντα.

Δεν πειράζω τον κώδικα όμως προτού το συζητήσουμε. :)

Πρόσθεσα το get_radiolist()
Κύπριος; Κόπιασε στο 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

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

To from __future__ import print_function κάνει την print να συμπεριφέρεται ακριβώς σαν την Python3. Διαφορές έχει όταν δίνεις περισσότερα από ένα arguments. Πχ `print (1, 4, 5)` (τυπώνονται και οι παρενθέσεις). Για ένα μόνο argument δεν έχει διαφορά. Επίσης αν δε βάλεις παρενθέσεις πετάει Error. Το βάζω πάντα (όπως και το division) για να είναι όσο πιο κοντά γίνεται ο κώδικας μου στην python 3. Μην αποκτάμε κακές συνήθειες :P

Ανέβασε ολοκληρωμένη τη μέθοδο με τις αλλαγές που προτείνεις.

Όταν ανοίγοκλείνουμε αρχεία, χρησιμοποιούμε το `with`. Είναι ισοδύναμο με το να κάνουμε
Κώδικας: Επιλογή όλων
try:
open(...
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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

Ωραία, έχουμε έτοιμες τις πληροφορίες που θέλουμε.
Το url του κάθε σταθμού πως θα το βρούμε;
Στο MediaData θα ήταν καλό να έχουμε άλλο ένα όρισμα url (για το url του σταθμού).
Τα δύο αρχεία που θα δημιουργηθούν τι όνομα θα έχουν;
Θα το δηλώσουμε στάνταρντ: playlist.pls, playlist.xspf ;
Ή/Και θα τα δίνει ο χρήστης στην command line;
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, 21:24

Τα ονόματα ας είναι στατικά για την ώρα. Αλλάζουν εύκολα μετά αν θέλουμε.

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

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

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

simosx έγραψε:Το επόμενο βήμα θα ήταν να χρησιμοποιήσουμε τη δομή που έχει δημιουργηθεί ώστε να παράγουμε ένα XML αρχείο που θα είναι η λίστα αναπαραγωγής για .xspf, http://www.xspf.org/quickstart/
Το αρχείο .xml μπορεί να γίνει με το χέρι, ή να γίνει με κάποια βιβλιοθήκη που παράγει XML σε Python (αρκεί να είναι στις βασικές βιβλιοθήκες της Python).

http://users.musicbrainz.org/~matt/xspf/m3u2xspf
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 06 Ιούλ 2011, 22:55

https://github.com/ubuntu-gr/eradio-pla ... its/master

Άλλαξα μερικά πράγματα:
Κώδικας: Επιλογή όλων
commit 9f8c4cf399eab9915a4a6ecf157d7e61663bf66e
Author: Savvas Radevic
Date: Wed Jul 6 21:52:41 2011 +0200

Fixed remaining conflicts

:100755 100755 2f328b2... 8b2477f... M playlist-generator.py

commit 1eaf31bf7b85799ba3d9370e0e30537b3695e36b
Author: Savvas Radevic
Date: Wed Jul 6 21:41:15 2011 +0200

New lines

:100755 100755 3c66f4f... c020c54... M playlist-generator.py

commit c5349f2ccaac68bc511a1ab441e82dddb815f373
Author: Savvas Radevic
Date: Wed Jul 6 21:32:59 2011 +0200

* Moved constants in the class
* Using regular expression and groupdict() for a dictionary output

:100755 100755 1e2d5a9... 3c66f4f... M playlist-generator.py
:100644 100644 394c18f... 1bfa836... M radiolist.js


Ελπίζω να μην πειράζει που έβαλα τα constants στο class. Δεν υπάρχει λόγος να μπουν εκτός του class. :)
Τελευταία επεξεργασία από medigeek και 07 Ιούλ 2011, 23:04, έχει επεξεργασθεί 1 φορά/ες συνολικά
Κύπριος; Κόπιασε στο 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 » 06 Ιούλ 2011, 23:05

sv1jsb έγραψε:Το url του κάθε σταθμού πως θα το βρούμε;


http://www.e-radio.gr/player/player.el.asp?sid=392
έγραψε:<div id="panel_Player" style="position:absolute; left:28px; top:405px; width:345px; height:50px; z-index:3;">
<iframe noresize width="335" height="50" scrolling="no" frameborder=0 framespacing=0 border=0 src="playerX.asp?sID=392&cn=a100&weblink="></iframe>
</div>


=> http://www.e-radio.gr/player/playerX.as ... 0&weblink=
έγραψε: <embed type="application/x-mplayer2"
pluginspage="http://www.microsoft.com/Windows/Downloads/Contents/Products/MediaPlayer/"
filename='http://www.e-radio.gr/asx/a100.asx'
src='http://www.e-radio.gr/asx/a100.asx'
showcontrols="1"
showdisplay="0"
showstatusbar="1"
enableContextMenu="0"
width="335"
height="45">
</embed>


Πρέπει να καλέσουμε 2 φορές την ιστοσελίδα για να πάρουμε τα αναγκαία δεδομένα (cname και weblink)
Κύπριος; Κόπιασε στο 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

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

To παράδειγμα που έβαλες για το groupdict πρέπει να γίνει σχόλιο. Δεν υπάρχει λόγος να εκτελείται σαν statement μέσα στο for-loop. Αν νομίζεις ότι είναι απαιραίτητο, η θέση του είναι στο docstring της μεθόδου.

Ας έχουμε κοινή πρακτική για τα strings. Άρα ας είναι όλα single quoted και όχι double quoted. Επίσης θα μπορούσαμε να έχουμε όλα τα strings ως unicode.

To object που θα χρησιμοποιηθεί για την αποθήκευση, δεν έχει και τόση πολύ σημασία. Και σκέτα lists να χρησιμοποιήσουμε η δουλειά μας πάλι θα γίνει. Απλά προσωπικά βρίσκω ότι η σύνταξη των dicts είναι λίγο κουραστική. Containers όπως τα namedtuples, το Bunch ή οι custom κλάσεις έχουν και code completion. Αφού το άλλαξες ας μείνει έτσι. Αν στην πορεία χρειαστεί για κάποιο λόγο το αλλάζουμε.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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

Το πρώτο parsing μπορεί να γίνει ως εξής:

1. Προσθέτουμε αυτό στο module
Κώδικας: Επιλογή όλων

from HTMLParser import HTMLParser

class Spider(HTMLParser):
def __init__(self, url):
HTMLParser.__init__(self)

self.src = ""

req = urllib.urlopen(url)
self.feed(req.read())

def handle_starttag(self, tag, attrs):
if tag == "iframe":
for attr in attrs:
if attr[0] == "src" and attr[1].startswith("playerX"):
self.src = attr[1]


2. Και μετά προσθέτουμε αυτή τη μέθοδο στην PlaylistGenerator
Κώδικας: Επιλογή όλων

def get_urls(self):
url_main = u"http://www.e-radio.gr/player/player.el.asp?sid="
for station in self.stations:
url_station = url_main + station["id"]
spider = Spider(url_station)
src = spider.src
print(src)
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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

cron