Команда google <запрос> (Как сделать?)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
yamah
Сообщения: 1113
ОС: Rosa Fresh, Debian, RELS

Команда google <запрос>

Сообщение yamah »

Захотелось ради прикола сделать команду
google <запрос>.

Запускать ее из командной строки.

По идее такая команда должна запускать браузер (в идеале установленный по умолчанию в системе, но сойдет вообще любой) и выдавать страницу с результатами поиска.
Для начала, хотя бы реализовать запросы слов, написанных на латинской раскладке.

В search.ini Оперы нашел строку

Код: Выделить всё

http://www.google.com/search?q=%s&sourceid=opera&num=%i&ie=utf-8&oe=utf-8

Куда вместо %s подставляется строка запроса.

К сожалению, я не программер, но думаю, что с помощью FreePascal и Lazarus реализовать потихоньку смогу.
Есть ли способ это сделать с помощью sh-скрипта?
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:

Аватара пользователя
Skladnoy
Сообщения: 90
ОС: Debian

Re: Команда google <запрос>

Сообщение Skladnoy »

Код: Выделить всё

#!/bin/sh

x-www-browser "http://www.google.com/search?q=$1&ie=UTF-8&oe=UTF-8"


Это _слишком_ простой вариант. Будет работать только с ASCII запросами. Нужно кодировать все не допустимые в URL символы. Какие именно не скажу. Надо смотреть RFC. Правда браузер может и сам заменять недопустимые символы
Спасибо сказали:

allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Команда google <запрос>

Сообщение allez »

Можно попробовать так:

Код: Выделить всё

$ cat ~/bin/google
#!/bin/sh

. ~/.googlerc

if [ "$DISPLAY" = "" ];
then
  BROWSER=$CONSBROWSER
else
  BROWSER=$XBROWSER
fi

$BROWSER http://www.google.com/search?q="$1"

$ cat ~/.googlerc
CONSBROWSER="/usr/bin/w3m"
XBROWSER="/usr/bin/firefox"

В даном случае скрипт берет настройки из файла ~/.googlerc - там указывается, каким браузером пользоваться в консоли, а каким - в Иксах. Проверил работу с запросами, содержащими не-ASCII символы - w3m, firefox работают без проблем, для Оперы скрипт нужно будет дорабатывать.
Спасибо сказали:

Аватара пользователя
Juliette
Сообщения: 5058
Статус: ROSA Lab
ОС: Ubuntu LTS, Mandriva 2011

Re: Команда google <запрос>

Сообщение Juliette »

Может в "проекты"? Полезная штука, наверняка многие оценят. (По контрасту с обсуждением мух и котлет товарища Гоблина...) :rolleyes:
Спасибо сказали:

Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4333
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: Команда google <запрос>

Сообщение Goodvin »

А не проще сделать слово "google" банальным алиасом на нужный браузер с нужными параметрами ?
Вроде как должно работать.
Спасибо сказали:

Аватара пользователя
yamah
Сообщения: 1113
ОС: Rosa Fresh, Debian, RELS

Re: Команда google <запрос>

Сообщение yamah »

2 allez
Большое спасибо за помощь. На основе Вашего скрипта сделал возможность запускать с параметром выбора поисковика Google, Yandex, WIKI. Жаль только не еще не дашло как сделать защиту от "дурака" когда неизвестный параметр не отсылался запросом на Гугл. :drinks:
Возможно код не оптимизированный, но все же...

Код: Выделить всё

#!/bin/sh

. ~/.googlerc

if [ "$DISPLAY" = "" ];
then
  BROWSER=$CONSBROWSER
else
  BROWSER=$XBROWSER
fi

if [ "$1" = "-w" ];
then
  $BROWSER http://ru.wikipedia.org/wiki/$2
fi

if [ "$1" = "-y" ];
then
  $BROWSER http://www.yandex.ru/yandsearch?text="$2"
fi

if [ "$1" = "-g" ];
then
  $BROWSER http://www.google.com/search?q="$2"
else
  $BROWSER http://www.google.com/search?q="$1"
fi


Укопировал файл "google" в /sbin под рутом работает, под юзером "bash: google: command not found"... :(

Update: Стормозил: надо было все-таки в /bin кинуть. :blush:

2 Juliette: На усмотрение администрации...
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:

Аватара пользователя
Juliette
Сообщения: 5058
Статус: ROSA Lab
ОС: Ubuntu LTS, Mandriva 2011

Re: Команда google <запрос>

Сообщение Juliette »

Переношу тогда.
Спасибо сказали:

Аватара пользователя
yamah
Сообщения: 1113
ОС: Rosa Fresh, Debian, RELS

Re: Команда google <запрос>

Сообщение yamah »

Подправил код.
А то помимо поиска на Яндексе или в ВИКИ, еще в придачу начинало искать на Гугле.

Код: Выделить всё

#!/bin/sh

. ~/.googlerc

if [ "$DISPLAY" = "" ];
then
  BROWSER=$CONSBROWSER
else
  BROWSER=$XBROWSER
fi

if [ "$1" = "-w" ];
then
  $BROWSER http://ru.wikipedia.org/wiki/$2
else
if [ "$1" = "-y" ];
then
  $BROWSER http://www.yandex.ru/yandsearch?text="$2"
else
if [ "$1" = "-g" ];
then
  $BROWSER http://www.google.com/search?q="$2"
else
  $BROWSER http://www.google.com/search?q="$1"
fi
fi
fi
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:

allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Команда google <запрос>

Сообщение allez »

Goodvin писал(а):
15.05.2008 10:46
А не проще сделать слово "google" банальным алиасом на нужный браузер с нужными параметрами ?
Вроде как должно работать.

Это было первое, что пришло мне в голову. :) Увы, не подходит из-за пробела, отделяющего команду от аргумента. Если, допустим, дать команду alias google='w3m http://google.com/search?q=', а потом - google "Search this", то выполнится такая конструкция: w3m http://google.com/search?q= Search this и пробел между знаком равенства и поисковым запросом всю обедню испортит. :)
Спасибо сказали:

Аватара пользователя
Full Null
Сообщения: 555
Статус: Продвинутый ламер
ОС: ArchLinux

Re: Команда google <запрос>

Сообщение Full Null »

Вчера настрочил для себя скриптик для гуглевания не запуская браузер, можете оценить :rolleyes:
Набираю: google "слова поиска" кол-во результатов (максимум 7 на 1 стр)

Код: Выделить всё

#!/usr/bin/php
<?php

$google_query=urlencode(@$argv[1]);
$num_result=intval(@$argv[2]);
if(empty($num_result)){$num_result=1;}
if(empty($google_query)){echo'А где же запрос? :)';}

$socket=fsockopen('www.google.ru',80);
$uri='/search?q='.$google_query;

$request='';
$body='';

$request.="GET $uri HTTP/1.1\r\n";
$request.="Host: www.google.ru\r\n";
$request.="Content-Type: text/html; charset=utf-8\r\n";
$request.="User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; Linux)\r\n";
$request.="Connection: close\r\n\r\n";

@fputs($socket,$request);
while(!feof($socket)) $body.= @fgets($socket);

$exp1=explode('<div class=g>',$body);

$i=0;

foreach($exp1 as $val){
if($i==$num_result+1){break;}

$str=strpos($val,'</span><nobr>');
$body=substr($val,0,$str);


$body=str_replace('<br>',"\n",$body);
$body=str_replace('<tr>',"\n",$body);
$body=strip_tags($body);
$body=str_replace('&middot;','',$body);
$body=str_replace('&nbsp;',' ',$body);
$body=str_replace(' - [ Перевести эту страницу ]','',$body);


echo trim($body)."\n";

if($i!=0){print"-----\n";}
$i++;
}
?>


Скопировал в /usr/bin/google и радуюсь ;)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Jabber: reiser_@jabber.ru
Я на LastFM: http://www.lastfm.ru/user/ReiserRUS
Спасибо сказали:

Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Команда google <запрос>

Сообщение BlackStar »

Для любителей использования Google в консоли: http://goosh.org
LightLang Team
Спасибо сказали:

Xandry
Сообщения: 980
ОС: openSUSE

Re: Команда google <запрос>

Сообщение Xandry »

BlackStar писал(а):
03.06.2008 10:49
Для любителей использования Google в консоли: http://goosh.org

Спасибо. Классная вещь.
Спасибо сказали:

Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Команда google <запрос>

Сообщение rm_ »

$body=str_replace('<br>',"\n",$body);
$body=str_replace('<tr>',"\n",$body);
$body=strip_tags($body);
$body=str_replace('&middot;','',$body);
$body=str_replace('&nbsp;',' ',$body);
$body=str_replace(' - [ Перевести эту страницу ]','',$body);

Откройте для себя html2text, что-ли.
Спасибо сказали:

Аватара пользователя
MadDog
Бывший модератор
Сообщения: 2298
Статус: Добрый банщик

Re: Команда google <запрос>

Сообщение MadDog »

BlackStar писал(а):
03.06.2008 10:49
Для любителей использования Google в консоли: http://goosh.org
В lynx и links не работает, и смысл открывать такое в той же Опере?
MadDog's Blog
Внимательно читать: Как правильно задавать вопросы
No fate but what we make
Спасибо сказали:

Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Команда google <запрос>

Сообщение BlackStar »

MadDog действительно не работает. Ну это я так для расширения кругозора. :)
LightLang Team
Спасибо сказали:

Аватара пользователя
Warchief
Сообщения: 84
ОС: арч , Гента

Re: Команда google <запрос>

Сообщение Warchief »

Full Null

классный скрипт, ты не мог бы сделать похожий для википедии?
root@brain # mv -rf /* /dev/null
Спасибо сказали:

Аватара пользователя
MadDog
Бывший модератор
Сообщения: 2298
Статус: Добрый банщик

Re: Команда google <запрос>

Сообщение MadDog »

BlackStar писал(а):
03.06.2008 12:49
MadDog действительно не работает. Ну это я так для расширения кругозора.
Да нормально, просто я сначала открыл в огнелисе - работает. Гляжу надпись наверху AJAX. Сразу в голову мысли полезли что неужто заставили ява-скрипт работать в lynx'е.... :)

Да и количество результатов поиска он выдаёт какое-то странное.... "маловато будет" (с) Падал прошлогодний снег
Ладно, завязываю оффтопик.
MadDog's Blog
Внимательно читать: Как правильно задавать вопросы
No fate but what we make
Спасибо сказали:

un-defined
Сообщения: 145
ОС: Kubuntu, Gentoo

Re: Команда google <запрос>

Сообщение un-defined »

Там в скриптах выше выбор есть по параметру, какой поисковик открывать.
Но у нас теперь во многих бразуерах вкладки... можно ли, например, открыть сразу три вкладки с одним поисковым запросом, но в разных поисковиках? Для сравнения эффективности, чтоб уж сразу..
Don`t try - just do or do not ©Master Joda
Спасибо сказали:

Аватара пользователя
yamah
Сообщения: 1113
ОС: Rosa Fresh, Debian, RELS

Re: Команда google <запрос>

Сообщение yamah »

Можно, если в GUI-е.
Только он скорее всего не три вкладки открет в одном броузере, а три окна.

Код: Выделить всё

#!/bin/sh

. ~/.googlerc

if [ "$DISPLAY" = "" ];
then
  BROWSER=$CONSBROWSER
else
  BROWSER=$XBROWSER
fi

  $BROWSER http://ru.wikipedia.org/wiki/$1 http://www.yandex.ru/yandsearch?text="$1" http://www.google.com/search?q="$1"


upd: Хотя, нет, открывает в трех вкладках.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:

allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Команда google <запрос>

Сообщение allez »

Проверил: Firefox 3 и Opera 9.50 открывают URL во вкладках. Синтаксис: $BROWSER URL1 URL2 URL3 ...
Из консольных браузеров такое умеет w3m. Синтаксис: $BROWSER -N URL1 URL2 URL3 ...
А вот Links у меня вообще вкладки не поддерживает - сборка такая, видимо...
Спасибо сказали:

IMB
Сообщения: 2513
ОС: Debian

Re: Команда google <запрос>

Сообщение IMB »

Код: Выделить всё

Package: surfraw

Description: a fast unix command line interface to WWW
 Surfraw - Shell Users' Revolutionary Front Rage Against the World Wide Web

 Surfraw provides a fast unix command line interface to a variety of popular WWW
 search engines and other artifacts of power. It reclaims google, altavista,
 dejanews, freshmeat, research index, slashdot and many others from the
 false-prophet, pox-infested heathen lands of html-forms, placing these wonders
 where they belong, deep in unix heartland, as god loving extensions to the
 shell.

 Surfraw abstracts the browser away from input. Doing so lets it get on with
 what it's good at. Browsing. Interpretation of linguistic forms is handed back
 to the shell, which is what it, and human beings are good at. Combined with
 incremental text browsers, such as links, w3m (or even lynx), and screen(1), or
 netscape-remote a Surfraw liberateur is capable of research speeds that leave
 GUI tainted idolaters agape with fear and wonder.

Хотя написание скрипта тоже неплохая идея.
Спасибо сказали:

allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Команда google <запрос>

Сообщение allez »

IMB писал(а):
20.07.2008 19:05
Хотя написание скрипта тоже неплохая идея.
:)
Правильно, велосипедов должно быть много. Чтобы всем хватило. :)
Спасибо сказали:

Аватара пользователя
UTeHok
Сообщения: 354
Статус: Антиглобалист
ОС: Debian GNU/Linux

Re: Команда google <запрос>

Сообщение UTeHok »

yamah писал(а):
15.05.2008 08:20
Захотелось ради прикола сделать команду
google <запрос>.


оффтоп конечно, но навеяло
«Make love, not war!»
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Команда google <запрос>

Сообщение t.t »

allez писал(а):
15.05.2008 13:43
Goodvin писал(а):
15.05.2008 10:46
А не проще сделать слово "google" банальным алиасом на нужный браузер с нужными параметрами ?
Вроде как должно работать.
Это было первое, что пришло мне в голову. :) Увы, не подходит из-за пробела, отделяющего команду от аргумента. Если, допустим, дать команду alias google='w3m http://google.com/search?q=', а потом - google "Search this", то выполнится такая конструкция: w3m http://google.com/search?q= Search this и пробел между знаком равенства и поисковым запросом всю обедню испортит. :)
Тут нужен не алиас, а функция:

Код: Выделить всё

google() {
  w3m http://google.com/search?q="$1"
}
И всех делов (;
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Команда google <запрос>

Сообщение t.t »

yamah писал(а):
15.05.2008 13:39
Подправил код.
А то помимо поиска на Яндексе или в ВИКИ, еще в придачу начинало искать на Гугле.

Код: Выделить всё

#!/bin/sh

. ~/.googlerc

if [ "$DISPLAY" = "" ];
then
  BROWSER=$CONSBROWSER
else
  BROWSER=$XBROWSER
fi

if [ "$1" = "-w" ];
then
  $BROWSER http://ru.wikipedia.org/wiki/$2
else
if [ "$1" = "-y" ];
then
  $BROWSER http://www.yandex.ru/yandsearch?text="$2"
else
if [ "$1" = "-g" ];
then
  $BROWSER http://www.google.com/search?q="$2"
else
  $BROWSER http://www.google.com/search?q="$1"
fi
fi
fi
Хм.. С таким кодом я Вам таки советую почитать на досуге Advanced Bash-Scripting Guide. Я бы это написал, например, вот так:

Код: Выделить всё

#!/bin/bash
. ~/.googlerc
[ -z "$DISPLAY" ] && BROWSER=$CONSBROWSER || BROWSER=$XBROWSER

case "$1" in
    w*|-w*)    url="http://ru.wikipedia.org/wiki/$2";;
    y*|-y*)    url="http://www.yandex.ru/yandsearch?text=$2";;
    g*|-g*)    url="http://www.google.com/search?q=$2";;
    *)        url="http://www.google.com/search?q=$1";;
esac
$BROWSER "$url"

Ещё один момент: считается хорошим тоном имена локальных переменных в shell писать строчными буквами (см. пример с $url).

А в Debian и основанных на нём дистрибутивах я бы ещё немного упростил:

Код: Выделить всё

#!/bin/bash
case "$1" in
    w*|-w*)    url="http://ru.wikipedia.org/wiki/$2";;
    y*|-y*)    url="http://www.yandex.ru/yandsearch?text=$2";;
    g*|-g*)    url="http://www.google.com/search?q=$2";;
    *)        url="http://www.google.com/search?q=$1";;
esac
[ -z "$DISPLAY" ] && www-browser "$url" || x-www-browser "$url"
(см. http://www.google.com.ua/linux?q=alternati...ta=lr%3Dlang_ru)
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

Аватара пользователя
TechnoMag
Сообщения: 298
ОС: Debian 8.0 Jessie

Re: Команда google <запрос>

Сообщение TechnoMag »

А можно это как-то сделать на иентерпретируемом языке? Скажем на Python + Qt. Простенькое окно с кнопкой и полем ввода.
- Домашний Linux -
Памятки для пользователя
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Команда google <запрос>

Сообщение t.t »

TechnoMag писал(а):
28.08.2008 12:22
А можно это как-то сделать на иентерпретируемом языке? Скажем на Python + Qt. Простенькое окно с кнопкой и полем ввода.
Начнём с того, что shell -- тоже интерпретируемый язык (;

А что до окошка... Зачем дублировать адресную строку браузера, да ещё и со столь урезанным функционалом? Тут вся суть была в том, чтобы в командную строку это вынести.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:

Аватара пользователя
yamah
Сообщения: 1113
ОС: Rosa Fresh, Debian, RELS

Re: Команда google <запрос>

Сообщение yamah »

t.t писал(а):
28.08.2008 11:42
Хм.. С таким кодом я Вам таки советую почитать на досуге Advanced Bash-Scripting Guide. Я бы это написал, например, вот так:

Код: Выделить всё

#!/bin/bash
. ~/.googlerc
[ -z "$DISPLAY" ] && BROWSER=$CONSBROWSER || BROWSER=$XBROWSER

case "$1" in
    w*|-w*)    url="http://ru.wikipedia.org/wiki/$2";;
    y*|-y*)    url="http://www.yandex.ru/yandsearch?text=$2";;
    g*|-g*)    url="http://www.google.com/search?q=$2";;
    *)        url="http://www.google.com/search?q=$1";;
esac
$BROWSER "$url"

Спасибо за ссылку! И за код! :)
Честно - это мой первый опыт написания скриптов был (не считая простых "ленивок" - выполнение команды с заданными параметра без ввода оных). Тем более, что-то, что знаю, я изучал, просматривая простенькие скрипты. :blush: Да и на турбо паскале ничего путного не писал лет так 5, не говоря уже о языках более высокого уровня.
Все замечания учту.

А так, даже код-то не мой, по сути.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали: