Script για να πάρεις με curl ένα URL που αλλάζει καθημερινά

Εναλλακτικά “Ζητείται sedάς Νο2”

Έχω αναφερθεί ξανά στις κάμερες που στήνουν σε διάφορες πόλεις και κάνουν live streaming. Μία από αυτές είναι στην Ομόνοια. Η διεύθυνση είναι αυτή:

Με την εντολή

curl -s https://www.meteocam.gr/AthensOmonoia >> omonia.txt

μου δημιουργείται στον προσωπικό φάκελο το αρχείο omonia.txt . Εκεί μέσα ψάχνω (με την αναζήτηση του κειμενογράφου) το URL που έχει το κατάλληλο m3u8. Σε τρεις γραμμες βρίσκω το “m3u8”

Αυτό που χρειάζομαι παρατήρησα ότι είναι στη γραμμή 472.
https://pluto13.cybex.gr/hls/mc112302181730272812.m3u8

Αυτό λοιπόν βάζω στο σκριπτάκι μου!

#!/bin/sh
# killall -9 xwinwrap
sleep 3
xwinwrap -ni -g 240x195+1320+198 -s -st -sp -b -nf -o 0.6 -ov -un -- mpv https://pluto13.cybex.gr/hls/mc112302181730272812.m3u8 -wid WID

κι έχω αυτό που θέλω στο desktop μου.

Το κάτω αριστερά είναι η Ομόνοια.

Το πρόβλημα είναι ότι οι μπαγλαμάδες κάθε μέρα το αλλάζουν. Ενώ τα άλλα τρία που βλέπετε είναι σταθερά. Της NASA, ένα άλλο από διάφορες πόλεις online, και το times square.
Σβήνω λοιπόν το omonoia.txt, δίνω την εντολή με την curl που είπα στη αρχή, παίρνω το url και αλλάζω το σκριπτάκι του xwinwrap.

Σκέφτομαι να γίνεται αυτόματα όλη η δουλειά ώστε να μην χρειάζεται να κάνω κάτι καθημερινά. Να προσθέσω στο σκριπτ με το xwinwrap ένα:

rm ~/omonoia.txt
curl -s https://www.meteocam.gr/AthensOmonoia >> omonia.txt
sed i_mavri_moy_i_tyfla-

Μπορείτε να βοηθήσετε.
(ΟΚ θα έπρεπε τόσα χρόνια να έχω μάθει έστω κάτι λίγο από τη ρημάδα τη sed. Αλλά δεν είναι απλή η ρουφιάνα! Ένα βιβλίο είναι μόνη της.)

Υ.Γ.
Δεν ξέρω αν είναι πρόβλημα ο σύνδεσμος της κάμερας. Δεν ξέρω να το κάνω unlink. Δηλαδή ξέρω - βάζω ένα κενό - αλλά… είναι πρόβλημα;

1 «Μου αρέσει»

Με την λογική ότι θέλεις το 2ο από τα 3 urls με την κατάληξη .m3u8, δοκίμασε αυτό :

cat omonia.txt | grep -m2 m3u8 | tail -n1 | awk -F"src=\"" '{print $NF}' | sed 's|[">]||g'

Προφανώς γίνεται και άλλους τρόπους, εδώ κάναμε χρήση και της awk και της sed που θέλεις.

1 «Μου αρέσει»

Ευχαριστώ.

Ποιοι είναι οι άλλοι τρόποι; Ρωτώ για εγκυκλοπαιδικούς λόγους, για τη συζήτηση. Όχι να κάνω μόνο τη δουλειά μου και να φύγω.

Α και κάτι άλλο. Πως θα βάλω το αποτέλεσμα στο σκριπτ με το xwinwrap; Έτρεξα τη γραμμή που έφτιαξες και μου έβγαλε κανονικά το url. Να το ονομάσω ως κάποια μεταβλητή και να γράψω

`xwinwrap -ni -g 240x195+1320+198 -s -st -sp -b -nf -o 0.6 -ov -un -- mpv μεταβλητή  -wid WID`

;

1 «Μου αρέσει»

Το έκανα έτσι αλλά τζίφος

!/bin/sh
sleep 3
cd /home/left/scripts/LiveCam
if [ -f /home/left/scripts/LiveCam/omonia.txt ]; then rm -rf omonia.txt
fi
curl -s https://www.meteocam.gr/AthensOmonoia >> omonia.txt
URL="cat /home/left/scripts/LiveCam/omonia.txt | grep -m2 m3u8 | tail -n1 | awk -F"src=\"" '{print $NF}' | sed 's|[">]||g'"
xwinwrap -ni -g 240x195+1320+198 -s -st -sp -b -nf -o 0.6 -ov -un -- mpv ${URL} -wid WID

Πιστεύοντας ότι θα την καταλάβει έτσι τη γραμμή

xwinwrap -ni -g 240x195+1320+198 -s -st -sp -b -nf -o 0.6 -ov -un -- mpv https://pluto13.cybex.gr/hls/mc112302181730272812.m3u8 -wid WID

Προσωπικά πιστεύω ότι ο καλύτερος τρόπος είναι τα regular expressions. Μόλις βρω χρόνο θα προσπαθήσω να σου κάνω ένα.

2 «Μου αρέσει»

Για να αποθηκεύσεις την έξοδο όλων αυτών των εντολών σε μια μεταβλητή χρησιμοποιήσε κάτι σαν αυτό :

URL=$(cat /home/.....)
3 «Μου αρέσει»

Ευχαριστώ. Αποπειράθηκα κι εγώ κι έκανα πατάτα. Έβαλα το μαρκούτσι μετά το mpv ή το έβαλα το mpv μετά από ´λα αυτά που έφτιαξε ο Maras.

Άστο διάλο! Δούλεψε! :smiley:
Παρένθεση λοιπόν και το δολάριο μετά το ίσον. Είστε μόρτες ρε!

Το script

#!/bin/sh
sleep 3
cd /home/left/scripts/LiveCam
if [ -f /home/left/scripts/LiveCam/omonia.txt ]; then rm -rf omonia.txt
fi
rm ~/scripts/LiveCam/omonia.txt
curl -s https://www.meteocam.gr/AthensOmonoia >> omonia.txt
URL=$(cat ~/scripts/LiveCam/omonia.txt | grep -m2 m3u8 | tail -n1 | awk -F"src=\"" '{print $NF}' | sed 's|[">]||g')
xwinwrap -ni -g 240x195+1320+198 -s -st -sp -b -nf -o 0.6 -ov -un -- mpv ${URL} -wid WID

1 «Μου αρέσει»

Υπάρχουν πολλοί θαυμαστοί τρόποι για string manipulation στο Linux, καθώς τα εργαλεία και οι δυνατότητές είναι πολλά/ές. Η grep όπως αναφέρει και ο Βασίλης μπορεί να κάνει έξοχα πράγματα, αντίστοιχα και η awk, η sed, η λύση έγκειται στο πώς θα προσεγγίσεις το πρόβλημα και με ποια σειρά. Θα μπορούσε κάλλιστα να γίνει χρήση και της rev για να αντιστρέχεις το string και με την cut να κόψεις τους 2 πρώτους χαρακτήρες (που ήταν τελευταίοι) ">, αναλόγως την διαστροφή σου επιλέγεις οδό :face_with_spiral_eyes:. Διάβασε καλά τα manual αυτών για να δεις τι μπορούν να κάνουν.

4 «Μου αρέσει»

Σίγουρα το διάβασμα είναι το νούμερο 1. Αλλά ο διάλογος εδώ είναι το νούμερο… πιο 1 :smile:

Εγώ νιώθω ότι γίνομαι καλύτερος από αυτόν το διάλογο. όχι καλύτερος στο linux. Καλύτερος άνθρωπος. Όσο κι αν φαίνεται υπερβολή αυτό. Εσείς άραγε το νιώθετε;

Το αποτέλεσμά μου είναι αυτό το desktop

Το επόμενο που θα σας ρωτήσω (και θα μου πείτε "Ε δεν μας … ; ) θα είναι πως με hover πάνω σε κάθε ένα από αυτά τα 4 να γίνεται zoom. Ξέρεις όπως σε κάτι εμπορικά site. Όχι με συντόμευση πληκτρολογίου που μεγαλώνει την οθόνη. Αυτό το έχω από τα εφέ της Επ. εργασίας. Με hover λέω.

Απωθημένο, να έχεις ένα εντελώς διαδραστικό desktop.

(Πριν 10-12 χρόνια που ψευτομάθαινα python και pyqt είχα φτιάξει κάτι παραθυράκια και όριζα περιοχή που θα περνάει το ποντίκι για να βγάζει popup. Γιατί δεν σπούδασα κάτι τέτοιο ο λακαμάς και πήγα κι έγινα κάτι εντελώς άσχετο; ! :face_with_diagonal_mouth: )

4 «Μου αρέσει»

@Poor ο @Maras και ο @billniakas απαντάνε πιο γρήγορα και από την τεχνητή νοημοσύνη…

Έκανα την ερώτηση σου στoν επεξεργαστή κειμένου vscode με το πρόσθετο ChatGPT του @Ali Gençay και μου απάντησε τα παρακάτω:

Απάντηση ChatGPT:

"This script appears to be a shell script that performs the following actions:

  1. It first uses the sleep command to pause the script for 3 seconds.
  2. Then, it changes the current working directory to /home/left/scripts/LiveCam using the cd command.
  3. It then checks if a file called “omonia.txt” exists in the current directory using an if statement and -f operator. If the file exists, it is deleted using the rm -rf command.
  4. It then uses curl command to fetch the content of Athens Omonoia MeteoCam and save it to omonia.txt
  5. Then it uses command chaining to extract the m3u8 link from the omonia.txt file.
  6. Finally, it uses the xwinwrap command to play the video stream using mpv, passing the extracted m3u8 link as an argument.

The problem could be any one of the command not working as expected, the link or the file not exist or the link is changed on the website.
It would be helpful to check the error messages if any, or the website to check if the link is still the same."

Ερώτηση του @Poor παραφρασμένη:

“The link is changed on the website. I’m thinking about doing all the work automatically so I don’t have to do something every day.”

Απάντηση ChatGPT:

"You are correct that the link has changed on the website, so the script is not able to find the correct m3u8 link to play the video stream.

To automate the process of updating the link, you could try the following:

  1. Schedule the script to run at a specific time every day using a tool like cron. This…

Και ο διάλογος συνεχίζεται γιατί είναι απασχολημένος ο διακομιστής της Open ΑΙ…

A few moments later…

You

Optimize the following code

ChatGPT

Here are a few ways the script could be optimized:

  1. Remove unnecessary sleep: The sleep command is only delaying the script execution for 3 seconds, this could be removed if not needed.
  2. Use variable for the directory path: Instead of hardcoding the directory path in multiple places, you could use a variable to store the path, and use the variable throughout the script. This would make it easier to change the directory path in the future.
  3. Remove unnecessary commands: The cat command is not needed as the omonia.txt file can be accessed directly. Also, the grep -m2 option is not needed as we only need the last m3u8 link.
  4. Combine commands: The grep, tail and awk commands could be combined in a single command.
  5. Remove the if statement, and use -o option with curl to check if the file already exist, if yes it will overwrite it.

Here’s an example of how the script could be optimized:
(Ακολουθούν μερικοί τρόποι βελτιστοποίησης του σεναρίου:

Αφαιρέστε την περριτή εντολή sleep: Αυτό θα μπορούσε να αφαιρεθεί αν δεν χρειάζεται.
Χρήση μεταβλητής για τη διαδρομή του καταλόγου: Θα μπορούσατε να χρησιμοποιήσετε μια μεταβλητή για να αποθηκεύσετε τη διαδρομή και να χρησιμοποιήσετε τη μεταβλητή σε όλο το σενάριο. Αυτό θα διευκόλυνε την αλλαγή της διαδρομής του καταλόγου στο μέλλον.
Αφαίρεση περιττών εντολών: Η εντολή cat δεν είναι απαραίτητη καθώς το αρχείο omonia.txt μπορεί να προσπελαστεί απευθείας. Επίσης, η επιλογή grep -m2 δεν χρειάζεται καθώς χρειαζόμαστε μόνο τον τελευταίο σύνδεσμο m3u8.
Συνδυάστε εντολές: Οι εντολές grep, tail και awk θα μπορούσαν να συνδυαστούν σε μία μόνο εντολή.
Αφαιρέστε τη δήλωση if και χρησιμοποιήστε την επιλογή -o με την curl για να ελέγξετε αν το αρχείο υπάρχει ήδη, αν ναι θα το αντικαταστήσει.
Ακολουθεί ένα παράδειγμα για το πώς θα μπορούσε να βελτιστοποιηθεί το σενάριο:

Translated with DeepL Translate: The world's most accurate translator (free version))

CopyInsertNew

#!/bin/sh

dir_path=/home/left/scripts/LiveCam

curl -s -o "$dir_path/omonia.txt" https://www.meteocam.gr/AthensOmonoia
URL=$(grep -o 'm3u8.*' "$dir_path/omonia.txt" | tail -n1 | awk -F"src=\\"" '{print $NF}' | sed 's|[">]||g')

xwinwrap -ni -g 240x195+1320+198 -s -st -sp -b -nf -o 0.6 -ov -un -- mpv ${URL} -wid WID

This script first sets a variable dir_path to store the directory path. Then, it uses curl command to download the file and overwrite if exist, and assign it to the variable ‘URL’ using command chaining. Finally, it uses the xwinwrap command to play the video stream using mpv, passing the extracted m3u8 link as an argument.
Αυτή η δέσμη ενεργειών ορίζει πρώτα μια μεταβλητή dir_path για την αποθήκευση της διαδρομής καταλόγου. Στη συνέχεια, χρησιμοποιεί την εντολή curl για να κατεβάσει το αρχείο και να αντικαταστήσει εάν υπάρχει και να την αντιστοιχίσει στη μεταβλητή «URL» χρησιμοποιώντας την αλυσίδα εντολών. Τέλος, χρησιμοποιεί την εντολή xwinwrap για την αναπαραγωγή της ροής βίντεο χρησιμοποιώντας mpv, περνώντας τον εξαγόμενο σύνδεσμο m3u8 ως όρισμα.(Μετάφραση: DeepL Translator)
Thinking…

Σκέφτεται πάλι…

2 «Μου αρέσει»

Χαχαχα, αρχίσαμεεεε… τις συγκρίσεις…, λοιπόν όλα καλά αλλά

Also, the grep -m2 option is not needed as we only need the last m3u8 link.

εδώ υπάρχει πρόβλημα γιατί o @Poor , είπε ότι το 2ο link δουλεύει και όχι το 3ο (τελευταίο).

3 «Μου αρέσει»

Μην το αποπαίρνεις @Maras το παιδί(ChatGPT) είναι μικρό ακόμα :joy:

3 «Μου αρέσει»

Αυτό το νήμα έκλεισε αυτόματα 2 ημέρες μετά την τελευταία απάντηση. Δεν επιτρέπονται πλέον νέες απαντήσεις.