onsdag 21 januari 2009

Meddelas om ny annons kommit på blocket.

Det som krävs är att Lynx är installerat, Lynx är en webbläsare för terminalen och att man kan spela upp .wav filer med kommandot play

Det skriptet gör är att kolla på Blocket.se under Datorer & Tillbehör och meddelar med ett ljud när nånting nytt har dykt upp. Det går förmodligen att lägga en annan av blocketskategorier som länk i stället för den länk jag anväder här, har dock inte testat det.

Jag kör skriptet var 5e minut med hjälp av crontabs.

Skriptet kan lätt skrivas om och användas i terminalen så att man bara behöver skriva blocket så visas de senaste X antal raderna upp i terminalen om det har blivit nån ändring sen man sist körde det och har det inte det så skriver den ut "Inget nytt =(" i terminalen. Man kan också om man vill ta bort den delen som kollar om nåt nytt har kommit så att när man kör kommandot blocket så visas alltid X antal rader med annonser.

Ljudmeddelande vid ny annons med hjälp av crontable:
Spara den här koden som cronblocket.sh se till att byta ut mitt användarnamn mot erat eget och att sökvägarna stämmer... Ljudfilen hittade jag under amsn så jag kör på den av ren lathet, ni kan välja vilken wav fil ni vill =) Glöm inte heller att göra filen körbar. chmod u+x sökväg_till_ cronblocket.sh eller så gör ni det i Nautilus, Högerklicka på filen, välj egenskaper och sedan rättigheter och kryssa för Kör

cronblocket.sh skriptet:
#!/bin/bash
#kollar om nåt nytt har kommit in på blocket under datorer & Tillbehör.

lynx -dump "http://www.blocket.se/li?ca=2_s&f=p&th=1&wid=1&q=&cg=5020&w=2&c=0" | iconv -f iso-8859-1 -t utf-8 | grep -v "thumb" | grep -A 3 "Idag\|Igår" | head -n 15 | cat > blocket.txt

touch
oldblocket.txt

diffblocket="$(diff /home/user_name/blocket.txt /home/
user_name/oldblocket.txt)"

if [ "$diffblocket" ]; then
play -q /home/user_name/.amsn/skins/PinkaMSN/sounds/alarm.wav;
fi

cp blocket.txt oldblocket.txt

Ni kollar i crontab med kommandot crontab -l (litet L) och ni redigerar crontab med crontab -e

Skriv in detta i crontab för att den ska göra kollen var 5e minut.
*/5 * * * * /bin/bash /home/user_name/bin/crontabblocket.sh

*/5 gör att det blir var femte min, var tredje min blir alltså */3, minuterna kan sättas mellan 0-59. Kom ihåg att ni måste ha stjärnorna där och att det måste vara minst ett mellanrum mellan 5an och stjärnorna och mellan de övriga stjärnorna och mellan stjärnorna och kommandot som ska köras.
För mer info. om hur man styr crontab kolla under min blogg med rubriken Crontab.

Om ni vill köra det i terminalen och få de nya inläggen utskrivna dä så kan ni göra så här:
Åter igen se till att sökvägarna stämmer och att ni har lynx installerat.

Kopiera den här koden till en fil som heter .bashrc och finns i er hemmamapp. Klistra in det längst ned, så kan ni fylla på där med egna funktioner sän och ha allt på ett ställe =)

.bashrc funktionen
blocket()
{
lynx -dump "http://www.blocket.se/li?ca=2_s&f=p&th=1&wid=1&q=&cg=5020&w=2&c=0" | iconv -f iso-8859-1 -t utf-8 | grep -v "thumb" | grep -A 3 "Idag\|Igår" | head -n 15 | cat > blocket.txt

touch
oldblocket.txt

diffblocket="$(diff /home/
user_name/blocket.txt /home/user_name/oldblocket.txt)"

if [ "$diffblocket" ]; then
cat /home/user_name/blocket.txt | grep -A 3 "Idag\|Igår"

else
echo "Inget nytt =("
fi

cp blocket.txt oldblocket.txt

}

Liten förklaring vad det här skripten gör:
Använder Lynx för att ta blocket sidan och skickar den vidare för att fixa så att åäö syns som det ska(iconv...) sen tas alla sökvägar till bilder bort (grep -v "thumb") efter det så söks det rätt på alla meningar som inehåller Idag eller Igår plus att de tre följande raderna behålls (grep -A 3 "Idag\|Igår") . Efer det så tas de 15 första raderna ut (head -n 15) den kan ni ändra på ifall ni vill visa fler eller färre rader i terminalen. Nu till sist så sparas de 15 raderna ner i filen blocket.txt (cat > blocket.txt)
Sedan skapas filen oldblocket.txt med hjälp av (touch oldblocket.txt). Ifall filen redan finns så uppdateras bara filens tidsstämpel.

Därefter så görs en koll för att se ifall det har kommit nån ny annons sen förra gången skriptet kördes. diff gämmför rad för rad den nyss skapade filen med den tidigare versonen av filen och är det nån skillnad där så sparas det i variabeln diffblocket.

If satsen kollar om diffblocket är tommt eller innehåller nåt. Innehåller den nåt så har det kommit en ny anons och då skrivs blocket.txt ut på skärmen, den innehåller ju alla de 15 första raderna med nya och gamla annonser (cat /home/user_name/blocket.txt | grep -A 3 "Idag\|Igår") delen där med grep -A 3 "Idag\|Igår" är egentligen onödig eftersom det är precis det som redan finns i filen man visar men med det här kommandot så får man Idag och Igår färgat och det ser lite snyggare ut... =) Else delen visar bara det där tråkiga meddelandet Inget nytt =( ifall diffblocket var tom.

Skillnad mellan skripten:
Skillnaden mellan de här två skripten är i stort sätt bara att den som körs med crontab är ett bash script som körs för sig och den spelar bara upp ett ljud ifall nått nytt dykt upp på blocket.
Det andra skriptet som skrivs in i .bashrc är en funktion som gör att man direkt i terminalen kan skirva blocket och få se de nyaste annonserna.

Det här skulle säkert kunna användas för att visa info i Conky i stället för i terminalen ifall man skulle vilja det.

Inga kommentarer: