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

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

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

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

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

@pmav: Πρόσθεσα τον κώδικά σου.
Πρόσθεσα και .gitignore για τα παραγόμενα αρχεία (.pls, xspf).

https://github.com/ubuntu-gr/eradio-pla ... a412c0f92c
προσωπικό ιστολόγιο ϗ πλανήτης 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 » 07 Ιούλ 2011, 21:24

Χρησιμοποιώ τον κώδικα του pmav και για το δεύτερο url και συνεχώς παίρνω 404.
Το ίδιο συμβαίνει και άμα το ανοίξεις με τον browser.
Χρησιμοποίησα την urllib2 και πρόσθεσα στους headers τα Referer και User-agent, πάλι το ίδιο.
Με τον μόνο τρόπο που κατάφερα να κατεβάσω την δεύτερη url ήταν με wget -p.
Σίγουρα έχει να κάνει με το ότι είναι μέσα στο iframe και ότι είναι asp, το βλέπει μάλλον διαφορετικά ο IIS και με κανονικό GET επιστρέφει 404.
Για να δούμε αν θα βρούμε λύση και να μην καταφύγουμε σε wget, γιατί ο κώδικας του pmav δουλεύει άψογα.
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 » 07 Ιούλ 2011, 22:15

sv1jsb έγραψε:Χρησιμοποιώ τον κώδικα του pmav και για το δεύτερο url και συνεχώς παίρνω 404.
Το ίδιο συμβαίνει και άμα το ανοίξεις με τον browser.
Χρησιμοποίησα την urllib2 και πρόσθεσα στους headers τα Referer και User-agent, πάλι το ίδιο.
Με τον μόνο τρόπο που κατάφερα να κατεβάσω την δεύτερη url ήταν με wget -p.
Σίγουρα έχει να κάνει με το ότι είναι μέσα στο iframe και ότι είναι asp, το βλέπει μάλλον διαφορετικά ο IIS και με κανονικό GET επιστρέφει 404.
Για να δούμε αν θα βρούμε λύση και να μην καταφύγουμε σε wget, γιατί ο κώδικας του pmav δουλεύει άψογα.


Θέλει το δεύτερο URL; Ή το αποτέλεσμα είναι πάντα της μορφής «http://www.e-radio.gr/asx/$cn.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

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

Για δοκίμασε με αυτό:
Κώδικας: Επιλογή όλων

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

self.src = ""
self.url = ""

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]
elif tag == "embed":
for attr in attrs:
if attr[0] == "src" and attr[1].startswith("http"):
self.url = attr[1]


Δημιουργείς ένα νέο instance της Spider με url αυτό που πήρες από το πρώτο. To δεύτερο url θα είναι στο attribute url της νέας instance. Τα ονόματα των attributes μάλλον πρέπει να τα αλλάξουμε σε κάτι πιο αντιπροσωπευτικό.
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

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

Αυτό είναι το πρόβλημα. Κι εγώ έτσι το κάνω, με νέο instance. Και επιστρέφει 404. Έχει να κάνει με τα cookies, απ' ότι είδα με το wget -p -d.
Αν κάνουμε δεύτερο request, μάλλον, το υπολογίζει σαν άλλο session και τα cookies που τα έχω πάρει και τα έχω σώσει από το πρώτο request δεν γίνονται δεκτά στο δεύτερο και επιστρέφει 404.
Χρησιμοποιώ urllib2, cookielib.
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

Δημοσίευσηαπό medigeek » 07 Ιούλ 2011, 23:03

simosx έγραψε:Θέλει το δεύτερο URL; Ή το αποτέλεσμα είναι πάντα της μορφής «http://www.e-radio.gr/asx/$cn.asx»;
Μπορείς να το διαπιστώσεις;

viewtopic.php?f=6&t=19323&start=20#p197089

Χρειαζόμαστε το cname και το weblink. Το weblink υποθέτω είναι για αυτά που βρισκονται σε άλλη ιστοσελίδα, εκτός του e-radio.gr.
Δεν είμαι σίγουρος αν υπάρχει τέτοιος ραδιοσταθμός στη λίστα, αλλά είναι πιθανό. Πρέπει να περάσουμε από όλη τη λίστα για να είμαστε σίγουροι. :)

έγραψε:commit b314d12e1850bf8584b613c4383f43357f336878
Author: Savvas Radevic
Date: Thu Jul 7 22:01:06 2011 +0200

* Moved docstrings to top of each method
* Created debug print(): Radio link retrieval
* Added weblink to stationname dictionary

:100755 100755 417aa7e... 3380b47... M playlist-generator.py
Κύπριος; Κόπιασε στο 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 » 07 Ιούλ 2011, 23:15

Χρειαζόμαστε και δεύτερο dictionary? Γιατί να έχουμε stationname και να μην τα προσθέσουμε στο stations? Επίσης το if match .. else καλύτερα να γίνει try ...except.
Κώδικας: Επιλογή όλων

def get_radiostation_files(self):
url_main = u"http://www.e-radio.gr/player/player.el.asp?sid="
rxstr = r"playerX.asp\?sID=(?P<sid>\d+)&cn=(?P<cn>[^&]*)&weblink="
rx = re.compile(rxstr)
i = 0
for station in self.stations:
url_station = url_main + station["id"]
spider = Spider(url_station)
match = rx.search(spider.src)
if match:
station.update(match.groupdict())
else:
print("Error in parsing radio station:", src)
sys.exit(-1)

# Για 4 σταθμούς μόνο, για τη δοκιμή μας.
i = i + 1
if i > 3:
break
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

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

Δημοσίευσηαπό sv1jsb » 07 Ιούλ 2011, 23:35

Τώρα το είδα το λάθος: από το πρώτο parse επιστρέφει playerX.asp?sID=1197&cn=alfaserres&weblink=
αλλά το σωστό url είναι player/playerX.asp?sID=1197&cn=alfaserres&weblink=
οπότε όλο το url είναι
Κώδικας: Επιλογή όλων

http://www.e-radio.gr/player/playerX.asp?sID=1197&cn=alfaserres&weblink=

Ωραία τώρα έχουμε το url.
Το παραπάνω επιστρέφει, αφού το κάνουμε parse για το src στο embed tag:
Κώδικας: Επιλογή όλων

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


Αυτό τώρα, μπορούμε να το βάλουμε στο pls ή στο xspf;
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 » 07 Ιούλ 2011, 23:37

pmav99 έγραψε:Χρειαζόμαστε και δεύτερο dictionary? Γιατί να έχουμε stationname και να μην τα προσθέσουμε στο stations?


Νομίζω ότι είναι list, αντί για dict, έτσι δεν είναι;
Κώδικας: Επιλογή όλων

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


Δε θα ήταν καλύτερο να είχαμε dict, της μορφής
Κώδικας: Επιλογή όλων

['1197': { 'logo': u'/logos/gr/mini/nologo.gif', 'title': u'\u0386\u03bb\u03c6\u03b1 Radio 96', 'city': u'\u03a3\u0395\u03a1\u03a1\u0395\u03a3'}, ... ]
προσωπικό ιστολόγιο ϗ πλανήτης 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 » 07 Ιούλ 2011, 23:47

Το http://www.e-radio.gr/asx/alfaserres.asx περιέχει

Κώδικας: Επιλογή όλων
<ASX Version="3">
<TITLE>Alfa Radio 96 - SERRES</TITLE>
<ABSTRACT>Member of E-Radio.gr</ABSTRACT>
<ENTRY>
<REF HREF = "http://s2.onweb.gr:8624"/>
<REF HREF = "mms://s2.onweb.gr:8624"/>
</ENTRY>
</ASX>


όπου τώρα μόνο το http://s2.onweb.gr:8624 λειτουργεί.
προσωπικό ιστολόγιο ϗ πλανήτης 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
Εκτύπωση

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

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