Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
World of Warcraft

Novinky: Školení nejen k OS Ubuntu pro širokou veřejnost, více informací zde.

Autor Téma: [HOWTO] Automatické (a neprudivé) upozorňování na témata na fóru - postup  (Přečteno 2896 krát)

arrange

  • Závislák
  • ****
  • Příspěvků: 4031
  • Karma: +473/-15
  • "jdu s hlavou vztyčenou..."
    • Zobrazit profil
Rád chodím na fórum, ale hledal jsem nějaký způsob, jak být upozorňován na nové příspěvky, které mě zajímají, ale zároveň abych si nemusel stahovat upozornění přes poštu nebo obnovovat stránku s nepřečtenými tématy. Prostě někdy dělám na počítači něco jiného a chci se fóru věnovat jen tehdy, když se něco zajímavého děje.

Níže uvádím postup, jak jsem to (částečně) vyřešil. Budu rád za připomínky nebo nápady, jak to udělat jinak (líp).

Upozorňování na nové příspěvky na forum.ubuntu.cz
-----------------------------------------------------------------------------

Tento systém využívá možnosti nechat si posílat upozornění z fóra na svou emailovou schránku. Ty automaticky stahuje, vyfiltruje z nich odkazy na témata a zobrazí zprávu v upozorňovací oblasti. Kliknutím na vykřičník se témata otevřou ve Firefoxu.



1. Nastavení schránky pro zprávy z fóra

Vytvořte si emailovou schránku u svého oblíbeného poskytovatele. Já používám centrum.cz.
Založíme si např. schránku zbuntuj@centrum.cz. Nastavíme filtry tak, aby všechny zprávy kromě ty z ubuntu.cz zahazovaly. Na centru to vypadá takto:



2. Instalace a nastavení getmailu

Vybral jsem getmail, protože je pro mě jednodušší. Můžete zvolit jiný nástroj na stahování pošty.
Nainstalujte getmail: sudo apt-get install getmail4
Do domovského adresáře vytvořte složku .getmail: mkdir ~/.getmail
V ní vytvoříme konfigurační soubor pro getmail: gedit ~/.getmail/getmail_zbuntuj.conf
Do něho vložíme tento kód
Kód: [Vybrat]
[retriever]
type = SimplePOP3Retriever
server = pop3.centrum.cz
username = zbuntuj
password = <heslo>

[destination]
type = Mboxrd
path = ~/.getmail/zbuntuj.mbox

[options]
# ukecanost: 0 - jen chyby, 2 - nejvyšší
verbose = 0
# kam ukládat log
message_log = ~/.getmail/zbuntuj.log
# mazat zprávy po stáhnutí
delete = true
Doplníte jen název schránky (zde zbuntuj) a heslo (password).


3. Nastavení upozorňování na forum.ubuntu.cz

Ve svém profilu na fóru v sekci Upozorňování a email nastavte co si chcete nechat posílat. Já to mám nastavené např. takto

Pokud vás pak nějaké téma zaujme, klikněte na "Upozornění". Při odpovídání v tématu se upozornění přidá automaticky.

4. Skript na automatické stahování

Otevřete si soubor, např. takto gedit ~/zbuntuj.sh
Vložte tam kód
Kód: [Vybrat]
#! /bin/bash
# Skript automaticky stahuje upozornění na nové příspěvky, které přišly mailem z forum.ubuntu.cz.
# Pokud nějaké jsou, zobrazí výstražný vykřičník v "oznamovací oblasti" (systray).
# Kliknutím na tuto ikonu se všechny nové příspěvky otevřou v tabech ve FF.
# Po otevření odkazů jsou všechny zprávy z pomocných souborů vymazány.

# "Závislosti":
# getmail4 s nastaveným conf souborem v ~/.getmail/getmail_zpravyzubuntu.conf
# nastavení zasílání upozornění na email ve forum.ubuntu.cz
# firefox

StahniZpravy(){
#Stáhne zprávy pomocí getmail4 a vypreparuje z nich odkazy do souboru /tmp/linky.

getmail -r ~/.getmail/getmail_zpravyzubuntu.conf
grep topicseen ~/.getmail/zpravyzubuntu.mbox | sed 's/^.*http/http/' > /tmp/linky
}

#Jak často stahovat zprávy (v sekundách)?
FrekvenceStahovani=300
#Kolik maximálně najednou otevírat tabů ve Firefoxu?
MaxPocetTabu=30

while true
do

#Stáhnout zprávy. Pokud jsou nějaké nové, vypsat upozornění.
#Pokud ne, čekej danou dobu a zkus stáhnout znova.
ChceVidet=false

until $ChceVidet
do
StahniZpravy

if [[ -s /tmp/linky ]]
then
zenity --notification --text="Nové zprávy z forum.ubuntu!"
ChceVidet=true
else
sleep $FrekvenceStahovani
fi
done

#Pokud není spuštěný FF, spusť ho.
#Je ale potřeba počkat, než je ve stavu Sleep, jinak háže chybu, že jiné okno FF už běží.
if [[ `ps x | grep -c firefox` -eq 0 ]]
then
i=0
firefox &> /dev/null &
until [[ $i -gt 10 ]]
do
if [[ `ps --no-headers -C firefox o s` = S ]]
                then let i++
                else i=0
        fi
                sleep 0.2
done

# Otevřít nejdřív nepřečtená témata, jinak se automaticky označí jako přečtená a pak už se nezobrazí.
firefox -new-tab http://forum.ubuntu.cz/index.php?action=unread

fi

i=0

# radši znovu, jestli nepřibyly nějaké nové..
StahniZpravy

# Dva řádky pro ladění. Možno zakomentovat, nejsou nutné.
cat /tmp/linky >> /tmp/linky_debug
cat ~/.getmail/zpravyzubuntu.mbox >> /tmp/zpravyzubuntu.mbox_backup

# Otevřít odkazy ve FF, ale jen maximálně MaxPocetTabu najednou, ať se nezahltí systém.
while read rdk
do
firefox -new-tab $rdk &> /dev/null &
let i++
if [[ $i -gt $MaxPocetTabu ]]; then break; fi
done < /tmp/linky

# odkazy jsou otevřené, zprávy možno vymazat
cat /dev/null > ~/.getmail/zpravyzubuntu.mbox
done
exit 0
Uložte a nastavte, aby byl spustitelný, třeba pomocí chmod +x ~/zbuntuj.sh


5. Přidat skript do Sezení

Systém → Nastavení → Sezení → Přidat, v řádku příkaz ~/zbuntuj.sh. Zbytek dle uvážení. Tím se skript automaticky spustí při spuštění systému.

Hotovo.

Technické detaily

Možné problémy:
- pokud si téma přečtete dřív, než se stáhne z mailu, stejně se zobrazí upozornění, že máte nové zprávy. Skript nepozná, že jste to už četli;
- skript filtruje odkazy podle klíčového slova 'topicseen'. Pokud webmaster fóra změní syntax stránek, emailových zpráv či odkazů, pak skript přestane pravděpodobně fungovat a bude se muset předělat;
- jakékoliv jiné zprávy, které vám někdo z fóra pošle na nastavenou adresu, se přesunou do složky spam, takže si je asi nevšimnete. Skript by se musel upravit tak, aby stahoval jen maily s upozorněním.
- skript není určitě blbuvzdorný. Pokud nastanou problémy, vždy ho můžete zabít pomocí Alt+F2 → killall zbuntuj.sh

Ve výchozím nastavení skript kontroluje poštu co 5 min. Je možno změnit - viz poznámky ve skriptu.
Skript nezanechává žádné stopy. Pomocné soubory jsou uloženy v /tmp, zprávy se po stáhnutí mažou.
Odinstalace: vymazat adresář .getmail a soubor zbuntuj.sh. Odinstalovat getmail4. Zrušit upozornění (bod 3) a řádek v Sezení (bod 5).
« Poslední změna: 13 Únor 2009, 23:57:33 od arrange »
http://www.openstreetmap.org - mapy celého světa "wiki style"

arrange

  • Závislák
  • ****
  • Příspěvků: 4031
  • Karma: +473/-15
  • "jdu s hlavou vztyčenou..."
    • Zobrazit profil
Ještě si k tomu můžete přidat Greasemonkey script, který zjednodušuje přihlašování se k tématu:

1 Změní odkaz UPOZORNIT na "vypnout upozornění" nebo "zapnout upozornění", ve výchozím nastavení se totiž nepozná, jestli už jsem přihlášený, píše to jen "upozornit".
2 Zruší protivný pop-up "Opravdu se chcete přihlásit/zrušit upozornění na email?" a prostě to jen provede.

Postup:

- nainstalovat Greasemonkey: https://addons.mozilla.org/en-US/firefox/addon/748
- kliknout na ikonu opičky, Nový script
- formulář vyplnit dle uvážení, do kolonky zahrnout (include nebo tak nějak) dát
Kód: [Vybrat]
http://forum.ubuntu.cz/*- vložit do otevřeného okna kód
Kód: [Vybrat]
var imgList = document.getElementsByTagName("a");
for (i=0; i < imgList.length; i++)
{
Akt = imgList[i];
if ( Akt.href.match("sa=on") != null )
{
Akt.innerHTML="ZAPNOUT upozornění";
Akt.setAttribute('onclick',null);
}
if ( Akt.href.match("sa=off") != null )
{
Akt.innerHTML="VYPNOUT upozornění";
Akt.setAttribute('onclick',null);
}
}
- uložit.
http://www.openstreetmap.org - mapy celého světa "wiki style"

MacHala

  • Závislák
  • ****
  • Příspěvků: 1104
  • Karma: +107/-11
  • Big Bro iz watching joo!
    • Zobrazit profil
    • ZlejT
tohle je imho jeden z nejuzitecnejsich navodu za dlouhou dobu, fakt dobra prace...

myslim, ze v tom skriptu zubuntuj.sh je ale chyba -
Kód: [Vybrat]
if [[ `ps x | grep -c firefox` -eq 0 ]]tahle podminka se nikdy nesplni a bude to min 1
viz.
Kód: [Vybrat]
ps x | grep firefox
32414 pts/0    S+     0:00 grep firefox
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

qUAKER

  • Host
tohle je imho jeden z nejuzitecnejsich navodu za dlouhou dobu, fakt dobra prace...

myslim, ze v tom skriptu zubuntuj.sh je ale chyba -
Kód: [Vybrat]
if [[ `ps x | grep -c firefox` -eq 0 ]]tahle podminka se nikdy nesplni a bude to min 1
viz.
Kód: [Vybrat]
ps x | grep firefox
32414 pts/0    S+     0:00 grep firefox

jojo.. dal bych spíš

ps -ae | grep -c firefox


ale nejradši bych nepoužil FF, ale raději detekci toho, jaký browser používá uživatel ;)
a tahle vychytávka se nazývá sensible-browser
« Poslední změna: 27 Únor 2009, 09:36:03 od qUAKER »

arrange

  • Závislák
  • ****
  • Příspěvků: 4031
  • Karma: +473/-15
  • "jdu s hlavou vztyčenou..."
    • Zobrazit profil
Díky moc za ohlasy a tipy.

myslim, ze v tom skriptu zubuntuj.sh je ale chyba -
Kód: [Vybrat]
if [[ `ps x | grep -c firefox` -eq 0 ]]tahle podminka se nikdy nesplni a bude to min 1
viz.
Kód: [Vybrat]
ps x | grep firefox
32414 pts/0    S+     0:00 grep firefox
Taky jsem si myslel, že ten grep tam vyskočí, ale (aspoň u mne) to tak funguje jen z terminálu, pokud to běží ve skriptu, tak výstup grep -c firefox je opravdu 0, pokud není FF spuštěný.

jojo.. dal bych spíš
ps -ae | grep -c firefox

ale nejradši bych nepoužil FF, ale raději detekci toho, jaký browser používá uživatel ;)
a tahle vychytávka se nazývá sensible-browser
- sensible-browser jsem neznal, díky za tip, i když jako bashovský začátečník jsem neměl ambice dělat obecný skript
- ps -ae dával delší seznam, a taky mi sekal části názvu aplikace, tak jsem ho nepoužil, v čem je lepší?

Např.
Kód: [Vybrat]
arrange@arrange-desktop:$ ps -ae | grep x-session-manag
 5547 ?        00:00:00 x-session-manag
arrange@arrange-desktop:$ ps -ae | grep x-session-manager
arrange@arrange-desktop:$ ps x | grep x-session-manager
 5547 ?        Ssl    0:00 x-session-manager
 5632 ?        Ss     0:00 /usr/bin/seahorse-agent --execute x-session-manager
12616 pts/0    S+     0:00 grep --color x-session-manager
http://www.openstreetmap.org - mapy celého světa "wiki style"

MacHala

  • Závislák
  • ****
  • Příspěvků: 1104
  • Karma: +107/-11
  • Big Bro iz watching joo!
    • Zobrazit profil
    • ZlejT
Taky jsem si myslel, že ten grep tam vyskočí, ale (aspoň u mne) to tak funguje jen z terminálu, pokud to běží ve skriptu, tak výstup grep -c firefox je opravdu 0, pokud není FF spuštěný.

tak to je fakt zajimavy - me uz pred tim napadlo, ze ve skriptu by se to mohlo chovat jinak a tak jsem tu podminku specialne vyzkousel...
Ze by nejaky zahadny rozdil fedora-ubntu?
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

arrange

  • Závislák
  • ****
  • Příspěvků: 4031
  • Karma: +473/-15
  • "jdu s hlavou vztyčenou..."
    • Zobrazit profil
No jo, je to tak, ale proč, to nevím.
Kód: [Vybrat]
arrange@arrange-desktop:~$ ps x | grep -c firefox
2
arrange@arrange-desktop:~$ echo "ps x | grep -c firefox" > a
arrange@arrange-desktop:~$ cat a
ps x | grep -c firefox
arrange@arrange-desktop:~$ chmod +x a
arrange@arrange-desktop:~$ ./a
1
arrange@arrange-desktop:~$
(Počet instancí firefoxu (ps x | grep -c firefox) je z terminálu 2, ale pokud to stejné spustím jako skript ze souboru (a), je jen jedna)
http://www.openstreetmap.org - mapy celého světa "wiki style"

MacHala

  • Závislák
  • ****
  • Příspěvků: 1104
  • Karma: +107/-11
  • Big Bro iz watching joo!
    • Zobrazit profil
    • ZlejT
A srovnani z fedory :D
Kód: [Vybrat]
[jirka@jm-ntb ~]$ ps x | grep firefox
13324 pts/0    S+     0:00 grep firefox
31296 ?        S      0:00 /bin/sh /usr/lib64/firefox-3.0.6/run-mozilla.sh /usr/lib64/firefox-3.0.6/firefox -p
31314 ?        Sl     2:47 /usr/lib64/firefox-3.0.6/firefox -p
[jirka@jm-ntb ~]$ ps x | grep -c firefox
3
[jirka@jm-ntb ~]$ echo "ps x | grep -c firefox" > a
[jirka@jm-ntb ~]$ cat a
ps x | grep -c firefox
[jirka@jm-ntb ~]$ chmod +x a
[jirka@jm-ntb ~]$ ./a
3
[jirka@jm-ntb ~]$ echo $SHELL
/bin/bash
###### zmena na uzivatele bez zapnuteho firefoxu #########
[root@jm-ntb ~]# ps x | grep firefox
15322 pts/1    S+     0:00 grep firefox
[root@jm-ntb ~]# ps x | grep -c firefox
1
[root@jm-ntb ~]# echo "ps x | grep -c firefox" > a
[root@jm-ntb ~]# cat a
ps x | grep -c firefox
[root@jm-ntb ~]# chmod +x a
[root@jm-ntb ~]# ./a
1
[root@jm-ntb ~]# echo $SHELL
/bin/bash

muze mi to nekdo vysvetlit? (jediny co me napda, je ze pouzivas jiny shell)


Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

arrange

  • Závislák
  • ****
  • Příspěvků: 4031
  • Karma: +473/-15
  • "jdu s hlavou vztyčenou..."
    • Zobrazit profil
No, holt ten skript není "portable". Taky Ti to jinak spouští firefox.
Kód: [Vybrat]
arrange@arrange-desktop:~$ echo $SHELL
/bin/bash
arrange@arrange-desktop:~$ bash --version
GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
http://www.openstreetmap.org - mapy celého světa "wiki style"

MacHala

  • Závislák
  • ****
  • Příspěvků: 1104
  • Karma: +107/-11
  • Big Bro iz watching joo!
    • Zobrazit profil
    • ZlejT
GNU bash, version 3.2.39(1)-release (x86_64-redhat-linux-gnu) - az na to, ze to kompiloval nekdo jiny, tak stejny... inu jsou veci mezi nebem a zemi...
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8