Anunţ

Caută printre mesajele de pe forum înainte de a scrie unul nou!
Formulează corect întrebarea sau problema pe care o ai.
Respectă regulile forumului și Codul de Conduită!

#1 06 Sep 2011 01:27:09

nomemory
Membru
Locaţie: Bucuresti
Înregistrat: 05 Jul 2008
Mesaje: 1200
Site web

Ultimele mesaje de pe forum in consola (script)

uburss - este un script bash pentru afisarea ultimelor mesaje de pe forum-ul ubuntu romania in consola . Ideea nu este originala, am intalnit-o prima data  aici la @drlabs .

Script-ul depinde de xmlstarlet si wget . Pentrun instalare:

Cod:

sudo apt-get install xmlstarlet wget

Codul script-ului:

Cod:

#!/bin/bash
# Author: Andrei Ciobanu (www.andreinc.net)
# Date: Sep 3, 2011
# Description: Script for retrieving the last messages from the Romanian 
# Ubuntu Forum
# ------------------------------------------------------------------------------
# Depends on wget and xmlstarlet
#
# Ubuntu:
# sudo apt-get install xmlstarlet wget
# ------------------------------------------------------------------------------
UBUNTU_FORUM_RSS="http://forum.ubuntu.ro/rss.php"
USED_CMD="wget xmlstarlet"
TMP_FILE="$HOME/tmp_rss_file"
# ------------------------------------------------------------------------------
# Test if commands exists in $PATH
for _cmd in $USED_CMD
do
    type -P $_cmd &>> /dev/null && 
        continue || { 
                        echo "$_cmd not found. Exiting ." ; 
                        exit -1
                    }
done
# ------------------------------------------------------------------------------
# Clean up function
function cleanup {
    rm -rf "$TMP_FILE"
}
trap cleanup SIGINT SIGHUP SIGTERM EXIT
# ------------------------------------------------------------------------------
# Create a temporary file containing rss feed .
wget -q -O "$TMP_FILE" $UBUNTU_FORUM_RSS && 
    : || {
        echo "URL lookup failed for '$1' . Exiting ." ;
        exit -1
}
# ------------------------------------------------------------------------------
# Extracting meaningful information from the RSS file .
RSS_LINKS_LIST=$(xmlstarlet sel \
                -t -m "//item" \
                -s D:N:- "count(preceding-sibling::node())+1" -n \
                -v "pubDate" -n -v "description" -o "(" -v "link" -o ")" -n \
                -o "--------------------------------------------------------" \
                $TMP_FILE)

echo -e "$RSS_LINKS_LIST"

Se salveaza intr-un fisier uburss.sh .

Cod:

chmod +x uburss.sh
./uburss.sh

Rezultatul:
http://i.imgur.com/IdNqi.png

Editat ultima oară de nomemory (06 Sep 2011 01:30:05)


Xander Bilmonchuk: "Can I just suggest that the only rational explanation for how horrible Unity and Gnome 3 are is that Microsoft or other terrified proprietary competitors have planted moles on the dev team to destroy this once awesome interface and cause the slow death and abandonment of Ubuntu."

Offline

 

#2 06 Sep 2011 03:50:35

nbdmbr
Membru
Locaţie: Cluj Napoca.
Înregistrat: 19 Mar 2011
Mesaje: 930
Site web

Re: Ultimele mesaje de pe forum in consola (script)

Mie-mi da eroarea "E: Unable to locate package xmlstarlet"

Offline

 

#3 06 Sep 2011 09:09:09

nomemory
Membru
Locaţie: Bucuresti
Înregistrat: 05 Jul 2008
Mesaje: 1200
Site web

Re: Ultimele mesaje de pe forum in consola (script)

nbdmbr
E in repository-ul Universe din cate imi aduc aminte .
Il ai bifat ?


Xander Bilmonchuk: "Can I just suggest that the only rational explanation for how horrible Unity and Gnome 3 are is that Microsoft or other terrified proprietary competitors have planted moles on the dev team to destroy this once awesome interface and cause the slow death and abandonment of Ubuntu."

Offline

 

#4 06 Sep 2011 10:41:16

c.ovidiu
Membru
Locaţie: Haga, Olanda
Înregistrat: 07 Jul 2006
Mesaje: 458

Re: Ultimele mesaje de pe forum in consola (script)

Xmlstarlet FTW. Unul din cele mai utile tool-uri pentru mine.

O să fac o mică critică script-ului, dacă-mi permiți. big_smile

1) Dacă chiar ai nevoie de fișiere temporare, folosește TMP_FILE=$(mktemp). Altfel ai putea să ștergi cuiva fișierul tmp_rss_file. Știu că nu sună prea probabil, dar este „best practice” să folosești mktemp și este și mai elegant.
2) Mare parte din script este luat de diverse verificări. Ce s-ar întâmpla dacă n-ai face verificările respective? Păi bash ar afișa el însuși un mesaj (aproape identic) cum că acea comandă nu există și, la fel, wget ar spune că n-a reușit să downloadeze fișierul.
3) Nu ai nevoie de fișier temporar. Poți să folosești pipes.

Deci, pe scurt, cea mai mare parte a  scriptului ar putea fi înlocuită cu:

curl -s http://forum.ubuntu.ro/rss.php | xmlstarlet ...


I walk on water

Offline

 

#5 06 Sep 2011 10:54:02

nomemory
Membru
Locaţie: Bucuresti
Înregistrat: 05 Jul 2008
Mesaje: 1200
Site web

Re: Ultimele mesaje de pe forum in consola (script)

1) Dacă chiar ai nevoie de fișiere temporare, folosește TMP_FILE=$(mktemp). Altfel ai putea să ștergi cuiva fișierul tmp_rss_file. Știu că nu sună prea probabil, dar este „best practice” să folosești mktemp și este și mai elegant.

Nu stiam de mktemp, e intr-adevar best practice .

3) Nu ai nevoie de fișier temporar. Poți să folosești pipes.

La inceput era mai complex si faceam mai multe citiri cu xmlstarlet, am preferat sa le fac local .

Ms de sfaturi!

Editat ultima oară de nomemory (06 Sep 2011 11:54:47)


Xander Bilmonchuk: "Can I just suggest that the only rational explanation for how horrible Unity and Gnome 3 are is that Microsoft or other terrified proprietary competitors have planted moles on the dev team to destroy this once awesome interface and cause the slow death and abandonment of Ubuntu."

Offline

 

#6 06 Sep 2011 11:45:21

nbdmbr
Membru
Locaţie: Cluj Napoca.
Înregistrat: 19 Mar 2011
Mesaje: 930
Site web

Re: Ultimele mesaje de pe forum in consola (script)

Da intradevar,nu era activat repository-ul respectiv.
Merge.Multumesc. big_smile

Editat ultima oară de nbdmbr (06 Sep 2011 11:46:00)

Offline

 

#7 06 Sep 2011 15:48:21

Alexandru.Cucu
Administrator
Locaţie: -21.8021247, -154.6975949
Înregistrat: 17 Jun 2008
Mesaje: 6656
Site web

Re: Ultimele mesaje de pe forum in consola (script)

Pe o singura linie:

Cod:

curl -s http://forum.ubuntu.ro/rss.php | xmlstarlet sel -t -m "//item" -s D:N:- "count(preceding-sibling::node())+1" -n -v "pubDate" -n -v "description" -o "(" -v "link" -o ")" -n -o "--------------------------------------------------------"

Offline

 

#8 07 Sep 2011 15:21:42

sergiuniculescu
Membru
Locaţie: Buzău
Înregistrat: 17 Feb 2011
Mesaje: 173
Site web

Re: Ultimele mesaje de pe forum in consola (script)

^
Cool! L-am pus în conky.


The box said Windows 7 or better
             So I installed Linux

Offline

 

#9 14 Sep 2011 20:23:11

shogun1
Membru
Înregistrat: 01 Apr 2009
Mesaje: 1204
Site web

Re: Ultimele mesaje de pe forum in consola (script)

Foarte interesant. Cum se poate modifica comanda (curl -s http://.....) pentru a putea fi folosită și pentru alte forumuri? Că mie-mi dă cu virgulă. sad
http://i.imgur.com/ljQEO.png

Offline

 

#10 15 Sep 2011 01:26:19

nomemory
Membru
Locaţie: Bucuresti
Înregistrat: 05 Jul 2008
Mesaje: 1200
Site web

Re: Ultimele mesaje de pe forum in consola (script)

@shogun1

Trebuie sa dai adresa corecta a fluxului rss (in cazul nostru, adresa aia care o pasezi catre curl) .
Fluxul rss e o metoda prin care site-urile expun noutatile . Nu toate site-urile suporta asa ceva, ci blog-urile si forum-urile in general .

Ce e de fapt un flux rss ? e un fisier XML (intr-un anume format) care permite rss readerelor (gen liferea, sau google reader) sa acceseze informatia .

Pentru forum-ul "nostru" fluxul rss e gaseste la adresa: http://forum.ubuntu.ro/rss.php .
Daca analizezi pagina asta (deschide-o in browser, eventual chrome deaorece asta ti-o afiseaza "smart") o sa vezi ceva de genul):
http://i.imgur.com/ZmvlW.png

Cum functioneaza de fapt script-ul ? Citeste acest fisier XML si dupa niste legi date de noi si exprimate prin XPATH se plimba prin el si extrage informatia necesara .

Pentru citirea propriu-zisa a fisierului XML folosim xmlstarlet definind urmatoarele reguli:

Cod:

-m "//item"  --------------> pentru fiecare <item> din fisier
-s D:N:- "count(preceding-sibling::node())+1" --------------> in ordine descrescatoare (e putin mai complicat de inteles)
-n --------------> afiseaza o linie noua pe ecran
-v "pubDate" --------------> "textul" continut intre <pubDate> si </pubDate>
-n --------------> afiseaza o linie noua pe ecran
-v "description" --------------> textul continut intre <description> si </description>
-o "(" --------------> afiseaza "("
-v "link" --------------> textul continut intre <link> si </link>
-o ") --------------> afiseaza ")"

Legat de intrebarea ta:
Problema pe care ai intampinat-o este ca adresa pe care pasezi catre curl este incorecta (nu e nici un flux rss acolo). Fiecare om care isi construieste un site, alege URL (adresa) unde sa publice fluxurile de stiri .

De exemplu pentru forum-ul mandrivausers pe pagina asta gasesti link-urile la doua fluxuri rss . 

Un flux corect pentru mandrivausers se gaseste la adresa asta: http://www.mandrivausers.ro/crss (RSS pentru fiecare topic nou (forum + site)) .

Dupa ce ai fi rulat comanda:

Cod:

xmlstarlet sel --net --html -t -m "//item" -s D:N:- "count(preceding-sibling::node())+1" -n -v "pubDate" -n -v "description" -o "(" -v "link" -o ")" -n -o "--------------------------------------------------------" http://www.mandrivausers.ro/crss

(nu ai nevoie de curl, deoarece xmlstarlet stie deja sa "citeasca de pe net")
ar trebui sa ai informatia dorita afisata .

O sa te lovesti insa de faptul ca fluxul lor e diferit ca si structura de fluxul de la Ubuntu... Si nu ofera la fel de multe informatii . In cazul asta particular, o sa vezi doar link-urile si data la care au aparut chestii noi, nu si ce s-a scris .

Alta problema: -> pentru https://bbs.archlinux.org/ fluxul se gaseste la la adresa: https://bbs.archlinux.org/extern.php?ac … ;type=atom . Din pacate aici o sa ai o problema . In internet exista cateva formate de fluxuri, cele mai importante sunt RSS (cum e la forumul ubuntu) si Atom . Fluxul de noutati de la arclinux e de tip Atom .
Script-ul xmlstarlet pe care-l avem este din pacate facut sa  mearga pentru RSS 2.0 . Pentru Atom nu va functiona .

Pana atunci, nu te descuraja, caile internet-ului sunt groaznice smile . Idee este ca nu poti sa faci ceva generic, care sa mearga peste tot . Trebuie sa te adaptezi la situatie .

Editat ultima oară de nomemory (15 Sep 2011 01:47:09)


Xander Bilmonchuk: "Can I just suggest that the only rational explanation for how horrible Unity and Gnome 3 are is that Microsoft or other terrified proprietary competitors have planted moles on the dev team to destroy this once awesome interface and cause the slow death and abandonment of Ubuntu."

Offline

 

#11 15 Sep 2011 05:53:11

shogun1
Membru
Înregistrat: 01 Apr 2009
Mesaje: 1204
Site web

Re: Ultimele mesaje de pe forum in consola (script)

@nomemory: multumesc mult pentru amabilitate si explicatii! Acum cred ca am o baza pe plecare, usor-usor poate fac cate ceva... big_smile Macar mai invat ceva!

Offline

 

#12 19 Sep 2011 09:02:21

shogun1
Membru
Înregistrat: 01 Apr 2009
Mesaje: 1204
Site web

Re: Ultimele mesaje de pe forum in consola (script)

Am descoperit Newsbeuter si Snownews, ambele functioneaza pe orice forum incercat...

Offline

 
Feed

Antet forum

Powered by FluxBB