пятница, 27 июля 2012 г.

Короткие факты в консоль

Сегодня набрел на сайт Фактрум, а точнее его страничку "Короткие факты". Мне это довольно сильно понравилось, поэтому решил сделать скриптик и прикрутить его к консоли, чтобы периодически выводился на нее какой-нибудь факт.



На фактруме какого-либо API я, к сожалению, не нашел, поэтому пришлось парсить сам html. Код написан на скорую руку, поэтому выглядит не очень, но работает стабильно.
Собственно сам код:
#!/bin/bash


# sleep time in seconds
SLEEPTIME="10"

[ -n "$1" ] && SLEEPTIME="$1"

NOW="`date '+%s'`"
LASTTIME_FILE="/dev/shm/factroom.lasttime"
[ ! -e "$LASTTIME_FILE" ] && echo "$NOW" > $LASTTIME_FILE
LASTTIME=`cat "$LASTTIME_FILE"`

if [ `expr $NOW - $LASTTIME` -gt $SLEEPTIME ] ; then 
    wget -t 2 -T 1 -qO- 'http://www.factroom.ru/random/' | sed -n '/<title>\|\/random\/[0-9]\+\//p' | tr -d '\n' | sed -e 's/^<title>\t\?\(.*\)\ #.\+.*\(\/random\/[0-9]\+\/\).*$/\1 \t >>> www.factroom.ru\2\n/'
    echo "$NOW" > $LASTTIME_FILE
fi
В переменной $LASTTIME_FILE используется каталог /dev/shm/, т.к. он находится в RAM и есть почти во всех современных дистрибутивах.
Переменная $SLEEPTIME нужна для того, чтобы факты не выводились слишком часто. Так же можно передать скрипту нужное кол-во секунд, например:
factroom 300
Т.о. скрипт не выведет ничего, если еще не прошло 5 минут с момента последнего вывода факта.

А чтобы в консоль само писалось, я добавил в .bashrc такую строчку:
PROMPT_COMMAND="factroom 900"
Теперь каждые 15 минут у меня в консоли появляется новый факт:
Кошки не ощущают сладкий вкус.   >>> www.factroom.ru/random/450/



PS: Александр Таранов, спасибо тебе за "Короткие факты".



Информация с сайта http://blog.angel2s2.ru/.

8 комментариев:

  1. если ещё добавить | /usr/games/cowsay -f /usr/share/cowsay/cows/tux.cow
    то будет ещё прикольнее ;)

    ОтветитьУдалить
  2. echo $(lynx -dump http://www.factroom.ru/random/ | sed -e '1,/\[.*/!s/.*//g;s/\[.*$//g;3,$d')
    (или, для верности, 4,$d)
    Попроще будет.

    ОтветитьУдалить
  3. а где сохранять скрипт чтоб он заработал, т.к. мне пишет - команда не найдена. ?

    ОтветитьУдалить
  4. В любом каталоге, который есть в переменной окружения $PATH. Я храню в $HOME/.bin и вношу этот каталог в $PATH. Так же можно в .bashrc написать полный путь к скрипту, например:
    PROMPT_COMMAND="$HOME/.bin/factroom 900"

    ОтветитьУдалить
  5. Не за что :) Поправьте название сайта, правильно — Фактрум. API сделаем в этом году.

    ОтветитьУдалить
  6. Даже не ожидал, что вы когда-то сюда зайдете :) Очень приятно :)

    Пардон :) Исправил!

    ОтветитьУдалить
  7. Доведём же это безумие до совершества !

    echo $(lynx -dump http://www.factroom.ru/random/ | sed -e '1,/\[.*/!s/.*//g;s/\[.*$//g;3,$d') | /usr/games/cowsay -f $(shuf -n1 -e /usr/share/cowsay/cows/*)

    ОтветитьУдалить
  8. Ахахах :))) Можно и так, прикола ради... ;)

    ОтветитьУдалить