Динамические HTTP ссылки-запросы & nnCron

Обсуждение программ nnCron и nnCron LITE

Динамические HTTP ссылки-запросы & nnCron

Postby AleXH » Thu, 15 Jan 2015, 19:32

Для получения файла Сервер генерит динамический запрос вида: http://текст1...число_двойной_точности...текст2/ Т.е. имени файла в ссылке нет, а есть лишь передаваемые параметры - число 2-ой точности, которое получает приращение каждый час и ещё пару статических. Сервер на правильный запрос возвращает файл с хидером (получен с помощью curl):
Spoiler: show
Code: Select all
HTTP/1.1 200 OK
Date: дата-время поступления запроса (т.е. бесполезна)
...
Content-Length: ddddddddd
Content-Disposition: attachment; filename=xxxxx
Из полезной инфы только размер файла и его имя, содержащее день генерации файла.
Задача - раз в сутки проверять обновление файла, скачивать при обновлении и выводить запрос на его открытие.

На текущий момент выкрутился так
Spoiler: show
Code: Select all
#( X_Price
SingleInstance
NoLog
AsLoggedUser
LoadProfile
Time: 25 9 * * * *
: MyUrl1 S" http://текст1=8" ;
: MyUrl2 S" текст2" ;
: MyFile S" C:\Temp\fileddddd.zip" ;
CREATE MyUrl 256 ALLOT
Action:
  MyUrl1 MyUrl PLACE CUR-DATE 2015 1 1 YMD>DATE DATE- 24 * Hour@ + 3-значное_число * 9-значное_число + N>S MyUrl +PLACE MyUrl2 MyUrl +PLACE
  MyUrl COUNT S>ZALLOC ASCIIZ> HTTP-CHANGED
  0<>
  IF
    HTTP-RESULT 200 <>
    IF
      TMSG: "Server response: %HTTP-RESULT%" 10
    ELSE
      MyUrl COUNT S>ZALLOC ASCIIZ> HTTP-GET
      0=
      IF
        MyFile FWRITE
        TQUERY: "Open new file?" 10 No
        0<> IF MyFile START-APP THEN
      THEN
    THEN
  THEN
)#

Непонятки:
1. не разобрался, как правильно в данном случае вклеить 10-и значное число двойной точности в середину URL (FAQ на тему читал), поэтому вклеиваю 9-и значное, 10-й старший разряд периодически переношу в конец текстовой строки1 вручную, правя текст задачи. Сложность вызвало непонимание, как организовать конвертацию числа 2-й точности в строку. Может вообще не нужно связываться с склеиванием строки в буфере, а реализовать это как-то иначе, но как?
2. непонятно как средствами nnCron получить хидер страницы, выдернуть оттуда размер файла, который затем можно было бы сравнить с размером предыдущего файла, уже имеющегося. Тут, конечно, существует вероятность, что содержимое может измениться, а размер остаться прежним, но этот момент можно было бы отследить по новому имени, если бы имелась возможность парсить хидер страницы.

UP. для большей ясности внёс поясняющие детали.
Last edited by AleXH on Fri, 16 Jan 2015, 11:13, edited 1 time in total.
AleXH
 
Posts: 44
Joined: Sun, 31 Mar 2013, 10:23

Re: Динамические HTTP ссылки & nnCron

Postby ANR Daemon » Thu, 15 Jan 2015, 20:17

AleXH wrote:2. непонятно как средствами nnCron получить хидер страницы, выдернуть оттуда размер файла, который затем можно было бы сравнить с размером предыдущего файла, уже имеющегося. Тут, конечно, существует вероятность, что содержимое может измениться, а размер остаться прежним, но этот момент можно было бы отследить по новому имени, если бы имелась возможность парсить хидер страницы.

Зачем сравнивать размеры? Сравнивайте Last-Modified.
А вообще сама задача убого поставлена. Должен быть один постоянный адрес ресурса, а не меняющийся как попало.
ANR Daemon
 
Posts: 234
Joined: Mon, 26 Feb 2007, 22:59

Re: Динамические HTTP ссылки & nnCron

Postby AleXH » Thu, 15 Jan 2015, 22:10

ANR Daemon wrote:Зачем сравнивать размеры? Сравнивайте Last-Modified.
А вообще сама задача убого поставлена. Должен быть один постоянный адрес ресурса, а не меняющийся как попало.

Задача не убого поставлена, а убого понята. Если бы вы прочитали внимательно, то поняли бы то, о чём написано. В ответе сервера нет LM поля, есть лишь то, что я написал.
AleXH
 
Posts: 44
Joined: Sun, 31 Mar 2013, 10:23

Re: Динамические HTTP ссылки & nnCron

Postby AlikasS » Fri, 16 Jan 2015, 03:16

можно покопаться в исходниках , возможно там все есть
или написать что-то типа
Code: Select all
: DD>S <# #S #> ; \ число двойной длины в строку


и проверить в консоли
Code: Select all
50000. DD>S TYPE
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Динамические HTTP ссылки-запросы & nnCron

Postby AleXH » Sat, 17 Jan 2015, 13:47

В моём случае URL HTTP-LM DROP 2DUP TYPE возвращает размер удалённого файла в виде строки - как понять, нужно ли его конвертировать в число 2-й точности, а если нужно, то как это сделать (для последующего сравнения с размером локального файла)? В хелпе описана команда сравнения 2-х чисел 2-ой точности D=, а существует ли D<>?
AleXH
 
Posts: 44
Joined: Sun, 31 Mar 2013, 10:23

Re: Динамические HTTP ссылки-запросы & nnCron

Postby VoidVolker » Sat, 17 Jan 2015, 23:12

Code: Select all
: N>S  S>D DOUBLE>S ;

S>D - конвертация числа в число двойной длины.
DOUBLE>S - конвертация числа двойной длины в строку.
AleXH wrote:В хелпе описана команда сравнения 2-х чисел 2-ой точности D=, а существует ли D<>?

Да.
Для работы с http проще всего использовать wget/wput/curl. При желании с http можно работать и в ннкроне - либо изучив в исходниках работу слова HTTP-GET либо реализовав необходимый функционал через сокеты.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Динамические HTTP ссылки & nnCron

Postby ANR Daemon » Wed, 21 Jan 2015, 19:46

AleXH wrote:
ANR Daemon wrote:Зачем сравнивать размеры? Сравнивайте Last-Modified.
А вообще сама задача убого поставлена. Должен быть один постоянный адрес ресурса, а не меняющийся как попало.

Задача не убого поставлена, а убого понята. Если бы вы прочитали внимательно, то поняли бы то, о чём написано. В ответе сервера нет LM поля, есть лишь то, что я написал.

Вы вообще ответ сервера не показали. Только какие-то куски, которые посчитали нужными.
Я три раза перечитал ваш пост, но так и не понял, зачем было извращаться.
Если это какой-то удалённый сервис, обратитесь к его автору и попросите нормальное API, а не чёрти что.
Если же вы просто у кого-то воруете контент, ну что я могу сказать… ССЗБ.
ANR Daemon
 
Posts: 234
Joined: Mon, 26 Feb 2007, 22:59

Re: Динамические HTTP ссылки-запросы & nnCron

Postby AleXH » Thu, 22 Jan 2015, 12:37

Я три раза перечитал ваш пост, но так и не понял, зачем было извращаться.
Если это какой-то удалённый сервис, обратитесь к его автору и попросите нормальное API, а не чёрти что.
Если же вы просто у кого-то воруете контент, ну что я могу сказать… ССЗБ.

Дело в другом, там никому твои хотелки не интересны, пользуйся как есть - через клики в браузере, либо не пользуйся вообще.
AleXH
 
Posts: 44
Joined: Sun, 31 Mar 2013, 10:23

Re: Динамические HTTP ссылки-запросы & nnCron

Postby elos » Thu, 22 Jan 2015, 17:32

Задача - раз в сутки проверять обновление файла, скачивать при обновлении и выводить запрос на его открытие.
Это единственное понятное и внятное место в постановке задачи с моей точки зрения.

Предлагаю срабатывание таймера, запоминание времени файла и запрос на открытие делать кроном. А скачивать файл с помощью cURL, как и предлагал VoidVolker. Сам им не пользуюсь, но почитал - ключ -z, он же --time-cond позволяет скачать что-то после или до указанной даты (ключи на скачку не забыть добавить только). Хотя задающий вопрос и так должен был про это подумать, благо сам же и использует cURL для получения хидера.
Размер скрипта не обязательно будет маленьким, но алгоритм прозрачнее.

Не я первый с этим вопросом... Это специфика задачи - проверять не время файла, а его размер?
Удовлетворите любопытство - где это надо иметь меняющееся имя сервера и как его узнать в конкретный момент времени?
Число двойной точности в текстовой строке - это как? А то тянет пофилософствовать...

И просьба к задающему вопрос -"нежнее" к людям, что ли...

P.S. А если файл достаточно маленький (по названию задачи - прайс) - просто тупо загружать его не заморачиваясь и использовать при необходимости...
elos
 
Posts: 667
Joined: Tue, 25 Apr 2006, 11:15

Re: Динамические HTTP ссылки-запросы & nnCron

Postby ANR Daemon » Fri, 06 Feb 2015, 06:34

AleXH wrote:
Я три раза перечитал ваш пост, но так и не понял, зачем было извращаться.
Если это какой-то удалённый сервис, обратитесь к его автору и попросите нормальное API, а не чёрти что.
Если же вы просто у кого-то воруете контент, ну что я могу сказать… ССЗБ.

Дело в другом, там никому твои хотелки не интересны, пользуйся как есть - через клики в браузере, либо не пользуйся вообще.

Действительно, дело в том, что вы цитируете только удобные вам куски. Что из постов на форуме, что из заголовков сервера.
ANR Daemon
 
Posts: 234
Joined: Mon, 26 Feb 2007, 22:59

Re: Динамические HTTP ссылки-запросы & nnCron

Postby AleXH » Sat, 07 Feb 2015, 12:30

ANR Daemon, elos за участие спасибо, но исходить нужно из приведённых данных, а не фантазировать. Отдельное спасибо VoidVolker, который сразу дал конкретный совет по существу.
AleXH
 
Posts: 44
Joined: Sun, 31 Mar 2013, 10:23


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests