OBSOLETE. will update on request or when I'll have more time - lightscore@

searcheck v1.2

Utility for comparison of pairs of search result pages.
Currently it's in development stage, which means options and functionality can change considerably in the future.
Bug reports and improvement ideas are welcomed: lightscore@yandex-team.ru

HOW IT WORKS
Searcheck can be used both as console utility and as python imported module. Anyhow you'll need python (preferably 2.6 or 2.7).

Console mode is invoked like this:
    copy searcheck/ folder somewhere on your system storage;
    invoke unix shell and cd to searcheck/;
    prompt './invoke.py [arguments] [options]' (see below);
    if access rules had been reset and file became unexecutable, prompt 'chmod +x invoke.py';
    if python executable you intend to use is not in the /bin/ folder, do either of the following:
        make alias for your python executable and put it in /bin/;
        edit first line of invoke.py, so that full path to your executable would follow initial #! symbols.

Importing is done like this:
    copy searcheck/ folder to any folder which is in your PYTHONPATH;
    add 'import searcheck' or 'from searcheck import *' or any similar line to your script;
    usage of main package components can be figured out from tool.py content and docstrings in all modules.

Customisation and extension of functionality is done is the following major ways:
    add or modify parsers: parse.py module, create new static method in Parser class and change __parser_elector method accordingly;
    modify alanysing features or feture analysing: analyse.py (you'll probably need to modify parse.py as well);
    modify report format: view.py;
    any changes should be reflected in options.py to prevent new functionality from shadowing existing one;
    if possible, document your changes in searcheck/versions.txt file and share it with everyone interested.

Argements:
    url1, url2 - search URLs in format 'http://yandex.ru/yandsearch?lr=213&clid=12345&text=', possibly omitting 'http://'

Options:
    -i --infolevel
    specify level of details in reports:
        0 - count query pairs which came with different (non-identicial) results
        1 - same, plus display query texts that led to different results
        2 - as 0, plus for each query pair display results that didn't match
        3 - as 2, but display all results, matched ones included
    default: 1

    -t --text
    specify text string to be queried for (single pair of results in case of this option use)
        whitespaces are autoreplaced with pluses
        can't be used along with --textfile option

    -f --textfile
    specify text file from which query texts are to be read (one query for each line in file)
        whitespaces are autoreplaced with pluses
        can't be used along with --text option

    NOTE: if neither -t nor -f is specified, standard input stream is assumed to provide query texts
    NOTE: 2 main rules for url heads (arguments) and tails (options) are the following:
            1. the only autocorrection rule is adding missing protocol; everything else should be specified either in head or in tail
            2. 'text=[query text]' must always be in the very end of resulting url; the reason is necessity for quoting query text

    -w --width
    specify width of report
    default: 120

    -d --debug
    force verbose errors (don't suppress python error messages)
        default: False

    output
    specify output stream
        currently inaccessible from shell invoke (use pipes instead)
    default: stdout

===============================================================================
Программа для попарного сравнения поисковых результатов.
На данный момент в фазе активной разработки, то есть возможны изменения функционала и интерфейса.
Баги и хотелки слать: lightscore@yandex-team.ru

ОПИСАНИЕ
    check можно использовать как консольную утилиту и как подключаемый модуль в python. В любом случае потребуется Python (желательно 2.6 или 2.7).

Консольная утилита:
    скопируйте searcheck/ к себе на диск;
    запустите unix shell и сделайте текущей директорию searcheck/;
    напечатайте './invoke.py [аргументы] [настройки]' (см. ниже);
    в процессе копирования могли измениться настройки доступа; если исполнение файла запрещено, используйте команду 'chmod +x invoke.py';
    если интерпретатор python, который вы хотели бы задействовать, находится не по адресу /bin/python, сделайте одно из двух:
        создайте alias для желанного интерпретатора и поместите его в /bin;
        измените первую строку файла invoke.py так, чтобы после символов #! следовал полный путь к интерпретатору.

Подключаемые модули:
    скопируйте директорию searcheck/ в любое место на своём диске, находящееся в PYTHONPATH;
    подключите модуль (модули) в свой скрипт, например, добавив строку 'import searcheck' или 'from searcheck import *';
    изучите назначение функций и классов пакета с помощью скрипта tool.py и строк-документаций всевозможных структур.

Если вы хотите изменить или дополнить функциональность пакета:
    добавить или изменить парсеры можно в модуле parse.py; парсеры лучше реализовать как статические методы класса Parser,
        добавив условия их применения в метод __parser_elector;
    изменить набор анализируемых признаков или алгоритм сравнения можно в модуле analyse.py (вероятно, также потребуется изменить парсер);
    формат отдачи можно изменить в модуле view.py;
    все эти изменения настоятельно рекомендуется сопровождать изменениями в options.py для обеспечеия гибкого управления;
    также изменения желательно документировать в файле searcheck/versions.txt и расшаривать свою версию со всеми, кому она может понадобиться.

Аргументы:
    url1, url2 - URL-адреса поиска в формате 'http://yandex.ru/yandsearch?lr=213&clid=12345&text='; возможно опустить 'http://' и/или '&text='

Настройки:
    -i --infolevel
    указать уровень детализации отчётов программы
        0 - вывести число пар поисков, в которых найдены несовпадения
        1 - вывести тексты запросов, с несовпавшими результатами
        2 - как 0, плюс вывести все несовпадения для каждй пары
        3 - как 2, плюс вывести все результаты всех поисков, в т.ч. совпавшие

    -t --text
    указать текст запроса ( в этом случае будет выполнена одна пара запросов)
        пробелы автоматически заменяются знаками "плюс"
        не может применяться вместе с опцией --textfile

    -f --textfile
    указать текстовый файл, стороки которого будут использоваться как тексты запросов
        пробелы автоматически заменяются знаками "плюс"
        не может применяться вместе с опцией --text

    ПРИМЕЧАНИЕ: если не указаны параметры -t и -f, тексты запросов берутся из стандратного ввода
    ПРИМЕЧАНИЕ: 2 основных правила составления начальных (аргументы) и конечных (настройки) частей поискового URL:
                    1. единственное изменение, вносящееся автоматически - добавление отсутствующего протокола; все остальные части должны быть указаны явно
                    2. текст запроса в виде 'text=[query_text]' должен быть в самом конце URL, потому что текст запроса нужно автоматически экранировать

    -w --width
    указать ширину текстового вывода (для отчёта)

    output
    указать поток вывода
        в случае вызова через консоль автоматически устанавливается на stdout  (с возможным перенаправлением стандарными unix pipe)

    -d --debug
    выводить подробное описание ошибок (не подавлять сообщения об ошибках python)
        default: False

