adsl club

Справочник

Форум

Программы

Фильмы

Ресурсы

Файлообмен

Хостинг

Ростелеком
XML и RSS скрипты - так сложно?
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ
Автор Сообщение
ATX555
Гуру
СообщениеДобавлено: Вт 17-04-12 : 14-56    Заголовок сообщения: XML и RSS скрипты - так сложно? Ответить с цитатой

Задал вопрос на НГС-е - толку "0", как будто что-то сложное.

Попытаюсь тут повторить (сам я совсем не программер):
появилась нужда упростить скрипт (т.к. работает на железяке под Линуксом и тормозит вывод).

Инет-сервис отдаёт дату по запросу
Код:
cityDate = getXMLText("adc_database", "forecast", "day", "obsdate");
в формате mm/dd/yyyy

Затем её в виде текста прописывают в файл
Код:
writeStringToFile("/tmp/cityDate.tmp", cityDate);

и запускают скрипт преобразования
Код:
dlok=getURL("http://127.0.0.1/cgi-bin/date.cgi");

Сам скрипт
Код:
tmp_date=`cat /tmp/cityDate.tmp`
m=$(echo $tmp_date | awk -F/ '{print($1)}')
d=$(echo $tmp_date | awk -F/ '{print($2)}')
y=$(echo $tmp_date | awk -F/ '{print($3)}')
echo $d/$m/$y > /tmp/corr_cityDate.tmp

переписывает дату в правильном формате дд/мм/гггг в другой файл,
откуда по мере необходимости её и считывают
Код:
date=readStringFromFile("/tmp/corr_cityDate.tmp");


Как-то можно упростить процесс перекладывания дня и месяца без промежуточной записи в файл?
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Richard Ferlow
Гуру
Предупреждений : 2
СообщениеДобавлено: Вт 17-04-12 : 15-38    Заголовок сообщения: Ответить с цитатой

А язык какой ? на php похоже

На php можно

$tmp = explode("/", "mm/dd/yyyy");
Получаем массив из трех элементов $tmp[0], $tmp[1], $tmp[2]

$date_converted = $tmp[1].'/'.$tmp[0].'/'.$tmp[2];

И с ним уже делаем что нужно.

С записью в текстовые файлы не приходилось работать, lдальше не скажу.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
ATX555
Гуру
СообщениеДобавлено: Вт 17-04-12 : 21-16    Заголовок сообщения: Ответить с цитатой

Richard Ferlow писал(а):
А язык какой ? на php похоже
Я языки по внешнему виду текста не разбираю, так правлю, по аналогии.
Скрипт с расширением cgi , на чём писан - фиг знает,
файл с расширением rss, в заголовке
<?xml version="1.0"?>
<rss version="2.0">
думаю, что XML и есть типа язык, соответственно всё, что в файлах написано, разбирает специальная прога девайса, ядро которого на Линуксе.
Вот ещё кусок другого скрипта:
Код:
#!/bin/sh
echo "Content-type: text/html"
echo
ST1=`echo $QUERY_STRING | cut '-d&' -f1`
ST2=`echo $QUERY_STRING | cut '-d&' -f2`
N1=`echo $ST1 | cut -d= -f2`
N2=`echo $ST2 | cut -d= -f2`
echo "<html><head><title>Shell Example #2</title></head>"
echo "<body>"
echo The sum of the two numbers is `expr $N1 + $N2`
echo "</body></html>"
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
firezavr
Форумчанин
СообщениеДобавлено: Вт 17-04-12 : 21-45    Заголовок сообщения: Ответить с цитатой

Если пишут в файл, значит, преобразование даты со временем какое-то отложенное (зачем - не знаю), а не сразу по прибытии данных с сервиса. Иначе почему бы не сделать преобразование сразу в ОЗУ вашей железки? Может, ваша железка сначала накапливает данные от сервиса, а потом скопом их все преобразует?
ATX555 писал(а):
Как-то можно упростить процесс перекладывания дня и месяца без промежуточной записи в файл?

Конечно, если есть возможность вмешаться в программу вашей зелезки и сделать все преобразования до записи в файл. Или написать самому прожку, подключиться к сервису, и забирать, и преобразовывать, и записывать в файл данные самому. [url=http://ru.wikipedia.org/wiki/WS-адресация]Адрес конечной точки сервиса[/url] известен, сервис открытый, без шифрования и прочего - вперёд, что у вас там под Линуксом может работать и на чём писать можно.


Вобщем, если у этой "специальной проги девайса" нет каких-нибудь дружественных пользователю настроек, то только писать программу для этого девайса самому. Или, если девайс весь такой из себя закрытый, а Интернет-сервис открытый, написать для обычного ПК (на любом подходящем языке, для любой ОС) программку самому и забирать данные с этого сервиса.

Вообще, побольше конкретики: что за девайс, что за прога, что с файлом данных делается и когда.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
firezavr
Форумчанин
СообщениеДобавлено: Вт 17-04-12 : 21-51    Заголовок сообщения: Ответить с цитатой

ATX555 писал(а):
Я языки по внешнему виду текста не разбираю

Это скорее язык для интерпретатора командной строки:
http://ru.wikipedia.org/wiki/Echo

Там внизу и остальные команды приводятся, и в статье ссылка на документацию по Линксу http://linux.die.net/

В частности, вот ваша команда -cut
http://linux.die.net/man/1/cut
Последний раз редактировалось: firezavr (Вт 17-04-12 : 21-59), всего редактировалось 1 раз
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Richard Ferlow
Гуру
Предупреждений : 2
СообщениеДобавлено: Вт 17-04-12 : 21-57    Заголовок сообщения: Ответить с цитатой

Это perl
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
ATX555
Гуру
СообщениеДобавлено: Вт 17-04-12 : 22-50    Заголовок сообщения: Ответить с цитатой

firezavr писал(а):
Вообще, побольше конкретики: что за девайс, что за прога, что с файлом данных делается и когда.
Да почти всё есть в первом посте, кроме конкретики, что девайс - медиаплеер.
RSS файл в нём можно менять на своё усмотрение, получая погоду и время на экране телевизора. Но с текущим скриптом и записью в файлы данные отображаются с неприятной задержкой.
Требуется упростить участок с записью первого файла, возможно даже обойтись без внешнего cgi-скрипта, преобразуя сразу в нужный формат внутри rss и записав результат в конечный файл.
Какие-либо конструкции и синтаксис на любых языках мне не известны - могу лишь косметичеки подправить уже готовый код Smile
Поэтому мне что Перл, что С++ или С#
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
ATX555
Гуру
СообщениеДобавлено: Вт 17-04-12 : 23-05    Заголовок сообщения: Ответить с цитатой

Richard Ferlow писал(а):
Это perl
Искал по написанному в скрипте - нашёл страничку про awk
Так чего там можно сократить или упростить?
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
firezavr
Форумчанин
СообщениеДобавлено: Вт 17-04-12 : 23-56    Заголовок сообщения: Ответить с цитатой

По идее, надо не писать в файл, а сразу писать
Код:
tmp_date=getXMLText("adc_database", "forecast", "day", "obsdate");

Ну а дальше логика вашего скрипта.

Вот только что-то подсказывает, что скрипт у вас на одном языке (этот ваш AWK), а тот код, что пишет и читает из файла - на другом (причём, судя по синтаксису, Си-образный). Узнайте, что это за язык и можно ли этот же скрипт реализовать на этом языке и в этой же железке.

Ещё есть догадка, что этот встроенный язык пользователю не доступен, а доступны только вот такие пользовательские скрипты на AWK. Т. е. пользователь может написать свой код только для данных, которые внутренняя программа сначала записала в виде текстового файла на диск. Тогда минуть запись на диск невозможно. Т. е. вам дают возможность "попрограммировать" ваш плеер только вот такими скриптами и только над теми данными, которые он вам выведет в текстовый файл.

Вообще, не проще ли найти обсуждение своего устройства где-нибудь в Инете и там поспрашивать энтузиастов? Причём лучше на английском искать - вероятность найти на порядки больше.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
ATX555
Гуру
СообщениеДобавлено: Ср 18-04-12 : 12-34    Заголовок сообщения: Ответить с цитатой

firezavr писал(а):
Вот только что-то подсказывает, что скрипт у вас на одном языке (этот ваш AWK), а тот код, что пишет и читает из файла - на другом (причём, судя по синтаксису, Си-образный). Узнайте, что это за язык и можно ли этот же скрипт реализовать на этом языке и в этой же железке.
Это я по невнимательности сразу не нашёл, что это за скрипт. Оказалось, что:
#!/bin/sh - Bourne shell присутствует во всех Unix системах, соответственно скрипты, написанные на этом языке, будут работать на любой Unix-машине.
Осталось понять, как этим воспользоваться и каким боком к нему awk Smile
Хотя уже понятно, что три строки в скрипте можно как-то записать одной, типа
Код:
echo $tmp_date | awk -F/ '{print($2/$1/$3)}') > /tmp/corr_cityDate.tmp
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
firezavr
Форумчанин
СообщениеДобавлено: Ср 18-04-12 : 20-33    Заголовок сообщения: Ответить с цитатой

Код, который пишет и читает из файла, явно не для командной строки. И то, что он пишет в файл только для того, чтобы скрипт переставил числа в дате, тоже какое-то расточительство.

От того, что вы не в три, а в одну строку скрипт напишете, думаю, не сильно производительность возрастёт.

Думаю, надо писать код на том языке, что принимает данные от службы непосредственно, и так, как я сказал серху - т. е. без записи в файл. Это моё мнение. Хотя данных вы дали всё равно мало.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
ATX555
Гуру
СообщениеДобавлено: Ср 18-04-12 : 22-35    Заголовок сообщения: Ответить с цитатой

firezavr писал(а):
Код, который пишет и читает из файла, явно не для командной строки. И то, что он пишет в файл только для того, чтобы скрипт переставил числа в дате, тоже какое-то расточительство.
Полагаю, что изначально он просто писал в файл и оттуда их считывали в том формате, в каком есть (в извратном), поэтому не требовался скрипт и запись в другой файл.
А вот чтоб отобразить в правильном формате уже дописали примочку со скриптом и вторым файлом.

firezavr писал(а):
От того, что вы не в три, а в одну строку скрипт напишете, думаю, не сильно производительность возрастёт.
Возможно, но хотелось бы это проверить, а для этого должна быть рабочая кнструкция в целом.

firezavr писал(а):
Думаю, надо писать код на том языке, что принимает данные от службы непосредственно, и так, как я сказал серху - т. е. без записи в файл.
Я предположил, что это Bourne shell, но как на нём это проделать - непонятно, в сети пишут, что это "так просто" Smile

firezavr писал(а):
Хотя данных вы дали всё равно мало.
А что за данные-то нужны?
Могу вон RSS целиком дать, но остальное там никоим боком.



Menu.txt
 Описание:  
Скачать
 Имя файла:  Menu.txt
 Размер файла:  38.8 KB
 Скачано:  260 раз(а)
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
firezavr
Форумчанин
СообщениеДобавлено: Ср 18-04-12 : 22-56    Заголовок сообщения: Ответить с цитатой

ATX555 писал(а):
А что за данные-то нужны?

Как я понял, проблема в
ATX555 писал(а):
RSS файл в нём можно менять на своё усмотрение, получая погоду и время на экране телевизора. Но с текущим скриптом и записью в файлы данные отображаются с неприятной задержкой.

Где и в каком месте проявляется задержка? Вы нажали кнопку, а погода на телевизоре не сразу, не спустя секунду, а спустя, скажем, десять секунд появилась? Вы уверены, что это задержка из-за скрипта? Скрипт по сути ничего не делает - операции чтения и записи в файл, а также простая перестановка чисел в строке почти не занимают времени, если, конечно, у вас не конктроллер семидесятых годов. Надо вести что-то вроде логов, где после каждой подозрительной на ресурсозатратность операции выводится временнАя метка в лог - тогда видно будет, где слабое звено.

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

Ещё возможно, что сервис кеширует данные вашего запроса, а вы жмёте кнопку "обновить" по три раза в секунду. А он вам обновляет информацию на экране только раз в минуту, например.

И насчёт скрипта и преобразования даты. Порочен сам метод, как это делается. Я не знаю, зачем они это сделали - чтобы закрыть доступ пользователю к программированию железа непосредственно и системных функциям, предоставив только простой интерпретатор командной строки. Или это такая "защита от дурака". Но очевидно, что всякие промежуточные записи в файл для всего лишь перестановки чисел совершенно излишни.
ATX555 писал(а):
Я предположил, что это Bourne shell, но как на нём это проделать - непонятно, в сети пишут, что это "так просто"

Вы лучше на профильном форуме и продолжайте добивайться ответа. Там люди лучше знают, что это за железка и как с ней работать. А тут мы в кофейной гуще барахтаемся.
ATX555 писал(а):
Задал вопрос на НГС-е - толку "0", как будто что-то сложное.

Сложность в том, что нету конкретики. Правильно сформулировать задачу - наполовину её решить.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
ATX555
Гуру
СообщениеДобавлено: Ср 18-04-12 : 23-35    Заголовок сообщения: Ответить с цитатой

firezavr писал(а):
Где и в каком месте проявляется задержка? Вы нажали кнопку, а погода на телевизоре не сразу, не спустя секунду, а спустя, скажем, десять секунд появилась? Вы уверены, что это задержка из-за скрипта? Скрипт по сути ничего не делает - операции чтения и записи в файл, а также простая перестановка чисел в строке почти не занимают времени
В скрипте идёт принудительное обновление раз в минуту (оно не заметно, т.к. выглядит, как простая смена минут) и обновление при выходе в "главное меню" - вот там и задержка с отображением (запрос к серверу, парсинг данных, запись данных, конвертация данных). Парсинг лишних я частично убрал (там был очень универсальный скрипт "про запас") - показалось, что стало чуть быстрее (т.е. вместо чуть болше пары секунд стало чуть меньше пары секунд Smile ).
Вот и решил ещё ускорить этот процесс, т.к. пока погода и часы не отрисуются плеер на кнопки не реагирует, поэтому в большинстве аналогичных моделей нет вывода на экран времени и даты.

firezavr писал(а):
Вы же в браузере на компьютере тоже не сразу страницу полностью загруженной получаете.
Выше есть ссылка на то, что получает плеер. У меня на компе отрисовывает меньше секунды (1с с запасом).

firezavr писал(а):
Сложность в том, что нету конкретики. Правильно сформулировать задачу - наполовину её решить.
Так а чего конкретнее? Shocked
Весь алгоритм с текстами выложен.
От А до В надо укоротить путь (ускорить).

Для примера: устройство, аналогичного назначения, как на приложенной картинке я делал на паре деталей, а увидев её долго удивлялся полёту мысли. При этом моё было отключаемым и имело побочный эффект бесплатности межгорода для вызывающей стороны (за счёт характеристик вызывного сигнала моей отсталой АТС, которая ловила отбой, но не успевала отключать линию).



US-01.jpg
 Описание:  
 Размер файла:  110.76 KB
 Просмотрено:  285 раз(а)

US-01.jpg

 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
Показать сообщения:   
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ Часовой пояс: GMT + 7
Страница 1 из 1

 

 
Аватары: Вкл|Выкл   ЮзерИнфо: Вкл|Выкл   Подписи: Вкл|Выкл
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы