Xscreensaver με κείμενο από rss (stasrwars theme)

Έχω 3 αρχειάκια !

xscrensaver-file

#!/bin/bash
cd /home/me/scripts/xscreen
if [ -f /home/me/scripts/xscreen/xfile ]; then rm -rf xteliko
fi
curl -s https://www.efsyn.gr/feed.xml >> xfile
if [ -f /home/me/scripts/xscreen/xteliko ]; then rm -rf xteliko
fi
sed -n 's/.*<title><!\[CDATA\[\(.*\)\]\]><\/title>.*/\1/p; s/.*<description><!\[CDATA\[\(.*\)\]\]><\/description>.*/\1/p' xfile >> /home/me/scripts/xscreen/xteliko

(Οι φάκελοι: scripts και ο υποφάκελος xscreen είναι δικοί μου. Εννοείται ότι τα αρχεία θα τοποθετηθούν σε όποιον φάκελο επιθυμεί ο καθένας. Οπότε η γραμμές cd /home/me/scripts/xscreen και
if [ -f /home/me/scripts/xscreen/xfile ]; then rm -rf xteliko Θα έχουν τα ανάλογα ονόματα φακέλων )

Αυτό το script παράγει τα αρχεία: xfile (πρώτα} και μετά το xteliko (έτσι τα ονόμασα)

Το xfile έχει τη μορφή

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Εφημερίδα των Συντακτών</title>
    <link>https://www.efsyn.gr</link>
    <description>Νέα, Ειδήσεις και Απόψεις από την Εφημερίδα των Συντακτών στο διαδίκτυο</description>
                                    <item>
        <title><![CDATA[Τιμητική εκδήλωση στη μνήμη του ιστορικού Σπύρου Ασδραχά]]></title>
        <link>https://www.efsyn.gr/ellada/koinonia/380424_timitiki-ekdilosi-sti-mnimi-toy-istorikoy-spyroy-asdraha</link>
        <description><![CDATA[Η Κίνηση Πολιτών «Στάση στο Καλαμάκι» πραγματοποιεί εκδήλωση στη μνήμη του ιστορικού Σπύρου Ασδραχά, στο Θέατρο Τέχνης Κάρολος Κουν (Υψηλάντου 31 και Θησείου, Άλιμος), τη Δευτέρα 6 Μαρτίου.]]></description>
        <pubDate>Thu, 02 Mar 2023 12:01:17 +0200</pubDate>
...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

       <description><![CDATA[Ανακοίνωση για το τραγικό δυστύχημα στα Τέμπη εξέδωσε το Εργατικό Επαναστατικό Κόμμα, μιλώντας για «ταξικό έγκλημα» και απαιτώντας την παραίτηση του πρωθυπουργού.]]></description>
        <pubDate>Thu, 02 Mar 2023 16:00:56 +0200</pubDate>
                          <media:content url="https://www.efsyn.gr/sites/default/files/styles/default/public/2023-03/trena-tempi-12.jpg?itok=MgMFj1jz" medium="image" />
                <guid>https://www.efsyn.gr/politiki/antipoliteysi/380464_eek-i-ora-toy-penthoys-alla-kai-ton-eythynon-gia-proanaggelthen</guid>
      </item>
      </channel>
</rss>

Δηλαδή τρέχα γύρευε. Με την εντολή sed -n ‘s/.<![CDATA[(.)]]></title>./\1/p; s/.<![CDATA[(.)]]></description>./\1/p’ xfile >> /home/me/scripts/xscreen/xteliko αφαιρούνται οι συμβολισμοί xml και μένει καθαρό το κείμενο στο ελληνικά το οποίο γράφεται στο αρχείο :

xteliko

Τιμητική εκδήλωση στη μνήμη του ιστορικού Σπύρου Ασδραχά
Η Κίνηση Πολιτών «Στάση στο Καλαμάκι» πραγματοποιεί εκδήλωση στη μνήμη του ιστορικού Σπύρου Ασδραχά, στο Θέατρο Τέχνης Κάρολος Κουν (Υψηλάντου 31 και Θησείου, Άλιμος), τη Δευτέρα 6 Μαρτίου.
Αλμα πληθωρισμού στη ζώνη του ευρώ
Η απρόσμενη άνοδος του δείκτη τιμών καταναλωτή σε Γερμανία, Γαλλία, Ισπανία, Ιρλανδία τον ...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
ΕΕΚ: Η ώρα του πένθους αλλά και των ευθυνών για το προαναγγελθέν έγκλημα
Ανακοίνωση για το τραγικό δυστύχημα στα Τέμπη εξέδωσε το Εργατικό Επαναστατικό Κόμμα, μιλώντας για «ταξικό έγκλημα» και απαιτώντας την παραίτηση του πρωθυπουργού.

Πάω τώρα στον προσωπικό μου φάκελο (/home/me) κι εκεί ανοίγω το κρυφό αρχείο .xscreensaver
Είναι μεγάλο αρχείο κι αυτό και μας ενδιαφέρουν μόνο οι γραμμές:

textMode:	file
textLiteral:	XScreenSaver
textFile:	/home/με/scripts/xscreen/xteliko
textProgram:	fortune
#textURL:	https://feeds.feedburner.com/ubuntu-news

Εμένα βρίσκεται στη γραμμή 40 του αρχείου .xscreensaver η πρώτη γραμμή που βλοέπετε εδώ textMode: file . Πιθανόν να τη δείτε να γράφει κάτι άλλο αντί για file. Το αλλάζετε και το κάνετε file.

Στη τρίτη γραμμή πάλι, θα πειράξετε τη διεύθυνση του αρχείου. Εγώ έβαλα τους φακέλους που είπα προηγουμένως.

Και τέλος, βάλτε ένα τέτοιο # μπροστά από τη γραμμή textURL: Ubuntu Fridge για να απενεργοποιηθεί.

(Αυτό και σκασίλα μου αν δεν σας αρέσει :face_with_raised_eyebrow:

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

Είναι λάθος να χρησιμοποιείς το sed για κάτι που έχει δομή. Το παρακάτω είναι πολύ πιο καθαρό και με περισσότερες πιθανότητες να δουλέψει:

xpath -q -e '//item/title/text()' xfile > xteliko

ή

xpath -q -e '//item/description/text()' xfile > xteliko

Κάποια πράγματα για το XPath θα βρεις εδώ, και σε δεκάδες άλλα μέρη.

Επίσης, είναι καλύτερο να τραβάς πρώτα το αρχείο και μετά να σβήνεις τα παλιά. Υπάρχει περίπτωση να μην μπορείς να τραβήξεις προσωρινά το αρχείο ή να κάνεις την εξαγωγή, οπότε τουλάχιστον να υπάρχουν τα παλιά. Αν το καινούργιο αρχείο έχει πχ γραμμές, τότε αντικαθιστάς το παλίο αρχείο.

(σκασίλα μου αν δε σου αρέσουν οι αλλαγές)

4 «Μου αρέσει»
xpath -q -e '//item/title/text()' xfile > xteliko

junk after document element at line 181, column 0, byte 22109:
      </channel>
</rss>
<?xml version="1.0" encoding="UTF-8" ?>
^
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
 at /usr/lib/x86_64-linux-gnu/perl5/5.34/XML/Parser.pm line 187.

Το XPath δουλεύει για έγκυρα XML, για το λόγο αυτό μίλησα και για πιθανότητα να μην μπορεί να κάνει την εξαγωγή. Και σίγουρα δε δουλεύει αν κολλήσεις μαζί 2 αρχεία XML :slight_smile: (κάπου αντί για > έχει βάλει >>)

Με το XPath όμως μπορείς να κάνεις πράγματα που δεν μπορείς να κάνεις με το sed για παράδειγμα μπορείς να

xpath -q -e '//item/title/text()|//item/description/text()[normalize-space()]' xfile 

To πρόβλημα με το sed είναι πως δεν υποστηρίζει αναδρομικές δομές. Μια άλλη αντίστοιχη λύση είναι να βρεις τη ροή σαν αρχείο json και να την επεξεργαστείς με το jq. To κατάλληλο εργαλείο για την κατάλληλη δουλεία.

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

Θα πρέπει να μάθω τι είναι jq. (Μπας και θέλει iq;) :pleading_face:

Και τα δυο εργαλεία δουλεύουν με μια ιεραρχική δομή (όπως είναι μια σελίδα HTML ή ένα RSS feed) όπου κάνεις ερωτήσεις για τα στοιχεία που θέλεις να εξάγεις και μπορείς στη συνέχεια πιθανά να τα μετασχηματίσεις. Έτσι πχ το

xpath -q -e //item/description/text()[normalize-space()]' xfile 

Θα ψάξει να βρεί ένα ‘<item>…</item>’ μέσα σε αυτό ένα ‘<description>…</description>’ , απο το οποίο θα πάρει το κείμενο ‘text()’ και θα το περάσει από μια συνάρτηση, την ‘normalize-space()’. Η αρχή με // σημαίνει οπουδήποτε, αλλιώς θα μπορούσες να είσαι ποιο συγκεντρωμένος με κάτι σαν /rss/channel/item/.... Αν τώρα έβαζες μόνο //title/text() θα έπαιρνες στη συγκεκριμένη περίπτωση και το Εφημερίδα των Συντακτών που δεν το θέλεις.

Σίγουρα είναι ποιο εύκολο και να το καταλάβεις και να το γράψεις από το sed. Ακόμα περισσότερα πράγματα μπορείς να κάνεις με μια άλλη προδιαγραφή που λέγετε XSLT. Μια πλήρη περιγραφή παίρνει πολλές σελίδες και θα πρέπει να ψάξεις κάποιο βιβλίο για XML.

Σήμερα υπάρχει η τάση να αντικαταστήσουμε την πολύπλοκη XML με το απλούστερο JSON. Για το jq υπάρχουν πολλοί οδηγοί ενδεικτικά:

αλλά και αυτό θέλει πολλές σελίδες για να περιγραφεί.

Tip: Μπορείς να κολλήσεις ένα .json σε κάθε URL του site και να επεξεργαστείς την πληροφορία. Για παράδειγμα, https://linux-user.gr/u/poor.json

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

Αυτό το τζούκιου πρέπει να το μελετήσω. Έβλεπα και γω αρχχεία τελεία Τζέησον και δεν ήξερα τι είναι.

Η εντολή μου βγάζει bash: συντακτικό σφάλμα κοντά στο μη αναμενόμενο σύμβολο «(» . Αλλά αφού είναι πιο εύκολο από το ασκηθώ στη sed όπως λες, ας μάθω το xpath.