capthookb Δημοσ. 16 Μαΐου 2016 Share Δημοσ. 16 Μαΐου 2016 Αν και εκτός θέματος, παραθέτω 2 script που εχω φτιαξει εδω και καιρό. Το ένα κατεβάζει όλες τις διευθύνσεις από το www.e-radio.gr και τις αποθηκεύει σε αρχεία κειμένου, ανά περιοχή. Δηλώνουμε τις περιοχές που θέλουμε στη γραμμη "LOCATIONS=..." σύμφωνα με τις περιοχές που υπάρχουν στο site. Κάθε περιοχή αποθηκεύται σε ένα αρχειο κειμένου π.χ. staturs-athens.txt , το οποίο περιέχει ανά γραμμή το λινκ και μια περιγραφή του σταθμού (όνομα). Κάποιος μπορεί να φτιάξει κι ένα δικό του αρχείο με επιλεγμένους σταθμους π.χ. staturls-agapimena.txt κτλ. 1)geturls.sh #!/bin/bash LOCATIONS=("thessaloniki" "athens" "epirus" "macedonia" "peloponnesus" "sterea" "thrace" ) cnt1=${#LOCATIONS[@]} j=1 for LOCATION in "${LOCATIONS[@]}" do echo "Fetching stations of $LOCATION... $j out of $cnt1" let j=$j+1 CATURL="http://www.e-radio.gr/locations/$LOCATION.asp" wget -q -O $LOCATION.html $CATURL cat $LOCATION.html | grep -a stationBox | sed 's/.*erplayer//g' | sed 's/.*href=/www.e-radio.gr/g' | sed 's/>//g' | sed 's/"//g' > statlinks.txt if [ -f $LOCATION.html ]; then rm $LOCATION.html fi if [ -f staturls-$LOCATION.txt ]; then rm staturls-$LOCATION.txt fi cnt2=$(cat statlinks.txt | wc -l) i=1 while read line do echo "Getting link for station $i out of $cnt2" $line let i=$i+1 wget -q -O test.html $line ASXLINK=$(cat test.html | grep -a asx | sed 's/.*content="//g' | sed 's/".*//g') if [ -z "$ASXLINK" ]; then ASXLINK=$(cat test.html | grep -i nowonair | sed 's/.*whatson\///g' | sed 's/\/NowOn.*//g' | tr '[:upper:]' '[:lower:]') FINALURL=$(cat test.html | grep akouspalko | sed 's/.*href="//g' | sed 's/".*//g') TITLE=$ASXLINK else wget -q -O test.html $ASXLINK FINALURL=$(cat test.html | tr -d '\015' | sed 's/.*http/http/g' | sed 's/".*//g') TITLE=$(cat test.html | tr -d '\015' | sed 's/<\/TITLE.*//g' | sed 's/.*TITLE>//g') fi THE_SIZE=${#FINALURL} echo "--> $FINALURL | $TITLE" if [ $THE_SIZE -gt 10 ]; then echo "$FINALURL | $TITLE" >> staturls-$LOCATION.txt fi done <statlinks.txt cnt3=$(cat staturls-$LOCATION.txt | wc -l) if [ $(($cnt3-$cnt2)) -gt 0 ]; then echo "I failed to discover $(($cnt3-$cnt2)) station urls " fi rm statlinks.txt if [ -f test.html ]; then rm test.html fi echo "" done 2)radio.sh Το δεύτερο script διαβάζει τα αρχεία .txt που έχουν δημιουργηθεί παραπάνω αυτά και φτιάχνει ενα μενου σε κονσόλα μεσα από το οποιο επιλέγεις περιοχή και σταθμό. Έχω ορίσει να παίζουν με mplayer, αλλά αλλάζοντας το THEPLAYER="" μπορεί να μπει καποιος άλλος player. #!/bin/bash LOADING="1" LOC_ARRAY=() FILE_ARRAY=() THEPLAYER="mplayer" j=1 i=0 for fl in $( ls *.txt ); do j=$(($i*2)) TMPFILE=$(echo $fl | sed 's/staturls-//g' | sed 's/.txt//g') FILE_ARRAY[$i]=$fl; LOC_ARRAY[$j]=$(($i+1)) LOC_ARRAY[$(($j+1))]=$TMPFILE let i=$i+1 done while true do LINES=$(tput lines) COLUMNS=78 OPTION=$(whiptail --title "Location" --menu "select your choice" $LINES $COLUMNS $((LINES-8)) "${LOC_ARRAY[@]}" 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus = 0 ]; then STATFILE=${FILE_ARRAY[$(($OPTION-1))]} STATIONS=() cat $STATFILE | sed 's/-/\\-/g' > stations.tmp IFS=$'\n' read -d'' -r -a STATIONS < stations.tmp MENUS=() URLS=() cnt=${#STATIONS[@]} j=1; for ((i=0;i<cnt;i++)); do j=$(($i*2)) MENUS[$j]="$(($i+1))" j=$(($i*2+1)) MENUS[$j]=$(echo ${STATIONS[$i]} | cut -d '|' -f 2) URLS[$i]=$(echo ${STATIONS[$i]} | cut -d '|' -f 1) done DEF=1 while true do LINES=$(tput lines) COLUMNS=78 OPTION=$(whiptail --default-item $DEF --title Networking --menu "select your choice" $LINES $COLUMNS $((LINES-8)) "${MENUS[@]}" 3>&1 1>&2 2>&3) exitstatus2=$? if [ $exitstatus2 = 0 ]; then DEF=$OPTION let OPTION=$OPTION-1 echo "Playing url:" ${URLS[$OPTION]} $THEPLAYER ${URLS[$OPTION]} else break fi done else break fi done rm stations.tmp To ερτ-κοσμος κάνει και σε εμενα σπασίματα με mplayer: [mpegts @ 0x7f56f9ec3400]Continuity check failed for pid 4095 expected 1 got 0 A:70199.9 (19:29:59.9) of 0.0 (00.0) 5.6% 0% [http @ 0x7f56f9eba820]Setting default whitelist 'http,https,tls,rtp,tcp,udp,crypto,httpproxy' [http @ 0x7f56f9eba820]request: GET [email protected]<script data-cfhash='f9e31' type="text/javascript">/* */</script>/index_96_a-p.m3u8?sd=10&rebase=on HTTP/1.1 User-Agent: Lavf/57.25.100 Accept: */* Connection: close Host: nerit4radio-lh.akamaihd.net Cookie: _alid_=aylQwnqryrq/mHEFGgZyUw== Icy-MetaData: 1 [AVIOContext @ 0x7f56f9ec8d20]Statistics: 967020 bytes read, 0 seeks [hls,applehttp @ 0x7f56f9ec3400]HLS request for url 'http:[email protected]<script data-cfhash='f9e31' type="text/javascript">/* */</script>/segment146341329_96_a-p.ts?sd=10&rebase=on', offs et 0, playlist 0 [http @ 0x7f56f9eba820]Setting default whitelist 'http,https,tls,rtp,tcp,udp,crypto,httpproxy' [http @ 0x7f56f9eba820]request: GET [email protected]<script data-cfhash='f9e31' type="text/javascript">/* */</script>/segment146341329_96_a-p.ts?sd=10&rebase=on HTTP/1.1 User-Agent: Lavf/57.25.100 Accept: */* Connection: close Host: nerit4radio-lh.akamaihd.net Cookie: _alid_=aylQwnqryrq/mHEFGgZyUw== Icy-MetaData: 1 ενώ με vlc παίζει κανονικά, αν και εμφανίζει κάθε τόσα δευτερόλεπτα ένα μύνημα λάθους στο stream: [00007f8bf4e14248] ts demux error: libdvbpsi error (PSI decoder): TS duplicate (received 0, expected 1) for PID 4095 [00007f8bf4e14248] ts demux error: libdvbpsi error (PSI decoder): TS duplicate (received 0, expected 1) for PID 4095 2 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα