Friss hozzászólások lekérdezése parancssorból

Kicsit játszottam a perl/shell szkriptekkel, nem túl elegáns, de működik:
azokat a témákat, cikkeket, blogbejegyzéseket, stb. listázza az alábbi szkript, amiben legalább egy új hozzászólás van.

A kód szövegfájlként

, mert itt nem igazán akar menni :S

Ezt a sort át kell írni:

curl --cookie SESS...=.... http://hup.hu/user/$SAJATID/track 2>/dev/null | 

A süti kiszedhető pl. a mozilla (firefox) cookies.txt fájljából
A $SAJATID pedig értelemszerűen a megfelelő azonosító itt a hupon :)


function callperl()
{

perl -e \
'

my $len = 0;
my $str = "";
while (<>) {
   if ($len == 0 && /^([[:space:]]*)'"$1"'/) {
    $len = length($1);
    for ($i = 0; $i != $len; ++$i) {
      $str .= " ";
    }
  } elsif ($len > 0) {
     if ($_ !~ /^$str'"$2"'/) {
      print;
    } else {
      $len = -1;
    }
  }
}'


}

curl --cookie SESS...=.... http://hup.hu/user/$SAJATID/track 2>/dev/null |
  sed 's/.*DOCTYPE.*/<!DOCTYPE SYSTEM XHTML transitional>/;s#.*ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd.*##' |
  perl -e '$last = ""; while (<>) { if ($last =~ /^<\/tr>$/ && /^<\/form>$/) {} else{ print;} $last = $_; }' |
  tidy -utf8 -q -i -w 0  2>/dev/null |
  callperl '<div id="tracker">' '<\/div>' |
  callperl '<tbody>' '<\/tbody>' | sed 's/<tr class=.*/<tr>/;s/^ *//' | egrep -v '^[[:space:]]*$' |

(
FIRST=0
LAST=0
LINEINDEX=0
HASNEW=0
DELIM='`'
D=$DELIM
while read; do
    [ "X$REPLY" = "X<tr>" ] && FIRST=1 || FIRST=0
    [ "X$REPLY" = "X</tr>" ] && LAST=1 || LAST=0
    
    [ $FIRST = 1 ] && LINEINDEX=0
    if [ $FIRST = 0 -a $LAST = 0 ]; then
	# intermediat lines
	LINEINDEX=$[ $LINEINDEX + 1 ]
	REPLY=$(echo "$REPLY" | sed -r 's#</?td>##g';)

	case $LINEINDEX in
	    1) 
		TYPE=$REPLY
		HASNEW=0
		;;
	    2)
		URL=$(echo "$REPLY" | sed -r 's#<a href="([^"]+)".*#\1#');
		TEXT=$(echo "$REPLY" | sed -r 's#<a href="[^"]+">(.*)</a>#\1#')
		;;
	    3)
		;;
	    4)
		echo "$REPLY" | grep -q '<br' && HASNEW=1 || HASNEW=0
		;;
	    5)
		if [ $HASNEW = 1 ]; then
		    NEWURL=$(echo "$REPLY" | sed -r 's#<a href="([^"]+)".*#\1#');
		    NEWTEXT=$(echo "$REPLY" | sed -r 's#<a href="[^"]+">([^ ]+) [^<]+</a>#\1#')
		fi
		;;
	esac
    fi
    
    if [ $LAST = 1 -a  $HASNEW = 1 ]; then
	echo $TYPE$D$URL$D$TEXT$D$NEWURL$D$NEWTEXT
    fi
done
)

A lényeg itt van:

    if [ $LAST = 1 -a  $HASNEW = 1 ]; then
	echo $TYPE$D$URL$D$TEXT$D$NEWURL$D$NEWTEXT
    fi

Ezt lehet tetszőlegesen felhasználni:

TYPE
A bejegyzés típusa, pl. blogbejegyzés, vagy szavazás
URL
A bejegyzés url-je, pl. /node/6544 vagy /cikkek/akarmi
TEXT
A bejegyzés címe, pl. "Friss hozzászólások (saját adatok közt)"
NEWURL
Ennek sok értelme nincsen, lényegében a $URL#new lesz
NEWTEXT
Az új hozzászólások száma

A fentiek alapján kis hegesztéssel (adatbázis backend, akár sqlite, vagy sima szöveges fájl, xml, vagy ami jólesik) megoldható, hogy a régi, phpBB-s új hozzászólás értesítés is működjön (levél érkezett). Vagy sajátgépen feljöhet egy ablak (dialog, kdialog, és így tovább).

Hozzászólások

curl --cookie SESS...=.... http://hup.hu/user/18091/track 2>/dev/null | Nekem így néz ki konkrétan a sorom, de nem kapok semmit kimenetre..

Ezt meg nem értem egészen
"A süti kiszedhető pl. a mozilla (firefox) cookies.txt fájljából"

Miért kell ezt nekem kiszednem? btw sudo find / -name cookies.txt nem talált semmit... :(

Leírnád neked, hogy néz ez ki konkrétan? Bocsi az értetlenkedésemért és előre is köszi, amúgy hozzá szeretnék csapni egy pynotify alkalmazást és úgy már egész pofás dolog jön ki belőle.. :)

No most megnéztem, eléggé egyszerű, a live http header firefox extension-nel kiszedtem a HTTP kérés fejlécéből azt a sort, hogy


Cookie: SESSvalamilyen_hexa_szam=masik_hexadecimalis_szam;

Ebből lett a curl paraméter:


--cookie SESSvalamilyen_hexa_szam=masik_hexadecimalis_szam

végezetül a teljes sor:


SAJATID=2809
curl --cookie SESSvalamilyen_hexa_szam=masik_hexadecimalis_szam http://hup.hu/user/$SAJATID/track 2>/dev/null |

Egykoron a firefox nem tárolta sqlite-ban a sütiket, hanem normál fájlban, cookies.txt néven. Ezt könnyű volt szerkeszteni, így nálam volt egy olyan sor, ami ugyanezeket tartalmazta és a távoli jövőben járt le:


.hup.hu TRUE    /       FALSE   2147369458      SESSvalamilyen_hexa_szam     masik_hexadecimalis_szam

Láthatod, hogy ez a sor ugyanaz, mint amit a curl-nak megadtam, ráadásul megspóroltam a rendszeres időközönkénti bejelentkezést is a weboldalon, hiszen a süti lényegében sosem járt le.

Az én általam ki operált cookies melyet az sqlite al szedtem ki, a hup.hu kulcsszóra keresve ez látható (többek között):

.hup.hu\tFALSE\t/\tFALSE\t1264710504\tSESSszámsor1\tszámsor2

SAJATID=18091
curl --cookie SESSszámsor=számsor2 http://hup.hu/user/$SAJATID/track 2>/dev/null |

A scriptet futtatva nem kapok semmit a kimenetre, most épp nem is volt új hozzászólás, elnézést a tudatlanságomért de nem ismerem a nyelvet nem nagyon tudom mit kéne visszakapnom, illetve csak akkor lesz valami a kimeneten ha lesz új olvasatlan post a tartalmaimnál?