Я хотел бы получить расписание от своего веб-сайта школ и использовать его в сценарии для установки автоматических предупреждений, но я не знаю как.
Таким образом, кажется, что моя школа использует FullCalendar для установки расписания, таким образом, времена не являются HTML-тэгами в .html файле.
Поскольку у нас нет реального веб-сайта, из которого Вы хотите очистить данные, и очистка веб-сайта всегда отличается, если Вы не имеете, некоторые стандартизировали API, не возможно дать 100% рабочее решение. Но я попытаюсь объяснить способ добраться до Вашей информации.
fullcalender.io
базирующийся JavaScript, события настраиваются как объект JavaScript или могут быть импортированы из json
формат. Если последний имеет место, можно легко просто загрузить готовое json
файл, который упомянут где-нибудь в исходном коде JavaScript. Относительно парсинга json
, существует много Вопросов и Ответов здесь.
Если это настраивается как Объект JavaScript, можно просто проанализировать .js
файл или если это включено в HTML <script>
тег, проанализируйте HTML для $('#calendar').fullCalendar(
объект.
Мы можем использовать curl
для получения веб-сайта затем извлеките информационное использование, например. awk
.
Я сделал маленький сценарий для получения объекта для fullcalender.io
Основная демонстрация Представления. Ваш сценарий может выглядеть подобным.
curl -s https://fullcalendar.io/releases/fullcalendar/3.9.0/demos/basic-views.html \
| awk '/\.fullCalendar\(\{/{s=1; print "{"; next;};
/\}\)\;/{s=0};
s{print};
END{print "}";}'
Объяснение:
/\.fullCalendar\(\{/{s=1; print "{"; next;};
Поиски .fullCalender({
и если найденный переменной наборов s=1
и печать {
/\}\)\;/{s=0};
Поиски )};
и переменная наборов s=0
s{print};
печатает строку если s
установлен а не 0.END{print "}";}'
печать }
в конце.Вывод:
{
header: {
left: 'prev,next today',
center: 'title',
right: 'month,basicWeek,basicDay'
},
defaultDate: '2018-03-12',
navLinks: true, // can click day/week names to navigate views
editable: true,
eventLimit: true, // allow "more" link when too many events
events: [
{
title: 'All Day Event',
start: '2018-03-01'
},
{
title: 'Long Event',
start: '2018-03-07',
end: '2018-03-10'
},
{
id: 999,
title: 'Repeating Event',
start: '2018-03-09T16:00:00'
},
{
id: 999,
title: 'Repeating Event',
start: '2018-03-16T16:00:00'
},
{
title: 'Conference',
start: '2018-03-11',
end: '2018-03-13'
},
{
title: 'Meeting',
start: '2018-03-12T10:30:00',
end: '2018-03-12T12:30:00'
},
{
title: 'Lunch',
start: '2018-03-12T12:00:00'
},
{
title: 'Meeting',
start: '2018-03-12T14:30:00'
},
{
title: 'Happy Hour',
start: '2018-03-12T17:30:00'
},
{
title: 'Dinner',
start: '2018-03-12T20:00:00'
},
{
title: 'Birthday Party',
start: '2018-03-13T07:00:00'
},
{
title: 'Click for Google',
url: 'http://google.com/',
start: '2018-03-28'
}
]
}
Можно затем проанализировать объект JS к объекту JSON использование Python и demjson
:
Установка demjson
:
pip3 install demjson
и затем выполненный это:
curl -s https://fullcalendar.io/releases/fullcalendar/3.9.0/demos/basic-views.html \
| awk '/\.fullCalendar\(\{/{s=1; print "{"; next;};
/\}\)\;/{s=0};
s{print};
END{print "}";}' \
| python3 -c "import demjson, sys, json; print(json.dumps(demjson.decode('\n'.join(sys.stdin.readlines()))));" \
| jq ".events"
Отсюда должно быть довольно легко переместиться в использование jq
. Конечно, вместо bash
и jq
можно выполнить во всем этом Python
.
websync колотят использование сценария wget
для получения ответов здесь в Спрашивают Ubuntu. Это ищет HTML-тэги для нахождения Вопроса Upvotes и Ответом Upvotes. Это преобразовывает специальные символы HTML такой как &
кому: &
и <
кому: <
, и т.д.
Вот несколько отрывков из кода, который можно найти полезным:
LineOut=""
HTMLtoText () {
LineOut=$1 # Parm 1= Input line
LineOut="${LineOut//&/&}"
LineOut="${LineOut//</<}"
LineOut="${LineOut//>/>}"
LineOut="${LineOut//"/'"'}"
LineOut="${LineOut//'/"'"}"
LineOut="${LineOut//“/'"'}"
LineOut="${LineOut//”/'"'}"
} # HTMLtoText ()
Ampersand=$'\046'
(... SNIP LINES ...)
while IFS= read -r Line; do
(... SNIP LINES ...)
# Convert HTML codes to normal characters
HTMLtoText $Line
Line="$LineOut"
(... SNIP LINES ...)
done < "/tmp/$AnswerID"
(... SNIP LINES ...)
wget -O- "${RecArr[$ColWebAddr]}" > "/tmp/$AnswerID"
if [[ "$?" -ne 0 ]] # check return code for errors
then
# Sometimes a second attempt is required. Not sure why.
wget -O- "${RecArr[$ColWebAddr]}" > "/tmp/$AnswerID"
fi
if [[ "$?" == 0 ]] # check return code for errors
then
echo "$BarNo:100" > "$PercentFile"
echo "$BarNo:#Download completed." > "$PercentFile"
else
echo "$BarNo:100" > "$PercentFile"
echo "$BarNo:#Download error." > "$PercentFile"
echo "ERROR: $AnswerID" >> ~/websync.log
return 1
fi