Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Автоматизация запросов по HTML протоколу

Сообщения:  [1-10]   [11-19] 

 
 автор: sim5   (27.07.2009 в 17:25)   письмо автору
 
   для: VladimirL   (27.07.2009 в 17:18)
 

Ну почему громоздко? Если вам все надо в одном файле строками, то пишите, почему это не правильно? Делайте так как удобно вам будет для работы с этим файлом.
В СНМ файлах есть описание метода записи строк и чтения строк из файла, и коли вам нужно работать именно со строками, то все вполне оправдано.

Письмо о чем? :)

  Ответить  
 
 автор: VladimirL   (27.07.2009 в 17:18)   письмо автору
 
   для: sim5   (22.07.2009 в 12:27)
 

Уважаемый sim5

Сердечная благодарность за Вашу помощь! (правильнее сказать за Ваш программный код!)
Все СУПЕР.

Ответ сервера (а он приходит только на один заказ) я пишу во временный файл. Потом, построчно ищу что-то знакомое с помощь if (stroka.substring(0, ххх)=’hhhhhhhhhhhh’) – типа Left(ххх) и .substring(ххх,0)-типа Right(xxx). Если нашел – получаю данные и дописываю их в txt-файл. Затем следующий запрос к серверу. В итоге – один файл, в котором, каждая строка- информация об одном заказе. Это, может и не правильно, с точки зрения программирования и громоздко, но Работает.

Теперь начал изучать SQL-запросы, что-бы внести эту информацию в существующие таблицы в определенные поля, заменив при этом устаревшую информацию.

Еще раз огромное Спасибо,

С уважением,
Владимир

P.S. Жду Ваше письмо!

  Ответить  
 
 автор: sim5   (22.07.2009 в 12:27)   письмо автору
 
   для: VladimirL   (22.07.2009 в 11:39)
 

1. Ноль ставить смысла нет, так как за такое время сделать запрос на сервер и получить ответ от него, вы не сможете. Да и за 5 сек, указаных в таймере, вы его не получите. Таймер просто постоянно проверяет флаг, а он устанавливается в true (разрешение очередного запроса) после приема документа с сервера. Грубо говоря, вы будете делать запросы на сервер с той переиодичностью, с которой он вам отвечает. Если это нормально, пусть так и останется. А ведь сервер может и задержать ответ, и преждевременно делать очередной запрос, значит не получить предыдущий документ.

2. Сперва нужно получить документ, а потом уже обрабатывать. Нет проблемы добавить обработку полученного документа, распарсить его как требуется, даже вставить в окно и пред. просмотр его, и записать готовый формат, если это Access .dbf, то проблем не будет. Но заниматься этим должны уже другие функции, не относящиеся к получению и записи страницы, а чтобы это сделать, нужно видеть исходник полученной страницы, знать, что из нее забирать и в какой формат записывать. То есть увидеть два документа - полученную страницу, и то, что из нее получается в Access.

3. Что значит соответствие строковых функций? Как это понимать?

Notepad++ - бесплатный расширенный Блокнот с подсветкой ситаксиса многих языков программирования.

  Ответить  
 
 автор: VladimirL   (22.07.2009 в 11:39)   письмо автору
 
   для: sim5   (21.07.2009 в 09:46)
 

Уважаемый sim5

Благодарю Вас за сотрудничество!

Я Восхищен Вашим программным кодом! Я так не напишу никогда… Практически все понятно.
Если Вы можете уделить мне еще некоторое время, то я хотел-бы задать еще 3 вопроса.

1. Если я общаюсь с сайтом Поставщика по Договору (он меня не должен забанить за частые запросы) можно-ли установить tm = setInterval("getOrders()",5000); //опрос состояния запроса
не 5000, а 0.

2. Можно ли, особо не усложняя алгоритм, перенести t (function saveHTML(t)) в одномерный массив строковых значений, где в каждом элементе будет соответствующая текстовая строка кода ответного HTML. Сейчас я, используя Вашу программу записываю этот код во временный файл, тут-же его открываю для чтения в построчном режиме, строки обрабатываю, и стираю, а полученную информацию добавляю в конечный файл. Эту обработку я планирую вставить перед строкой n++; в function getOrders(), т.е. Пока грузится новый запрос обрабатывается предыдущий временный файл.

3. Я понимаю, что вопрос не корректный, но не могли-бы Вы подсказать мне правильное соответствие строковых функций: Длина (Len()), Право(Right()), Середина (substr(,)) и т.д.

Благодарю Вас за сотрудничество,
С уважением,
Владимир

PS. Подскажите пожалуйста, недорогой простой редактор для HTML кода, а то в Блокноте писать и искать свои ошибки трудновато.

  Ответить  
 
 автор: sim5   (21.07.2009 в 09:46)   письмо автору
 
   для: VladimirL   (21.07.2009 в 08:43)
 

<html>
<head>
<script>
var fso = new ActiveXObject("Scripting.FileSystemObject"); //файловый объект
//папка для хранения, где User пользователь
var folder = "C:\\Documents and Settings\\User\\Мои документы\\Orders\\";
var ext = ".txt"; //расширение файлов
var orders = new Array(); //массив заказов
var n = 0; //счетчик 
var flag = false; //флаг запроса

//создание папки, если не создана
if (!fso.FolderExists(folder)) fso.CreateFolder(folder);

function runSave() {
  //получение массива заказов из строки
  //формат записи NNNN,NNNN-NNNN,NNNN,NNNN,....NNNN  
  var ord = document.getElementById("order").value;
  ord = ord.split(",");
  for(i=0; i<ord.length; i++) {
    if(ord[i].indexOf("-") != -1) {
      var len = ord[i].split("-");
      for(k=len[0]; k<=len[1]; k++) orders[orders.length] = k;
    } else orders[orders.length] = ord[i];
  }
  flag = true; //разрешаем запрос
  tm = setInterval("getOrders()",5000); //опрос состояния запроса
  getOrders();
}

function getOrders() {
  if (flag) {
    if (n < orders.length) {
      flag = false; //запрещаем запрос
      //указываем номер заказа 
      document.getElementById("code").value = orders[n];
      //отправляем форму
      document.getElementById("frm").submit();
      n++;
    } else {
      clearInterval(tm);
      n = 0; flag = false; //запрещаем запрос
      document.getElementById("info").innerHTML = "Запись заказов окончена!"; 
    }   
  }
}

function saveHTML(t) { 
  if(t) {
    var name = orders[n-1]+ext;
    var f1;
    f1 = fso.CreateTextFile(folder+name, true);  
    f1.Write(t);  
    f1.Close();
    flag = true; //разрешаем очередной запрос 
    document.getElementById("info").innerHTML = "Заказ №"+orders[n-1]+" успешно сохранен!";
  }     
}
</script>
</head>

<body>
<form action="URL" target="frame" method="post" name="frm" id="frm" style="display: none;"> 
<INPUT type="hidden" value="search" name="action">  
<INPUT type="hidden" id="code" name="searchType">  
<INPUT type="hidden" value="yes" name="show_form"> 
</form> 
<iframe onload="saveHTML(frame.document.body.innerHTML)" name="frame" width="0" height="0"></iframe>
Номера заказов: <input type="text" id="order"> <input type="button" value="Запись" onclick="runSave()">
<div id="info"></div>
</body>
</html>

Не надо никакой SUBMIT, в примере она была для проверки. Вот здесь, форма будет отправляться скриптом, через функцию. Я не знаю вашего сценария, которым вы хотите запускать все. Здесь, для примера, запуск происходит кнопкой "Запись", которая обращается к функции runSave(). В ней формируется массив номеров заказов и происходит запуск процесса.
В поле заказов номера вводятся через запятую (в конце последнего номера в строке, запятую не прописывать), можно и диапазон, если они упорядоченные, то есть, например, 11111-18006,18009,18015-18025 и т.д.. Далее запускается таймер проверяющий флаг запроса к серверу, и, если он установлен, то происходит запрос и запись ответа в файл.
Вся эта кухня работает типа Ajax, вы отправляете форму, и указывате куда поместить ответ сервера, в IFARME, он в свою очередь, после загрузки документа, отдает содержимое его на запись. Другими словами, хотя в HTA содержимое, это html-страница, ее остальные элементы не будет перезагружаться, так что можно выводить на экран и другую сопутствующую информацию.

PS. Вот только время повторения запросов к серверу нужно будет подобрать, чтобы вас не забанили за частые запросы.

  Ответить  
 
 автор: VladimirL   (21.07.2009 в 08:43)   письмо автору
 
   для: PAT   (15.07.2009 в 15:30)
 

Уважаемые Господа!

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

Пытаюсь реализовать алгоритм, описанный г-ном PAT, т.е есть файл zakaz.txt, пишу файл HTA, где прописан URL хочу файл CNT.TXT.

Но вот засада!

Для того, что-бы получить в iframe копию сайта поставщика с информацией о конкретном заказе я должен выполнить HTML код, описанный выше г-ном sim5:

<form action="ваш url" … </form>

Но как организовать цикл, который менял-бы в этом <form> код конкретного заказа

<INPUT type='hidden' value='1111111111' name='searchType'>

из файла zakaz.txt (прочитать построчно файл zakaz.txt с этими номерами у меня получилось благодаря справочников г-на sim5)

2. Как избавиться от ручного нажатия кнопки <input type="submit" value="Send"> и автоматически отправить этот <form> в Internet.

Т.е. не получается по алгоритму PAT:
document.all._ifr.src = document.all._url.value;
В iframe я пытаюсь получить не просто _url а ответ на целы тег <form>, да еще с конкретным значением номера заказа.

Я предполагаю, что этот <form> надо автоматически собирать в другом месте и как-то хитро засылать в Internet.

Уважаемый PAT!
Если Вас не затруднит, подскажите пожалуйста, а почему нет этой строки

onload = function () {document.all._ifr.attachEvent ('onload', f2)}

в нижнем примере?

Благодарю Вас за сотрудничество.

P.S. Буду очень признателен за подсказку: каким оператором построчно читать содержимое HTML файла в iframe в символьную переменную в <script>.

  Ответить  
 
 автор: sim5   (16.07.2009 в 16:21)   письмо автору
598.3 Кб
 
   для: VladimirL   (16.07.2009 в 10:40)
 

Я получил письмо. Если бутылка, которую вы хотите отправить, в дюймах соответствует диаметру вашего ТФ-кабеля, можете ее переслать почтой на мой электронный адрес. :)
Конечно, кнопка SUBMIT в форме не обязательна, все можно сделать иначе, полная форма была приведена для проверки.
Чтобы знать как все можно устроить, это JavaScript, JScript, WSH. В приложении CHM файл описывающий все это, на русском, но примеры все на VB, JScript 5 с примерами на JScript (тот же JavaScript в основе), но описание английское.

  Ответить  
 
 автор: VladimirL   (16.07.2009 в 10:55)   письмо автору
 
   для: PAT   (15.07.2009 в 15:30)
 

Уважаемый PAT !

Благодарю за сотрудничество!

Собственно этого и очень хочется!

В выходные обязательно посмотрю Ваш код.

Радует, что в НТА файле можно как-то обрабатывать текст принятого сайта (файла) и формировать сводный чистый TXT (CSV). Но сколько и каких языков Internet программирования для этого нужно выучить?

  Ответить  
 
 автор: VladimirL   (16.07.2009 в 10:40)   письмо автору
 
   для: sim5   (15.07.2009 в 15:24)
 

Уважаемый sim5 !

Благодарю за оказанное содействие!

Ваш код РАБОТАЕТ! (отправил благодарственное письмо)

Меня немного высадил (всего на 5 асов) Kaspersky Internet Security 7.0 с файлом mshta.exe (Как выяснилось: HTA файл – это пакет команд и операторов для приложения mshta.exe).

К сожалению, мне пока не удалось избавиться от нажатия кнопки Send. Предполагаю, что в дальнейшем, при внесения обработки принятого сайта и формировании чистого информационного текстового файла CSV в модуле НТА (алгоритм PAT он же CNT) этот вопрос снимется.

Если Вас не затруднит, прошу Вас рекомендовать тонкий справочник (список команд, краткое описание, короткие примеры) и способ его приобретения для реализации моих задач (интуитивно править чужие коды тяжело)

  Ответить  
 
 автор: PAT   (16.07.2009 в 00:42)   письмо автору
 
   для: Trianon   (15.07.2009 в 23:50)
 

Пароль забыл, вот и пришлось сменить :-)

  Ответить  

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования