Погода в терминале: ну совсем не нужное, но иногда хочется чего-то этакого...

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

для podarok66:

Не понял как можно подставить в строку fetch не название местности, а её координаты ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4359
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

http://wttr.in/:help Так вот же man. Что не получается?


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Спасибо, разобрался. А скобки для координат в fetch http://wttr.in/[25.88984877637389,23.87025117874146] надо экранировать слешами ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4359
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Вот честно, не пробовал... В bash разок запустил, а вот в ROS не стал...


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Спасибо, все работает. Квадратные скобки при указании координат через запятую вообще не нужны.
Всё оказывается есть в http://wttr.in/:help


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

С этого ресурса погоду также можно получать в формате json.

Пробовал - работает. В переменную попадает огромный массив вложенных данных. Тип переменной именно array, проверял.

Код: Выделить всё

:do {
:global weatherj1 [tool fetch url=("http://wttr.in/"."26.88984877637389,38.87025117874146"."\?format=j1") as-value output=user];
       :delay 5s;
        } on-error={
          :global weatherj1 "<- The weather is smiling at us ->"
      }
:global weatherj1;

:log info $weatherj1;
Получаем вот такой массив данных:

Код: Выделить всё

data={
    "current_condition": [
        {
            "FeelsLikeC": "16",
            "FeelsLikeF": "60",
            "cloudcover": "0",
            "humidity": "100",
            "localObsDateTime": "2020-06-19 12:18 AM",
            "observation_time": "09:18 PM",
            "precipMM": "0.0",
            "pressure": "1019",
            "temp_C": "15",
            "temp_F": "59",
            "uvIndex": 1,
            "visibility": "10",
            "weatherCode": "113",
            "weatherDesc": [
                {
                    "value": "Clear"
                }
            ],
            "weatherIconUrl": [
                {
                    "value": ""
                }
            ],

.... и еще кучищу элементов массива ...

;downloaded=44;status=finished
Наверное это многомерный ключевой массив ... Как извлечь из этой громадины требуемые данные ? Например, давление текущее хочу получить ... Пробовал так - не работает. Где не прав в ключе ?

:log info [:typeof $weatherj1]
:log info ((($weatherj1->"data")->"current_condition")->"pressure")


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Начну и закончу с замечаний
1- твой код не копируемый, так как он не отображается в обёртке code через кнопку </>
то есть без потерь в адресе его на прямую не извлечь
Если вы его заворачивали в code то такие движки форума как этот требуют трёх пустых строк после [/code]
2- по самой ссылке идёт много барахла. Надо смотреть синтаксис запросов - 99% движок wttr даст запросить более конкретизируемые данные - вплоть до одного значения.
3- json это не массив :)
По правильному нужен целый скрипт, который будет парсить json в массив.
По плохому - сверху идёт первый элемент массива "data" который содержит строку, можно поискать нужное значение через :find

Код: Выделить всё

:log info [:len ($weatherj1->"data")]
:log info [:typeof ($weatherj1->"data")]


pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

Вот запрос того чего просишь:

Код: Выделить всё

:do {
:global weatherj1 [tool fetch url=("http://wttr.in/moscow?format=\"%p\"") as-value output=user];
:delay 5s;
} on-error={
:global weatherj1 "<- The weather is smiling at us ->"
}
:global weatherj1;
:set $weatherj1 ($weatherj1->"data")
:log info $weatherj1;


Опция format задаёт написание любой последовательности на стороне сервера, вам лишь остаётся принять её :)

сам синтаксис хорошо описан здесь


Sertik
Сообщения: 1601
Зарегистрирован: 15 сен 2017, 09:03

Начну и закончу с замечаний
1- твой код не копируемый, так как он не отображается в обёртке code через кнопку </>
то есть без потерь в адресе его на прямую не извлечь
Если вы его заворачивали в code то такие движки форума как этот требуют трёх пустых строк после [/code]
2- по самой ссылке идёт много барахла. Надо смотреть синтаксис запросов - 99% движок wttr даст запросить более конкретизируемые данные - вплоть до одного значения.
3- json это не массив :)
По правильному нужен целый скрипт, который будет парсить json в массив.
По плохому - сверху идёт первый элемент массива "data" который содержит строку, можно поискать нужное значение через :find
1. Товарищ, вы как будто из другого мира, нельзя понять как правило ничего из того что Вы пишите. И давно ли мы перешли с Вами на ты ?
2. Это был никакой не код для копирования, а просто я так выделил данные для чтения на форуме.
3. Мне нужно получить именно данные в переменную в виде полного набора данных json, так как их отдает ресурс, что это такое я знаю, товарищ ! не нужно приводить ссылки где и что можно найти по этому ресурсу, вы перечитайте этот пост там всё уже расписано было, зачем Вы всё повторяете ? Мы же уже все прочитали сами, раз к Вам за помощью обращаемся ...
4. Я попросил Вас помочь, выудить из того что я дал определенные данные. То, что можно сузить запрос это понятно, но мне это не нужно. Мне нужно один раз обратиться к серверу с помощью фетч, всё считать в виде json и из него взять. json - это не массив, согласен, но он получен был в переменную whether не мной, заметьте, а инструментом fetch и имеет тип :array - значит это массив, и из него данные надо извлекать по ключам.
Не надо тут никого критиковать, Вас просили помочь - можете, помогите, не можете - не надо.
5. Видимо Вы действительно настоящий программист, потому, что голова у Вас завернута совсем в другую сторону, Вы мыслите какими-то другими категориями, чем обычные люди. Больше обращаться за помощью не буду, так как физики должны общаться с физиками, а лирики с лириками. Обидеть не хотел, но Вы абсолютно с другой планеты, чем я

По делу - попробую использовать скрипт Чупакабры https://habr.com/ru/post/337978/
Думаю, он как раз то что надо в моем случае


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
pepelxl
Сообщения: 161
Зарегистрирован: 23 июл 2013, 18:47

1. Товарищ, вы как будто из другого мира, нельзя понять как правило ничего из того что Вы пишите. И давно ли мы перешли с Вами на ты ?
Уж извините если чем то обидел.
Я попросил Вас помочь, выудить из того что я дал определенные данные.
5. Видимо Вы действительно настоящий программист, потому, что голова у Вас завернута совсем в другую сторону, Вы мыслите какими-то другими категориями, чем обычные люди.
Не совсем - точнее совсем - я не программист, я автоэлектрик, просто современные автомобили стали настолько сложны, что без знания программирования, уже не возможно в них сунутся. Для подключения к авто приходится разбираться в IP, масках, маршрутах, и т.д. так как бортовая электроника стала сидеть на чистом TCP/IP. А в виде диагностических приборов в чистую можно использовать любой роутер.
По делу - попробую использовать скрипт Чупакабры
это правильное решение, я об этом вам намекнул. Именно намекнул, потому-что в моей профессии существует правило- "дать начисто списать, значит навредить". И 20 лет в профессии дают о себе знать, очень сложно себя перестроить. А вот занимаясь программированием принято давать готовые решения, но давать их надо в правильном написании, а я это не готов, т.к. ваш код мне не нравится семантикой, вижу что его можно сделать более наглядно. И замечание я вам сделал не просто так. По тому что в среде программистов существуют свои правила к созданию вопросов. и мои вопросы много раз оставались без ответов, пока я правильно не научился создавать форматированный текст на том же stackoverflow.
А теперь по факту:
но он получен был в переменную whether не мной, заметьте, а инструментом fetch и имеет тип :array - значит это массив, и из него данные надо извлекать по ключам.
У тебя ("у вас" если вам так более удобно) есть не до понимание. Массив образуется не после запроса fetch, а после аргумента as-value, который возвращает результат работы fetch как массив. В ключе data содержится результат возврата с сервера в виде str. Это и есть то что надо обрабатывать. Значение data вам надо отправить на скрипт парсера, который превратит строку в массив (структуру) и потом уже можно будет обращаться с аргументам по ключам.
Я так понимаю, что вы не преследуете конкретной цели, а берёте данный пример в качестве самообразования. И тут возникает недопонимание, т.к. автор ресурса wttr всё уже сделал за вас, и парсить ответ сервера не требуется, по этому я и не понял что вам нужно.


Ответить