Вопрос к программерам

esipova74

На каком язаке лучше аписать прогу, постоянно сканирующую интернет (напрёд заданные ресурсы) на вопрос обновления информации. Спасибо.

marinaSV

а зачем тебе "лучше"?
пиши на ассемблере!
во будет работать! ага.

stalker33rus10

На том, который знаешь

Dasar

Смотря на сколько серьезная прога (по требуемым ресурсам, по использованию и т.д.)
Если не очень серьезная, то на том, какой знаешь.
Если серьезная, то C/C++.

1234554321

Ща набегут хаятели...

Ivan8209

Почти безразлично.
В любом случае будешь писать на том языке, который знаешь.
Либо узнаёшь при написании.
Достаточно, чтобы прилагались к компилятору или интерпретатору сетевые средства и пр.
А Си(++) --- только если ты пишешь новый яндекс.
---
...Я работаю антинаучным аферистом...

1234554321

На VB изобразишь?

Dasar

А в чем проблема?
Ищешь или пишешь сам пару вспомогательных Com-компонент для работы с инетом.
А логику с чистой душой пишешь на VB.

1234554321

не считается , компоненты ведь на сях будут

Dasar

Почти в любом языке можно найти компоненты, либы и т.д., которые были написаны на C/C++.

1234554321

дык

Ivan8209

Какая разница?
Надо будет --- хоть на шелле буду писать. Sono cosa nostra.
Благо, всякие вспомогательные вещи, почти наверняка, написаны.
---
...Я работаю антинаучным аферистом...

1234554321

никакой. некоторые готовы и на Симпасе писать

Ivan8209

VB я не знаю, ибо он мне не нужен и нафиг не сдался. А "Бейсиков" от "Микрософта" я уже насмотрелся. Ничего хорошего.
---
...Я работаю антинаучным аферистом...

Ivan8209

Ну, так а причём тогда хаятели?
---
...Я работаю...

1234554321

всё. отстань. пиши на чём хочешь. Человек спросил "на чём лучше", все желающие высказались.

tucha96

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

natali20

будущем

JERRY

Зачем искать/писать? Есть же Internet Explorer.

Ivan8209

А задание прочитать?
---
...Я работаю...

JERRY

Блин, Контра, я имею ввиду COM компоненты Internet Explorer'a. Медленно, но ничего делать ручками зато не надо, хоть на VB Script пиши. А так С наш выбор.

Ivan8209

А-а-а.
Ну, тогда правильно.
Только решение какое-то тяжеловесное.
Вроде же тебе надо только http-заголовки получить?
Насколько я помню, там есть что-то вроде "Last-Changed:".
А тогда, вроде, можно wget-ом...
---
...Я работаю...

Ivan8209

Да и "Си" тяжеловесен.
Лучше поискать что-то попроще.
Можно посылать http-запросы по netcat-у, если у wget-а нет обеспечения доставки только заголовков.
sed + bash/cmd при подготовке, а внутри, что-то вроде "netcat/wget | sed".
На выходе получаешь список дат в виде RFC822 в порядке, соответствующем исходному списку файлов.
Можно получить и пары "файл --- время обновления"
И никаких "сей".
---
...Я работаю антинаучным аферистом...

JERRY

Может и так. Я не знаю, как работает http, поэтому советов давать не могу. Если можно получить дату документа, его не скачивая, то, конечно, можно и по простому. Только не уверен что такая фишка прокатит со страницами генерируемыми на лету всякими perl'ами и php. Скорее всего, придется таки скачивать страницу и считать что-нибудь типа CRC.

rfgbnfy

Вроде же тебе надо только http-заголовки получить?
Насколько я помню, там есть что-то вроде "Last-Changed:".
По заголовкам нормально не проверить . Тут по контенту надо сравнивать.......... А заголовки - это вещь такая - не очень обязательная.......

Ivan8209

wget --help в помощь
wget -S --spider URL
---
...Всё в наших RU.KAX...

Ivan8209

sed -n "/^Last-Modified:/p"
---
...Всё в наших RU.KAX...

Dasar

Internet Explorer очень тяжеловесная и очень не удобная в использовании (из кода) штука.

Ivan8209

wget -s
grep /^Last-Modified:/
md5sum
---
...Всё в наших RU.KAX...

rfgbnfy

Ты уверен что этот заголовок везде выставляется ? Когда сайт генерится динамически - этот заголовок на совести программера. Куда надёжней да и не шибко сложней по контенту проверять........

JERRY

А фигли там использовать то? Закачать документ и получить его текст. Не так уж и много действий.

Ivan8209

Я знаю, что он выставляется не всегда.
Но лучше --- сначала проверить по заголовку, а потом, если такового не окажется, выкачивать содержимое.
---
...Я работаю...

rfgbnfy

он выставляется всегда - но пе умолчанию (и это редко меняют) если страници генерятся динамически - в нём текущее время........ А на статистических сайтах как правило полезной информации нет ............. Так что лучше сразу с заголовками не возиться - а по контенту проверять.

Dasar

И зачем для этого IE?
если достаточно написать что-то такое:
[c]
WebRequest request = WebRequest.Create("");
using (StreamReader reader = new StreamReader(
request.GetResponse.GetResponseStream
Encoding.GetEncoding(1251
{
return reader.ReadToEnd;
}
[/c]

Ivan8209

wget -S --spider http://www.forth.org.ru/
Опровержение.
---
...Я работаю антинаучным аферистом...

Ivan8209

Но если документ окажется большим...
А их ещё и целая куча таких...
---
...Я работаю антинаучным аферистом...

rfgbnfy

[devel alex]$ HEAD www.forth.org.ru
302 Moved
Connection: close
Location: http://www.eserv.ru/robots/lwp.html
Content-Type: text/html
Client-Date: Wed, 23 Jul 2003 16:56:11 GMT
Client-Peer: 209.15.179.216:80
Client-Warning: Redirect loop detected
Это по поводу наличия заголовка Last-Modified В частности - об надёжности определения по нему обновления сайта......

Ivan8209

Значит, wget не прокатит.
Надо как-то пересылки отслеживать.

Ivan8209

Просто если есть такой заголовок, то это сильно уменьшает нагрузку на сеть и упрощает задачу.

rfgbnfy

Если есть такой заголовок - надо ещё как то определить на сколько он соответствует действительности .... Если там текущее время - то всё понятно . А если этот заголовок например программеры по началу выставляли в ручную , а потом забили на это (девочка-секретарша которая контент обновляет не умеет это например делать) .........

Ivan8209

А не сервер ли должен этим заниматься?
Обновлением заголовка.

JERRY

Ну это уже .NET. Речь шла о простом VB (не 7) и COM компонентах, которые придется писать на С++. А вообще, конечно, лучше нарыть код на С или С++, где закачивается страница и адаптировать его под свои нужды. Тогда быстрота и разработки и кода будет максимальной.

rfgbnfy

Если сайт динамический - то сервер ставит или текущее время , или без этого заголовка. Этот заголовок - чтоб был адекватный при динамических сайтах - надо выставлять или вручную (изменил что нибудь в коде - полез ручками заголовок поменял) , или если изменение например через администраторский интерфейс - встраивать автоматическое изменение этого заголовка при изменении сайта через админ интерфейс . Но это геммор , и обычно с этим никто не связывается .........

Ivan8209

Видимо, и с сетевыми стандартами как в России: "Хотели, как лучше..."

1234554321

>и с сетевыми стандартами
разве не с любыми стандартами так?

rfgbnfy

а вообще такую прогу набросать (проверка обновлений) - дело на 10 минут .......... Мы тут на дискусию раз в .... больше потратили

Ivan8209

Не с любыми.
С жизненно важными --- не так.
EtherNet-ов существенно меньше, чем RS-232 и подобных.

rfgbnfy

нет - просто в любом стандарте есть обязательные части , а есть "рекомендованные" .А Last-Modified: не строго обязательное поле.

Ivan8209

Ну...
Мы тут обсудили, на каком языке писать...
Как проверять...
Сразу же нашли грабли...
И всё --- не отходя от кассы!
То есть, ни строки кода.

Ivan8209

Мне лень сейчас лезть в RFC.
Это с 1.0 (RFC 1945) идёт и с 1.1?

rfgbnfy

14.29 Last-Modified
The Last-Modified entity-header field indicates the date and time at
which the origin server believes the variant was last modified.
Last-Modified = "Last-Modified" ":" HTTP-date
An example of its use is
Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
The exact meaning of this header field depends on the implementation
of the origin server and the nature of the original resource. For
files, it may be just the file system last-modified time. For
entities with dynamically included parts, it may be the most recent
of the set of last-modify times for its component parts. For database
gateways, it may be the last-update time stamp of the record. For
virtual objects, it may be the last time the internal state changed
это из
Hypertext Transfer Protocol -- HTTP/1.1

freezer

Короче, можно писать на Си++, в либе MFC есть классы для формирования http-запросов, анализа ответов (см. CHttpConnection можно писать на языках семейства .NET, в .NET Framework есть классы для того же самого: System.Web.*, в джаве тоже небось это есть (не знаком я с ней можно и на VB или JScript прогать, тогда надо юзать стандартный мелкомягкий XML-парсер, он тоже умеет HTTP-запросы слать. Можно на перле, можно... Короче, вариантов масса.

Ivan8209

По этому поводу был бы уместен не заданный мною вопрос: "А на чём ты можешь или хочешь писать?"
Зря не задал.
---
...Я работаю...

Ivan8209

Да-а. Если он "depends on the implementation of the origin server", то время, действительно, может стоять совсем любое.
Пусть даже "Mon, 13 Jan 666 13:13:13 GMT +0000 (HELL)".

TYU_2008

zond:~> apt-cache show libwww-dev
Package: libwww-dev
Priority: optional
Section: devel
Installed-Size: 4536
Maintainer: Richard Atterer <debian.org>
Architecture: i386
Source: w3c-libwww
Version: 5.3.2-9
Depends: libwww0 (=5.3.2-9 zlib1g-dev
Suggests: libexpat0-dev | libexpat1-dev, expat
Filename: pool/main/w/w3c-libwww/libwww-dev_5.3.2-9_i386.deb
Size: 1048402
MD5sum: 5a0d334f3229e8b2a53020c9571d2e57
Description: The W3C WWW library - development files
libwww is a highly modular, general-purpose client side Web API
written in C for Unix and Windows (Win32). It's well suited for
both small and large applications, like browser/editors, robots,
batch tools, etc. Pluggable modules provided with libwww include
complete HTTP/1.1 (with caching, pipelining, PUT, POST, Digest
Authentication, deflate, etc MySQL logging, FTP, HTML/4,
XML (expat RDF (SiRPAC and much more.
.
Unlike other libraries for web access, libwww can use a single
select loop to wait for multiple simultaneous connections. With
glibwww, the libwww event loop can be integrated into the glib event
loop, making it very easy to develop GTK+ web applications.
.
It is quite difficult to write programs that use libwww, due to its
complexity. If you do not need its advanced features, have a look at
libcurl.

navi002

я бы на РНР написал.
Оставить комментарий
Имя или ник:
Комментарий: