Σελίδα 1 από 4

e-radio playlist generator

ΔημοσίευσηΔημοσιεύτηκε: 13 Δεκ 2010, 23:07
από ftso
Bash script για την δημιουργία playlist αρχείου (.pls) απο "όλους" τους σταθμούς της σελίδας e-radio.gr

Το script χρειάζεται κάτι λιγότερο απο 1 ώρα για να δημιουργήσει την λίστα με αλφαβητική σειρά.
Τα αρχεία που παρέχει το e-radio είναι τύπου .asx τα οποία περιέχουν τα πραγματικά streams σε http και mms.
Στην λίστα συμπεριλαμβάνονται μόνο το http καθώς τα mms δεν παίζουν πάντα.
Αν κάποιο stream δεν παίζει με http μπορείτε να κάνετε χειροκίνητα την αλλαγή σε mms.

Επίσης πολλά αρχεία .asx περιέχουν 2 ζεύγη απο streams απο τα οποία το ένα είναι παλιό και δεν δουλεύει.
Το script κάνει έλεγχο και των δυο και κρατάει το ενεργό μόνο. Παρόλα αυτά μπορεί σε μερικές περιπτώσεις να κάνει λάθος
αν κάποιο stream ενώ δουλεύει είναι προσωρινά down.

Προσοχή! όσο τρέχετε το script θα πρέπει να μην χρησιμοποιήσετε καθόλου τον mplayer ή πρόγραμμα που τον χρησιμοποιεί όπως ο smplayer.

Ένα έτοιμο stream δημιουργημένο στις 13/12/2010
http://dl.dropbox.com/u/1320617/eradio/eradio.xspf.zip
http://dl.dropbox.com/u/1320617/eradio/eradio.pls.zip
Απλά αποσυμπιέστε και ανοίξτε το με τον αγαπημένο σας player.

Κώδικας: Επιλογή όλων
#!/bin/bash
#e-radio.gr playlist generator (erplsgen)

#Copyright (C) 2010 Dimitris Diamantis (aka ftso)
#This is free software. You may redistribute copies of it under the terms of
#the GNU General Public License <http://www.gnu.org/licenses/GPL.html>
#There is NO WARRANTY, to the extent permitted by law.

#Dependencies: mplayer, wget, bash, awk


###Number of e-radio sids###
numberofsids=2500
############################

cd /tmp
rm /tmp/eradio1.txt
rm /tmp/eradio2.txt
rm /tmp/eradio3.txt
rm /tmp/eradio4.txt
rm /tmp/eradio.pls

clear

echo "Close mplayer and wait..."

c1=0
c3=1

while [ $c1 -lt $numberofsids ]; do
        wget --quiet http://www.e-radio.gr/player/player.el.asp?sid=$c1 -O /tmp/eradio2.txt

        cat /tmp/eradio2.txt | grep stationtitle
        if [ $? -ne 0 ]; then
                let c1=$c1+1
                continue
        fi

        rname=$(cat /tmp/eradio2.txt | grep stationtitle | sed 's^.*title\">^^g' | sed 's^<.*^^g' | sed 's^ ^_^g' | sed 's^,^\.^g')
        rwebname=$(cat /tmp/eradio2.txt | grep playerX.asp?sID | sed 's^.*cn=^^g' | sed 's^&web.*^^')
        rurl="http://www.e-radio.gr/asx/$rwebname.asx"
        rstreamtmp=$(wget $rurl -O - | tr '\r' '\n' | grep http | sed 's^<REF HREF = "^^g' | sed 's^"/>^^g')
        rstream=$(echo $rstreamtmp | sed 's^ ^\\^g')

        rm /tmp/eradio2.txt

echo "
$rname~$rstream
" >> /tmp/eradio3.txt

        let c1=$c1+1
done

rm /tmp/eradio2.txt
cat /tmp/eradio3.txt | sort -u >> /tmp/eradio2.txt

echo '[playlist]' > /tmp/eradio4.txt
echo  >> /tmp/eradio4.txt

for line in `cat /tmp/eradio2.txt`; do
        rname2=$(echo $line | awk -v C3="${c3}"  'BEGIN { FS = "~" } ; { print "Title"C3"="$1 }')
        rstream2=$(echo $line | awk -v C4="${c3}" 'BEGIN { FS = "~" } ; { print "File"C4"="$2 }')
        echo $rname2 >> /tmp/eradio4.txt
        echo $rstream2 >> /tmp/eradio4.txt
        echo 'Length1=-1' >> /tmp/eradio4.txt
        echo >> /tmp/eradio4.txt
        echo >> /tmp/eradio4.txt
        let c3=$c3+1
done

let c4=$c3-1
echo "
NumberOfEntries=$c4
Version=2" >> /tmp/eradio4.txt



for dstreams in $(cat /tmp/eradio4.txt | grep '\\'); do
        str1=$(echo $dstreams | grep '\\' | sed 's^File[0-9]*=^^g' | awk 'BEGIN { FS = "\\" } ; { print $1 }')
        str2=$(echo $dstreams | grep '\\' | sed 's^File[0-9]*=^^g' | awk 'BEGIN { FS = "\\" } ; { print $2 }')
        mplayer -endpos 1 $str1 | grep playback
                if [ $? -eq 0 ]; then
                        rm /tmp/eradio1.txt
                        cat /tmp/eradio4.txt | sed "s^$str2^^g" >> /tmp/eradio1.txt
                        rm /tmp/eradio4.txt
                        cat /tmp/eradio1.txt >> /tmp/eradio4.txt
                else
                        rm /tmp/eradio1.txt
                        cat /tmp/eradio4.txt | sed "s^$str1^^g" >> /tmp/eradio1.txt
                        rm /tmp/eradio4.txt
                        cat /tmp/eradio1.txt >> /tmp/eradio4.txt
                fi
        wait
        killall mplayer
done
wait

cat /tmp/eradio4.txt | sed 's^\\^^g' > /tmp/eradio.pls

rm /tmp/eradio1.txt
rm /tmp/eradio2.txt
rm /tmp/eradio3.txt
rm /tmp/eradio4.txt

clear
echo "Playlist: /tmp/eradio.pls"

exit 0;


Μπορείτε να το κατεβάσετε απο εδώ...
http://www.ftso.gr/MyWork/eradio_playlist_generator

Enjoy :)

Re: e-radio playlist generator

ΔημοσίευσηΔημοσιεύτηκε: 13 Δεκ 2010, 23:22
από kikirikou
Ωραίος :bow: :bow: :clap: :clap:

Re: e-radio playlist generator

ΔημοσίευσηΔημοσιεύτηκε: 14 Δεκ 2010, 00:24
από medigeek
hint: http://e-radio.gr/cache/mediadata_1.js :P
Κώδικας: Επιλογή όλων
wget -q http://e-radio.gr/cache/mediadata_1.js -O - | iconv -f iso-8859-7 -t utf-8

Re: e-radio playlist generator

ΔημοσίευσηΔημοσιεύτηκε: 14 Δεκ 2010, 00:40
από ftso
ξέχασες να αλλάξεις το EOL ( hint: tr '\r' '\n' ) :P
Η λίστα εμφανίζει 10 σταθμούς λιγότερους απο αυτήν που έφτιαξα εγώ :S
Πάντως αν υπάρχει και κάποια με τα streams θα κάνει την δουλειά πολύ πιο γρήγορα!

Re: e-radio playlist generator

ΔημοσίευσηΔημοσιεύτηκε: 14 Δεκ 2010, 01:05
από medigeek
Δεν εχω ιδέα, απλά έπαιζα με τη σελίδα τους. :)
Χμ.. αν διάβαζες τα server responses / headers;
Κώδικας: Επιλογή όλων
$ curl -sI http://www.example.com | grep -i content-type
Content-Type: text/html; charset=UTF-8
$ curl -sI "http://www.e-radio.gr/asx/alfaserres.asx" | grep -i content-type
Content-Type: video/x-ms-asf

Re: e-radio playlist generator

ΔημοσίευσηΔημοσιεύτηκε: 14 Δεκ 2010, 01:11
από ftso
χμμμ...βασικά τώρα το περιεχόμενο των .asx διαβάζω καθώς εκεί βρίσκονται τα streams.
δεν νομίζω να υπάρχουν αλλού εκτός απο τις ίδιες τις σελίδες των σταθμών.

Re: e-radio playlist generator

ΔημοσίευσηΔημοσιεύτηκε: 14 Δεκ 2010, 11:39
από ftso
Δημιούργησα και ένα .xspf το όποιο είναι ανοιχτό πρότυπο για xml playlist.
http://xspf.org/
Συγκριτικά με το .pls φαίνεται να συνεργάζεται καλύτερα με όλους τους players που δοκίμασα...
Επίσης στο .xspf έγιναν και μικρές διορθώσεις σε μερικούς σταθμούς.

Download
http://dl.dropbox.com/u/1320617/eradio/eradio.xspf.zip

Re: e-radio playlist generator

ΔημοσίευσηΔημοσιεύτηκε: 14 Δεκ 2010, 17:07
από medigeek
Απίθανη δουλειά! :)

Re: e-radio playlist generator

ΔημοσίευσηΔημοσιεύτηκε: 14 Δεκ 2010, 17:21
από simosx
Εξαιρετική δουλειά!
Κάτι που θα ήταν καλό είναι τα ονόματα των σταθμών να είναι πιο προσιτά στο κοινό.
Για παράδειγμα,
Κώδικας: Επιλογή όλων
<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
   <trackList>
      <track>
         <location>http://wm1.greekstream.net/1055rock</location>
         <title>Εν Λευκώ 87,7 ◆ ΑΘΗΝΑ</title>
      </track>
      <track>
         <location>http://155.207.18.114:8000/1431med</location>
         <title>Εκρηξη Fm 99,7 ◆ ΘΕΣΣΑΛΟΝΙΚΗ</title>
      </track>
      <track>
         <location>http://live2.isolservers.com:8000</location>
         <title>Studio Λευκάδας 90,5 ◆ ΛΕΥΚΑΔΑ</title>
      </track>
   </trackList>
</playlist>


(οι σταθμοί δεν αντιστοιχούν με τα ονόματα, το αρχείο είναι απλά δοκιμή).

1. Δοκίμασα και ο Banshee 1.8 δε μπορεί να διαβάσει το παραπάνω αρχείο .xspf, αν και έχει υποστήριξη.
Αν μπορεί να βάλει κανείς Banshee 1.9 και να δοκιμάσει ξανά, θα είναι εξαιρετικό!
2. Στο Banshee υπάρχουν τα πεδία Station, Creator και Description. Θα είναι καλύτερο να βάλουμε π.χ. τον τοποθεσία στο Description.
Ωστόσο, πιστεύω ότι πρέπει να συνδυάσουμε το human readable όνομα με το URL του αντίστοιχου σταθμού. Πιο πολύ δουλειά, λιγότερη αν τη μοιραστούμε.
Αν υπάρχουν <description> στο .xspf, τότε θα βοηθούσα αφάνταστα. Διαφορετικά, διατηρούμε την παραπάνω παραδοχή.
3. Για το Genre του τραγουδιού, αυτό προκύπτει αυτόματα από το σταθμό, αν ο σταθμός δίνει την πληροφορία αυτή.

ftso, δεν ξέρω αν έχεις την ευχέρια να βάλεις το πρόγραμμα εντολών που χρησιμοποιείς στο github.com. Θα ήταν δυνατόν θα δώσουμε ένα χεράκι.
Δες και viewtopic.php?f=6&t=5424

Re: e-radio playlist generator

ΔημοσίευσηΔημοσιεύτηκε: 14 Δεκ 2010, 17:24
από vagrale13
Μπραβο ftso, παρα πολυ καλο! :clap:
Το μονο σταθμο που δεν μπορεσα να παιξω, ειναι η era sport.
Στη λιστα εχει http://media.ertonline.gr:8080/erasport ενω για να παιξει χρειαζεται mms://a1113.l3271935112.c32719.g.lm.aka ... ctor:35112
κατα τ' αλλα, οτι δοκιμασα λειτουργει! :)