Пишем альтернативный поиск по истории переписки в Pidgin


opium_inside - Posted on 17 Июнь 2009

Итак, для начала скажу что я меньше месяца в линуксе, и естественно, пока что ламер. Поэтому предоставляю не столько код, сколько идею.
Многие мои знакомые (да и я сам) недовольны странно реализованным способом поиска в истории по ключевым словам. Хочется чего-то более удобного.
Этот элементарнейший bash-скрипт позволяет нам автоматически проискать всю историю переписки с определенным человеком, сгенерировать на ее основе HTML документ содержащий строки с искомым ключевым словом и открыть его для просмотра. Я не хотел публиковать этот позор, но друзья сказали, что это очень удобная штука...
Пользуйтесь, делайте что хотите, изменяйте, улучшайте, доведите до ума, делайте из фекалий кондитерское изделие. :) Критика приветствуется, улучшения КРАЙНЕ приветствуются. Особая просьба пофиксить костыль в коде, он заметен. А все от незнания.

#!/bin/bash
#Pidgin history search by William Meth
#best viewed with VIM =)
 
if test -z "$1" & test -z "$2"; then
    echo 'Sy: histgrep icq_number 'searchword' output_filename'
    exit 1
fi
 
if [ -z $3 ]; then
    FILE="$HOME/Выхлопы/$2.html" #выходный файл
else
    FILE="$HOME/Выхлопы/$3.html"
fi
 
DIR="$HOME/Выхлопы/" #выходная директория
OWNER="478336342" #сюда вставьте свой номер аси
 
#----------------------------------------------------------------------------
if [[ -e $DIR ]]; then #исправь меня, я дебильная проверка
    echo 'йа_костыль' > /dev/null
else
    mkdir $DIR
fi
#----------------------------------------------------------------------------
 
#добавляем чтобы правильно определял кодировку
echo '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">' > $FILE
#собственно процедура поиска
cat $HOME/.purple/logs/icq/$OWNER/$1/* | grep -i $2 >> $FILE
firefox $FILE #заменяем на любимый броузер
exit 0
4.5
Ваша оценка: Ничего Рейтинг: 4.5 (2 голоса)

прикольно. но не понял смысла этого решения. у пидгина очень неплохой поиск по истории.
более того, недавно выяснил: оказывается не надо искать контакт в контактлисте, чтобы посмотреть историю -- Собеседники -> Посмотреть журнал пользователя -- а дальше набираем ник пользователя.

неплохо для первого раза. вот улучшеная версия.
непонятно правда кто такое William Meth Ж:-)

#!/bin/sh
# Pidgin history search by William Meth
# best viewed with VIM =)
 
# Ваши параметры, менять здесь
OWNER="478336342"         #сюда вставьте свой номер аси
 
DIR="$HOME/tmp/"          #выходная директория
BROWSER=firefox           #заменяем на любимый броузер
 
# дальше можно не смотреть
if [ -z "$1" -o -z "$2" ]; then
    echo 'Usage: histgrep icq_number searchword [output_filename]' 1>&2
    exit 1
fi
 
FILE="$DIR/${3:-$2}.html" # выходный файл
 
SDIR="$HOME/.purple/logs/icq/$OWNER/$1"
 
# проверяем есть ли у нас история заданого UIN-а
if [ ! -d "$SDIR" ]; then
    echo 'History for UIN: '$1' not found' 1>&2
    exit 2
fi
 
[ -d $DIR ] || mkdir -p $DIR
 
# добавляем чтобы правильно определял кодировку
echo '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">' > "$FILE"
 
# собственно процедура поиска
grep -hi "$2" $SDIR/* >> "$FILE"
 
$BROWSER "$FILE"

Полностью согласен с ramok. :)
Но я бы mkdir все же воткнул в тело if else, что бы не делать лишней проверки. ;)

patch:

 if [ ! -d "$SDIR" ]; then
     echo 'History for UIN: '$1' not found' 1>&2
     exit 2
+else 
+	mkdir -p $DIR
 fi
- 
-[ -d $DIR ] || mkdir -p $DIR

не подойдет. в if проверка $SDIR, а создается $DIR. это разные директории

Рады что откликнулись) Уильям Мет это я) Приятно познакомиться)) Точнее, мой творческий псевдоним.

Улучшения приняты, но все же настоял бы на cat | grep формате... Просто из-за того что grep, вызванный сам по себе вначале выдает адрес файла из которого взято и он достаточно длинный чтобы сделать выводной формат файла практически нечитабельным. cat | grep избавляет от этого недостатка. Еще похоже в процессе улучшения утрачен функционал сохранения в произвольное место, но он не слишком-то нужен. Потом попробую подвести итоги, переработать еще немного код. Пока подожду еще интересных идей.

> Приятно познакомиться))
приятно Ж:-)

> е... Просто из-за того что grep, вызванный сам по себе вначале выдает адрес файла из которого взято

$ man grep
...
       -h, --no-filename
          Suppress the prefixing of file names on output.  This is the default when there is only one file (or only standard input) to search.

подправил

> Еще похоже в процессе улучшения утрачен функционал сохранения в произвольное место, но он не слишком-то нужен.
было не "сохранение в произвольное место, а "сохранение под произвльным именем". это и осталось

Ладно, поправлено. Для большей благозвучности предлагаю привести окончательные параметры к виду

grep -hui 'запрос'

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.