Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Домен из URL 
:(
    Опции темы
Ace Wentura
Дата 3.3.2005, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 19.2.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Собственно, задача - получить доменное имя из URL.
То есть при URL www.yandex.ru/jshfgsdf/fksdhdfw/vshgvwef/sdfkwjf должно возвращаться www.yandex.ru. Но и на http:// и на всякие там org.net.spb.ru/sndfvjdsf/jshfgsdf/ тоже должно нормально реагировать.
Может есть стандартные средства?
PM MAIL   Вверх
korob2001
Дата 3.3.2005, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Написал такую подпрограмму get_domain, в качестве параметра, она принимает url, а затем возвратит его доменное имя.
Код

#!/usr/bin/perl -w
use strict;
# Допустим есть массив с разными url
my @urls = ( 'http://yandex.ru/catalog/lib/cat.html',
            'www.yahoo.com/search/results/search.php',
            'ftp://filmz.tr.tk/home/toolz/film.avi',
            'http://www.sharereactor.ru/games-catamog/gm.htm' );

# Это та самая подпрограмма
sub get_domain($) {
   my $url = shift;
   if ( substr( $url, 0, 1 ) =~ /^w$/i ) {
        $url = ( split(/\//, $url ) )[0];
   } else {
        $url = $1 if $url =~ /^(.+?\/\/.+?)\//;
   }
 return $url;
}

# Проходим по всему массиву и возвращаемый подпрограммой
# результат выводим в STDOUT
map( print(get_domain( $_ ) , "\n"), @urls );

Может я конечно не всё учёл, но url такого плана как в массиве @urls, она обработает как надо.
Если будут вопросы по коду, пиши.
Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
GoodBoy
Дата 4.3.2005, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 4
Всего: 83



Ace Wentura
самый простой вариант:

Код
$url = 'http://www.qwe.ru/';      #произвольный адрес
$url =~ s/^[a-z]+\:\/\///;        #чистим начало от типа протокола (http://, ftp:// и т.д.)
$domain = (split(/\//, $url))[0]; #режем строку по символу "/" и забираем первый элемент массива



--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Ace Wentura
Дата 4.3.2005, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 19.2.2004
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Спасибо большое за код. На его основе написал ещё один, которым реализовал ещё кое-какие возможности, которые забыл описать. Нужно было ещё выдирать IP из адресов.

Вот код. Может кому пригодиться :-)

Код


#!/usr/bin/perl -w
use strict;
my @urls = ( 'http://yandex.ru/catalog/lib/cat.html',
           'www.yahoo.com/search/results/search.php',
           'ftp://filmz.tr.tk/home/toolz/film.avi',
           'http://www.sharereactor.ru/games-catamog/gm.htm',
           '10.0.0.1/jhgdfjhsd/dfuwnbvxc',
           'http://10.0.0.50/jhsdgf/sdfiwe',
           'yahoo.com/jsdgfs/sdfhgsd' );
sub get_domain($) {
  my $url = shift;
  print("Before == $url\n");
  $_ = $url;
  s/(\w*\.\w*)(\/.*)/$1/;
  $url = $_;
  print("After  == $url\n");
  return $url;
}
map( print(get_domain( $_ ) , "\n\n"), @urls );



Есть извращения, конечно, но... :-)
PM MAIL   Вверх
GoodBoy
Дата 4.3.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 4
Всего: 83



Ace Wentura
А зачем извращаться??? Мой вариант вернёт тебе и доменное имя и IP-адрес!!!


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
korob2001
Дата 4.3.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Цитата

Ace Wentura
А зачем извращаться??? Мой вариант вернёт тебе и доменное имя и IP-адрес!!!

А я такой шаблон написал:
Код

s/^(.+\..+?)\/(?:.+)?/$1/

А вот так можно его заюзать:
Код

#!/usr/bin/perl -w
use strict;
my @urls = ( 'http://yandex.ru/catalog/lib/cat.html',
           'www.yahoo.com/search/results/search.php',
           'ftp://filmz.tr.tk/home/toolz/film.avi',
           'http://www.sharereactor.ru/games-catamog/gm.htm',
           '10.0.0.1/jhgdfjhsd/dfuwnbvxc',
           'http://10.0.0.50/jhsdgf/sdfiwe',
           'yahoo.com/jsdgfs/sdfhgsd' );

map( s/^(.+\..+?)\/(?:.+)?/$1/, @urls );
print join("\n", @urls);

Enjoy ;))))

Это сообщение отредактировал(а) korob2001 - 9.6.2005, 15:16


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Sadok
Дата 4.3.2005, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 2.11.2004

Репутация: 1
Всего: 2



Ace Wentura
Цитата
Собственно, задача - получить доменное имя из URL.


use URI::Split qw(uri_split);
$uri = "http://forum.vingrad.ru/index.php?showtopic=44335&unread=1&st=0&#entry342547";
($scheme, $auth, $path, $query, $frag) = uri_split($uri);

Это сообщение отредактировал(а) Sadok - 4.3.2005, 15:30
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0937 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.