LINUX.ORG.RU

скрипт, который ищет в JSON-файле по ссылке строки

bash


ты выбрал не тот инструмент

<?php
if (json_decode(file_get_contents('http://URL'), true)['players']['now'] > 10) {
    `COMMAND`;
}

Ford_Focus ★★★★★
()

Bash

Не знаю, в каком из слов ты сделал ошибку, но тут должны быть либо PHP, либо Python, либо Ruby.

WereFox ★☆
()
Ответ на: комментарий от Ford_Focus

Спасибо! К сожалению мой кругозор в этой области невелик. В screen запущен процесс, как в него передать команду я знаю. Сервак на Линуксе, подумал что логично будет использовать Баш. С php плохо знаком, даже не знал что его можно кроме web использовать - для таких целей. 1) Значит, я создаю php-файл с таким кодом, делаю его запускаемым?

2) COMMAND - просто консольная команда? Типа, скажем 'screen -x ABC'

konvkosmose
() автор топика
Ответ на: комментарий от Ford_Focus
<?php
if (json_decode(file_get_contents('https://mcapi.us/server/query?ip=play.bbyaworld.com'), true)['players']['now'] > 2) {
    `echo ABC`;
}

Срабатывает, но не пишет ничего.

konvkosmose
() автор топика
Ответ на: комментарий от konvkosmose

Логично, ибо `` выполняет команду, но выхлоп команды не выводит. если нужно видеть выхлоп, то тут уже сказали про system(). Есть еще passthru() - выполнение с передачей управления. А можно просто сделать echo `COMMAND`

Ford_Focus ★★★★★
()
Ответ на: комментарий от WereFox

Обоснуй. Ты что, предлагаешь скриптики на похапэ сохранять-запускать-сохранять-запускать-сох..., когда есть CLI? И я уж молчу про отсталость похапэ для обработки данных. У jq довольно вкусный синтаксис на пайпах, до жыэсного Lodash лишь немного не дотягивает.

bodqhrohro_promo
()
json='{"players" : { "max" : "50", "now" : "9" }}'
echo $json | jq '.players.now'
crutch_master ★★★★★
()
Ответ на: комментарий от bodqhrohro_promo

Я предлагаю не страдать фигнёй. Пых прекрасно работает с json, использовать при этом bash, как прослойку... Походит на наркоманию.

WereFox ★☆
()
Ответ на: комментарий от WereFox

У пыха есть один недостаток:

[ec2-user@ip-172-30-136-142 ~]$ php -a
-bash: php: command not found

Однако, этого недостатка лишен, например, питон:

[ec2-user@ip-172-30-136-142 ~]$ python
Python 2.7.12 (default, Nov  2 2017, 19:20:38) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> a = json.loads('{"field0": "value0"}')
>>> a
{u'field0': u'value0'}
alex_the_v ★★★
()
Ответ на: комментарий от alex_the_v

Вообще-то ты ответил на переписку с ним, если ты вдруг не заметил ;)

WereFox ★☆
()
Ответ на: комментарий от bodqhrohro_promo

Да хоть отдельную ОС. Брать два инструмента для решения одной задачи, при том, что проще решить одним из них - на мой взгляд, дичь. Решить задачу ТОЛЬКО пыхом, питоном, да хоть крестами, будет всё же проще, чем городить огород с забором из велосипедов.

WereFox ★☆
()
Последнее исправление: WereFox (всего исправлений: 1)

На сях можно по-быстрому накатать обработчик и спокойно пользоваться. А пыхпыхеры пусть идут в анус. Вместе с пхытонистами.

anonymous
()
Ответ на: комментарий от anonymous

Только если есть свободное время. Однострочники на perl и ruby для решения поставленной задачи пишутся меньше чем за минуту.

Leupold_cat ★★★★★
()
Ответ на: комментарий от menangen

Сишка проще чего угодно. Проще сишки только ассемблер, но там писанины дофига. Но, учитывая то, что gcc нынче очень здорово оптимизирует, на ассемблере практически уже ничего писать не нужно.

anonymous
()
Ответ на: комментарий от WereFox

решения одной задачи

Задачи разные. Когда достаточно статики (пофильтровать что-то из входного или выходного JSON) — юзаю jq. Когда надо внутреннее состояние продебажить (динамика) — пихаю условное логирование уже непосредственно в похапэ, зачастую по точным данным, выковырянным тем же jq: к примеру, я знаю пару атрибутов, но не знаю точного id нужного объекта — нужно пофильтровать сначала по этому свойству и по другим свойствам окончательно вычленить нужный объект. Плюс для частых шаблонных задач у меня таки отдельные скриптики на похапэ, jq не очень подходит для проставления зависимостей между отделёнными по иерархии узлами.

ТОЛЬКО пыхом

В пыхе отвратительная функцианальщина, ты серьёзно? Он под потоковую обработку данных не заточен вообще. Сравни

jq '.obj1|map(select(.prop2=="WereFox"))'
и
foreach ($root['obj1'] as $v) {
  if ($v['prop2'] == "WereFox") {
    print_r($v);
  }
}
или
print_r(array_map(function($v) { return $v['prop2'] == "WereFox"; }, $root['obj1']));
И это простой пример, в запущенных случаях простынность похапэ ещё более печальна.

будет всё же проще

Для программистов на %languagename%. Я в первую очередь просто программист и подбираю инструментарий под задачу. Причём для основного модуля язык выбирал не я, оно уже такое было. И я откровенно считаю эту попытку использовать похапэ для числодробилок маразмом, хотя бы из соображений производительности.

забором из велосипедов

Если велосипеды старые, ржавые и никому не нужные — почему бы не построить из них забор? Прутьев на рамы наварить — и норм будет, красиво и оригинально. Обществу потребления лишь бы избавиться, а куда оно девается — никого не колышет, пока куча мусора возле города солнце перекрывать не начнёт.

bodqhrohro_promo
()
Ответ на: комментарий от anonymous

там писанины дофига

В сишечке тоже. По сравнению с ассемблером это, конечно, верх компактности...

bodqhrohro_promo
()
Ответ на: комментарий от alex_the_v

У пыха есть один недостаток:

я бы согласился, что это недостаток, если бы у тебя была source-based система типа «протухшая фряха на портах», но как это может быть недостатком на RHEL?

Ford_Focus ★★★★★
()
Ответ на: комментарий от Ford_Focus

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

Во-первых, это - телодвижение, которое надо не просто сделать, а задокументировать, занести в какие-нибудь ансиблы/паппеты и еще куда-нибудь. Потом, пых - это некий новый софт в системе, который надо поддерживать, обновлять и иже с ним.

Я уж не говорю про то, что в Демьяне, например, у пыха не так давно json-парсер отломали: вот, там какой-то одаренный чел в лицензии написал 'The Software shall be used for Good, not Evil.' Потом починили, конечно, но осадочек остался, ибо в пыхе такими коровьими лепешками все углы усеяны.

С пыхом все сложно, короче. Лучше на пистоне зафигачить, имхо.

alex_the_v ★★★
()
Ответ на: комментарий от alex_the_v

тащить интерпретатор пыха с пристанями и кораблями, которого в системе нет

адепт экономии 10 мегабайт в системе? не, друже, нам не по пути.

остальные «аргументы» тоже настолько надуманные, что мне жалко на них время, лучше котиков полистаю

Ford_Focus ★★★★★
()
$ cat file.json 
{"players":{"max":"50","now":"11"}}
$ if [ $(python -mjson.tool file.json | grep "now" | grep -oE '[0-9]*') -gt 10 ]; then echo "do something"; fi
do something
nerve ★★
()
Ответ на: комментарий от anonymous

В любом случае, себе я сделал простой JSON-парсер, нужно было в CGI данные от клиента обрабатывать.

Какой-то слишком простой у тебя парсер, на JSON вида

{
"lol": "kek}"
}
json_tokener_parse возвращает NULL

userd
()
Ответ на: комментарий от Ford_Focus

С того, что ты принёс какую-то фигню? А при чём тут она? Я WereFox отвечал, бомбящему с принесённых сюда штук, позволяющих юзать для задачи баш вместо любимых им языков. То, что он ответил только на твоё сообщение и на ЛОРе нельзя отвечать на несколько сообщений сразу — не моя проблема.

bodqhrohro_promo
()
Ответ на: комментарий от userd

Дык, мне не нужно было таких извращений. Если понадобится — добавлю более строгий токенизатор.

anonymous
()
Ответ на: комментарий от bodqhrohro_promo

Давай не будем о вантузятниках! Здесь, все-таки, форум линуксоидов. Если у человека стоит systemd и нет gcc, то это явный признак вантузятника, который просто одно говно (вантуз) сменил на абсолютно такое же анально огороженное проприетарное говно (бубунта).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.