„Csak guruknak” – konyhanyelven…

Kezdőlap Fórumok Programozás „Csak guruknak” – konyhanyelven…

10 bejegyzés megtekintése - 21-30 / 151
  • Szerző
    Bejegyzés
  • #2081688
    uzsolt
    Felhasználó

      Gondoltam, összedobok gyorsan egy szkriptet, ami valami cron-démon segítségével megadott időközönként ellenőrzi a megadott weboldalak tartalmát, hogyha esetleg újdonság keletkezik, arról én is értesüljek. Mielőtt még valaki mondaná, hogy RSS, mondanám, hogy sajna nem mindegyik oldalon van ilyen.
      Szóval, akkor a szkript:

      Code:
      #!/bin/bash

      MD5SUM_FILE=/etc/webdiff/md5sums
      CURDIR=`pwd`

      for i in `cat /etc/webdiff/webdiff.conf`; do
          DIR=`mktemp -d`
          cd $DIR
          wget $i &> /dev/null
          RESULT=$(grep „$i ” $MD5SUM_FILE 2>/dev/null)
          if [ „$RESULT” = „” ]; then
              (echo -n „$i ” ; md5sum $(basename $i)) >> $MD5SUM_FILE
          else
              if ( ( echo $RESULT | awk {‘print $2″  „$3’} ) | md5sum -c –status); then # Nincs változás
                  true
              else # Változás történt
                  if ( pidof X > /dev/null ); then
                      echo „Változás: $i” | osd_cat &
                  else
                      echo „Változás: $i”
                  fi
                  echo „Változás: $i” >> /home/zsolt/WEBLAP-VALTOZAS
                  LINE=$(grep -n ‘$RESULT’ $MD5SUM_FILE | awk -F „:” {‘print $1’})
                  sed -i „${LINE}d” $MD5SUM_FILE
                  (echo -n „$i ” ; md5sum $(basename $i)) >> $MD5SUM_FILE       
              fi
          fi
          rm $(basename $i)
          cd $CURDIR
          rmdir $DIR
      done

      Ami kell hozzá: md5sum, mktemp, awk, wget, osd_cat (xosd része). Meg persze a szokásos alapdolgok. Na meg nem árt, ha a /etc/webdiff könyvtárra a futtatónak van írásjoga 🙂 Persze át lehet írni más könyvtárra is.
      A /etc/webdiff/webdiff.conf megadja, hogy mely honlapokat kell ellenőrizni. Szerkezete: új sorokkal elválasztva a honlapcímek (htm(l)-fájlokat kell megadni!).

      Az else-ágba bármit lehet írni, hogy mi fusson le, ha valami változás történt. Jelen esetben ha megy az X, akkor a root-ba beírja az üzit, ha nem, akkor szimplán egy echo zajlik le. Meg ha véletlenül elkerülné a figyelmem, még egy WEBLAP-VALTOZAS nevű fájlba is beírok (amit lehet, hogy egy gkrellm-ben fogok figyelni a megfelelő plugin-nel).
      Nyilván, ha az osd_cat helyett mást írsz, akkor az osd_cat nem kell 😉

      Remélem, hasznotokra válik  :-*

      #2081689
      MBence
      Felhasználó

        Ötlet: szerintem /home/zsolt helyett érdemesebb lenne $HOME -ot írni, hogy a szkript bárhol használható legyen.

        #2081690
        uzsolt
        Felhasználó

          Azért nem lenne túlságosan jó, mert mi van, ha a root futtatja? Akkor a /root-ba kerül a megfelelő fájl és a zsolt user cseszheti, mert azt meg nem olvashatja. A /home/zsolt-ot a root pedig úgyis írhatja 😉
          Sőt, inkább egy „közös” fájlt kellene létrehozni, vagy mindenki saját maga futtatja. Ez legyen a ti gondotok, az alapot én megcsináltam, és az én kis egyfelhasználós (+root, +apache, +mysql, +progs) rendszeremben teljesen jó 😛

          #2081691
          admin
          Adminisztrátor

            ez egy ideiglenes file, írjon egyszerűen a /tmp-be,

            #2081692
            uzsolt
            Felhasználó

              Mármint a WEBLAP-VALTOZAS-t? Szerintem az abból a szempontból nem szerencsés, mivel a legtöbb disztró boot-kor tisztítja.
              Ahogy most nálam van megvalósítva:
              ~/.webdiff/ könyvtárba mindegyik figyelendő honlapnak van egy fájlja (amit a /etc/webdiff/webdiff.conf fájl második oszlopa ad meg, olyan LABEL módon), amibe a változás bekerül, mégpedig dátummal ellátva a legelső sorba, mivel a Fileread gkrellm-plugint találtam a legalkalmasabbnak, ami a fájl első sorát jeleníti meg.

              #2081693
              admin
              Adminisztrátor

                én a diff adatokra gondoltam amit letölt, egyebet tárolhatsz a /var/cache-ben is, a programot lehet daemonként vagy cron-ból is futtatni akár és ott tudja az user olvasni ha kell

                #2081694
                uzsolt
                Felhasználó

                  Ja, igen. Csak nekem így jobban tetszik, egy helyen van minden 😉
                  Gondolkodtam is rajta, hogy hova tegyem, aztán nem variáltam, jó lesz az ott. Amúgy igen, (f)cron-ban fut.

                  #2081695
                  uzsolt
                  Felhasználó

                    Kiegészítés: ha php alapú az oldal, akkor egy w3m -dump-ot célszerű használni a wget helyett, a dump-olt cuccra egy md5sum-ot gyártani, stb.

                    Amúgy tök jól megy, ma láttam, hogy a http://www.wesnoth.org mai dátummal változott 🙂

                    #2081696
                    pointux
                    Felhasználó

                      Na, akkor visszatértem a témába.

                      Code:
                      #!/bin/sh

                      prg=`basename $0`
                      retn=””

                      mount_umount()
                      {
                          mnt=`mount | grep „${prg}”`

                          if [ „${mnt}.” = „.” ]; then
                      echo „mounting /mnt/${prg}…”
                      mount /mnt/${prg}
                      return 1
                          else
                      echo „umounting /mnt/${prg}…”
                      umount /mnt/${prg}
                      return 2
                          fi
                      }

                      if test $# -eq 0; then
                          mount_umount
                      elif test $# -eq 1; then
                          mount_umount
                          retn=$?

                          case „$1” in
                          mc)
                      if test ${retn} -eq 1; then
                          mc /mnt/${prg} ~
                      fi
                      ;;
                          esac
                      fi

                      Ez egy kis csatoló alkalmazás, azoknak, akik lusták*, de türelmetlenek**. :)))

                      Lényeg a következő:
                      beszúrunk az fstabba pl. a következőt:

                      Code:
                      /dev/uba1 /mnt/pendrive …

                      elmentjük a fenti file-t „pendrive” néven (a „path”-ba)

                      majd a „pendrive” paranccsal (vagy rámutató ikonnal***) csatolhatjuk, vagy eltávolíthatjuk a pendrive-ot (ami éppen következik :)).

                      A poén kedvéért betettem még egy flik-flakkot: a „pendrive mc” parancs hatására a csatolás után (a leválasztás után nem) megnyílik az mc a pendrive és a ~ tartalmával a két panelen. (Természetesen bármilyen más alkalmazást is oda lehet biggyeszteni.)

                      Jó szórakozást!

                      * kézimunka kizárva
                      ** lassú animált sz@rok, auto-mount elfelejtve
                      *** ez esetben ne felejtsük el, hogy pl. az mc terminálban fog csak működni, tehát válasszunk mást, vagy írjuk át azt a sort, hogy terminálba futhasson

                      #2081697
                      uzsolt
                      Felhasználó

                        Már megint megszállt az ihlet (vagy inkább a szükség 😛 ):

                        tv-műsor konzolra

                        Code:
                        #!/bin/bash

                        CONFIG_FILE=~/.config/tvmusor.cfg

                        exec 9>&0 &1 | grep title | uni2ascii -d 2>/dev/null | awk -F „=
                        ” {‘print „t”$2’} > $TMPFILE
                                        echo „$(cat $TMPFILE | head -n 1 )”
                                        echo „$(cat $TMPFILE | sed ‘1 d’)”
                                        echo
                                done
                        rm $TMPFILE

                        A ~/.config/tvmusor.cfg (nálam, de a CONFIG_FILE-t másra is átírhatod):

                        Code:
                        1=m1
                        2=m2
                        6=Duna TV
                        3=TV2
                        5=RTL Klub
                        16=Viasat3
                        28=Cool TV
                        25=Film+
                        43=Filmmuzeum
                        32=Discovery
                        13=National Geographic
                        9=Spektrum

                        Ami kell: nyilván net, meg az rsstool nevű csoda. Az infot az animare.hu oldalról szedjük, ott az ember rámegy az rss-jelre, és látja, hogy mi a csatorna „kódja” (http://www.animare.hu/rss.aspx?channel=tvchannel&filter=%5Bred%5D32%5B/red%5D a discovery).

                        Persze eszképe-szekvenciákkal az echo kimenete szinezhető is (ahogy nálam is van). Ezt egy terminálban (akár x, akár nem) lehet futtatni, mondjuk egy

                        Code:
                        while true; do tvmusor ; sleep 900 ; done

                        módon. Ilyenkor 15 percenként szedi az infót.

                        Főleg ha pl. egy teljesen átlátszó eterm-be rakjuk, aminek semmilye sincs (keret, görgető, …), akkor nagyon jól néz ki.

                      10 bejegyzés megtekintése - 21-30 / 151
                      • Be kell jelentkezni a hozzászóláshoz.