KhanTengri
@KhanTengri

Получить <title> с удаленной веб-страницы?

В общем пользователь заходит на портал и указывает url.

На стороне сервера мне нужно перейти по указанному url и получить значение тега title.

На сервере у меня tomcat(в общем java) и крутится все это на никсах.



Вопрос: Каким образом это лучше реализовать?



Писать ли на java или использовать какие-то nix-овые команды? (lynx вроде может помочь)

Или, возможно, какой-то сторонний сервис для подобных вещей есть, вроде тех, что предоставляют скриншоты страниц или рассылают email оповещения?



Тут есть два момента:



во-первых, кодировка. В базу все сохраняется в UTF-8, а страницы могут быть самыми разными… и windows-1251 и ISO-8859-1 и даже GB2312. И это значние кодировки еще получить нужно. А оно может быть и в header и/или в meta. А может и вообще не быть, такое тоже бывает.



во-вторых, быстродействие.
  • Вопрос задан
  • 3454 просмотра
Пригласить эксперта
Ответы на вопрос 6
Была необходимость сделать это на PHP. Реализовывал просто:
— запрашиваем через url страницу (в заголовках запроса указываем предпочтение получить ответ в utf-8 — для тех веб-серверов, что отдают в той кодировке, которую запрашиваешь)
— проверяем статус ответа (может вообще этот url не существует)
— смотрим кодировку в заголовках (регулярками)
— смотрим кодировку в meta (регулярками)
— ищем title, конвертируем его значение в определённую кодировку.

p.s^ счас поищу регулярки на всё это…
Ответ написан
@antalus
Под Java есть отличная библиотека которая подойдет для загрузки удаленных страниц — Apache Httpclient.
hc.apache.org/httpcomponents-client-ga/examples.html
Ответ написан
NZeraF
@NZeraF
Лучше всего использовать Curl. Грузить часть кода с ограничением через CURLOPT_WRITEFUNCTION вместе с заголовком. По заголовку проверять ответ от сервера. Пример Curl goo.gl/0EOFQ Пример парсера goo.gl/sFP8t, определение кодировки простой функцией pastebin.com/51p9NUAX
Ответ написан
@golden13
Apache Httpclient + cpdetector (для определения кодировки)
Только он достаточно тяжёлый и ошибается :)
Алгоритм определения кодировки следующий:
1. Из заголовков сервера (Httpclient), если нет, то:
2. Из html (регуляркой вытаскиваете тэг), если нет, то:
3. cpdetector, если нет, то без понятия :)

А вообще задача довольно не тривиальная. И учтите, что получив byte[] массив от Httpclient — не конвертируйте его в String, иначе похерите кодировку :)
Ответ написан
@Elkaz
mb_convert_encoding (PHP) позволяет автоматически определить исходную кодировку. Проверял только на cp1251/utf8/koi8-r — нормально. Первый параметр — сама строчка. Второй параметр — в какую кодировку. Третий параметр необязательный — из какой кодировки.

php.net/mb_convert_encoding
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы