С помощью API можно отправлять как одиночные СМС-сообщения, так и осуществлять СМС-рассылку из PHP-скриптов со своих сайтов или CRM-систем.
Используя СМС-шлюз больше нет необходимости утверждать, согласовывать или предварительно создавать в личном кабинете имя отправителя при каждой новой рассылке. Данную функцию удобно использовать в проектах, в которых требуется динамическая смена имени отправителя.
Шаг 1- Регистрация на СМС сервисе
После регистрации в нашем личном кабинете на Вашу электронную почту будет направлен пароль, который необходимо будет использовать в API или создайте себе API KEY в личном кабинете («Настройки» -> «API и Интеграция»), чтобы не передавать логин и пароль в открытом виде.
Шаг 2 — Скачать библиотеку отправки СМС (PHP-скрипт) и файл примера отправки СМС на PHP
Отправка СМС на PHP осуществляется с помощью нашей библиотеки sms-prosto.ru (смс php), которую Вы можете скачать на нашем сайте, разархивировать архив и сохранить в той же директории, что и сам скрипт.
Шаг 3 — Создать PHP-скрипт отправки СМС на своем сайте
Создайте свой PHP-скрипт отправки СМС-сообщений (пример ниже). Созданный скрипт должен располагаться в одной директории с нашей библиотекой.
Пример отправки SMS PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
|
Получение статусов ранее отправленных SMS на PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
Cкачать готовый PHP скрипт
@Bandicoot
Вась-программист
Бывает такое: на страницу проекта навешана куча скриптов. Мне нужно для какого-либо определенного html-тега отследить его обработчик, какой именно скрипт с ним работает. Как это можно быстро сделать, например, в WebStrom’e или в Sublime?
-
Вопрос заданболее трёх лет назад
-
6977 просмотров
в хроме, в дебаг панели вы можете: посмотреть все обработчики событий на элементе (не очень помогает при использовании jQuery), или же поставить бряку на изменение dom элемента, и таким образом находить код, который собственно этот элемент и меняет.
А так как способов навесить события, не прописывая теги масса, или масса вариантов записи селектора, то просто поиском по коду разве что что-то простое можно найти.
Пригласить эксперта
Если я правильно понял вопрос, букмарклет Visual Event вам поможет.
Неверно задан вопрос, IDE работают с исходными текстами, а не с тегами. Отследить изменение можно в браузере через «консоли разработки», для firefox я использую firebug, у браузеров с движком webkit своя неплохая. Вызывается консоль по F12. Потом делаете «инспектировать элемент» при помощи правой кнопки на нужном элементе на сайте. И в панели c DOM деревом кликаете правой кнопкой на выбранный элемент и там есть что-то наподобие «останавливать при добавлении/удалении потомка», ну и вообще попробуйте какие варианты есть.
-
Показать ещё
Загружается…
27 мая 2023, в 12:07
1500 руб./за проект
27 мая 2023, в 11:47
30000 руб./за проект
27 мая 2023, в 11:46
500 руб./за проект
Минуточку внимания
Bash-скрипты: начало
Bash-скрипты, часть 2: циклы
Bash-скрипты, часть 3: параметры и ключи командной строки
Bash-скрипты, часть 4: ввод и вывод
Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
Bash-скрипты, часть 6: функции и разработка библиотек
Bash-скрипты, часть 7: sed и обработка текстов
Bash-скрипты, часть 8: язык обработки данных awk
Bash-скрипты, часть 9: регулярные выражения
Bash-скрипты, часть 10: практические примеры
Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит
В предыдущих материалах мы обсуждали различные аспекты разработки bash-скриптов, говорили о полезных инструментах, но до сих пор рассматривали лишь небольшие фрагменты кода. Пришло время более масштабных проектов. А именно, здесь вы найдёте два примера. Первый — скрипт для отправки сообщений, второй пример — скрипт, выводящий сведения об использовании дискового пространства.
Главная ценность этих примеров для тех, кто изучает bash, заключается в методике разработки. Когда перед программистом встаёт задача по автоматизации чего бы то ни было, его путь редко бывает прямым и быстрым. Задачу надо разбить на части, найти средства решения каждой из подзадач, а потом собрать из частей готовое решение.
Отправка сообщений в терминал пользователя
В наши дни редко кто прибегает к одной из возможностей Linux, которая позволяет общаться, отправляя сообщения в терминалы пользователей, вошедших в систему. Сама по себе команда отправки сообщений, write
, довольно проста. Для того, чтобы ей воспользоваться, достаточно знать имя пользователя и имя его терминала. Однако, для успешной отправки сообщения, помимо актуальных данных о пользователе и терминале, надо знать, вошёл ли пользователь в систему, не запретил ли он запись в свой терминал. В результате, перед отправкой сообщения нужно выполнить несколько проверок.
Как видите, задача: «отправить сообщение», при ближайшем рассмотрении, оказалась задачей: «проверить возможность отправки сообщения, и, если нет препятствий, отправить его». Займёмся решением задачи, то есть — разработкой bash-скрипта.
▍Команды who и mesg
Ядром скрипта являются несколько команд, которые мы ещё не обсуждали. Всё остальное должно быть вам знакомо по предыдущим материалам.
Первое, что нам тут понадобится — команда who
. Она позволяет узнать сведения о пользователях, работающих в системе. В простейшем виде её вызов выглядит так:
$ who
Результаты вызова команды who
В каждой строчке, которую выводит команда who
, нас интересуют первых два показателя — имя пользователя и сведения о его терминале.
По умолчанию запись в терминал разрешена, но пользователь может, с помощью команды mesg
, запретить отправку ему сообщений. Таким образом, прежде чем пытаться что-то кому-то отправить, неплохо будет проверить, разрешена ли отправка сообщений. Если нужно узнать собственный статус, достаточно ввести команду mesg
без параметров:
$ mesg
Команда mesg
В данном случае команда вывела «is y», это значит, что пользователь, под которым мы работаем в системе, может принимать сообщения, отправленные в его терминал. В противном случае mesg
выведет «is n».
Для проверки того, разрешена ли отправка сообщений какому-то другому пользователю, можно использовать уже знакомую вам команду who
с ключом -T
:
$ who -T
При этом проверка возможна только для пользователей, которые вошли в систему. Если такая команда, после имени пользователя, выведет чёрточку (-), это означает, что пользователь запретил запись в свой терминал, то есть, сообщения ему отправлять нельзя. О том, что пользователю можно отправлять сообщения, говорит знак «плюс» (+).
Если у вас приём сообщений отключён, а вы хотите позволить другим пользователям отправлять вам сообщения, можно воспользоваться такой командой:
$ mesg y
Включение приёма сообщений от других пользователей
После включения приёма сообщений mesg
возвращает «is y».
Конечно, для обмена сообщениями нужны два пользователя, поэтому мы, после обычного входа в систему, подключились к компьютеру по ssh. Теперь можно поэкспериментировать.
▍Команда write
Основной инструмент для обмена сообщениями между пользователями, вошедшими в систему — команда write
. Если приём сообщений у пользователя разрешён, с помощью этой команды ему можно отправлять сообщения, используя его имя и сведения о терминале.
Обратите внимание на то, что с помощью write
можно отправлять сообщения пользователям, вошедшим в виртуальную консоль. Пользователи, которые работают в графическом окружении (KDE, Gnome, Cinnamon, и так далее), не могут получать подобные сообщения.
Итак, мы, работая под пользователем likegeeks
, инициируем сеанс связи с пользователем testuser
, который работает в терминале pts/1
, следующим образом:
$ write testuser pts/1
Проверка возможности отправки сообщений и отправка сообщения
После выполнения вышеуказанной команды перед нами окажется пустая строка, в которую нужно ввести первую строку сообщения. Нажав клавишу ENTER
, мы можем ввести следующую строку сообщения. После того, как ввод текста завершён, окончить сеанс связи можно, воспользовавшись комбинацией клавиш CTRL + D
, которая позволяет ввести символ конца файла.
Вот что увидит в своём терминале пользователь, которому мы отправили сообщение.
Новое сообщение, пришедшее в терминал
Получатель может понять от кого пришло сообщение, увидеть время, когда оно было отправлено. Обратите внимание на признак конца файла, EOF
, расположенный в нижней части окна терминала. Он указывает на окончание текста сообщения.
Полагаем, теперь у нас есть всё необходимое для того, чтобы автоматизировать отправку сообщений с помощью сценария командной строки.
▍Создание скрипта для отправки сообщений
Прежде чем заниматься отправкой сообщений, нужно определить, вошёл ли интересующий нас пользователь в систему. Сделать это можно с помощью такой команды:
logged_on=$(who | grep -i -m 1 $1 | awk '{print $1}')
Здесь результаты работы команды who
передаются команде grep
. Ключ -i
этой команды позволяет игнорировать регистр символов. Ключ -m 1
включён в вызов команды на тот случай, если пользователь вошёл в систему несколько раз. Эта команда либо не выведет ничего, либо выведет имя пользователя (его мы укажем при вызове скрипта, оно попадёт в позиционную переменную $1
), соответствующее первому найденному сеансу. Вывод grep
мы передаём awk
. Эта команда, опять же, либо не выведет ничего, либо выведет элемент, записанный в собственную переменную $1
, то есть — имя пользователя. В итоге то, что получилось, попадает в переменную logged_on
.
Теперь надо проверить переменную logged_on
, посмотреть, есть ли в ней что-нибудь:
if [ -z $logged_on ]
then
echo "$1 is not logged on."
echo "Exit"
exit
fi
Если вы не вполне уверенно чувствуете себя, работая с конструкцией if
, взгляните на этот материал.
Скрипт, содержащий вышеописанный код, сохраним в файле senderscript
и вызовем, передав ему, в качестве параметра командной строки, имя пользователя testuser
.
Проверка статуса пользователя
Тут мы проверяем, является ли logged_on
переменной с нулевой длиной. Если это так, нам сообщат о том, что в данный момент пользователь в систему не вошёл и скрипт завершит работу с помощью команды exit
. В противном случае выполнение скрипта продолжится.
▍Проверка возможности записи в терминал пользователя
Теперь надо проверить, принимает ли пользователь сообщения. Для этого понадобится такая конструкция, похожая на ту, которую мы использовали выше:
allowed=$(who -T | grep -i -m 1 $1 | awk '{print $2}')
if [ $allowed != "+" ]
then
echo "$1 does not allowing messaging."
echo "Exit"
exit
fi
Проверка возможности отправки сообщений пользователю
Сначала мы вызываем команду who
с ключом -T
. В строке сведений о пользователе, который может принимать сообщения, окажется знак «плюс» (+), если же пользователь принимать сообщения не может — там будет чёрточка (-). То, что получилось после вызова who
, передаётся grep
, а потом — awk
, формируя переменную allowed
.
Далее, используя условный оператор, мы проверяем то, что оказалось в переменной allowed
. Если знака «плюс» в ней нет, сообщим о том, что отправка сообщений пользователю запрещена и завершим работу. В противном случае выполнение сценария продолжится.
▍Проверка правильности вызова скрипта
Первым параметром скрипта является имя пользователя, которому мы хотим отправить сообщение. Вторым — текст сообщения, в данном случае — состоящий из одного слова. Для того, чтобы проверить, передано ли скрипту сообщение для отправки, воспользуемся таким кодом:
if [ -z $2 ]
then
echo "No message parameter included."
echo "Exit"
exit
fi
Проверка параметров командной строки, указанных при вызове скрипта
Тут, если при вызове скрипта ему не было передано сообщение для отправки, мы сообщаем об этом и завершаем работу. В противном случае — идём дальше.
▍Получение сведений о терминале пользователя
Прежде чем отправить пользователю сообщение, нужно получить сведения о терминале, в котором он работает и сохранить имя терминала в переменной. Делается это так:
terminal=$(who | grep -i -m 1 $1 | awk '{print $2}')
Теперь, после того, как все необходимые данные собраны, осталось лишь отправить сообщение:
echo $2 | write $logged_on $terminal
Вызов готового скрипта выглядит так:
$ ./senderscript testuser welcome
Успешная отправка сообщения с помощью bash-скрипта
Как видно, всё работает как надо. Однако, с помощью такого сценария можно отправлять лишь сообщения, состоящие из одного слова. Хорошо бы получить возможность отправлять более длинные сообщения.
▍Отправка длинных сообщений
Попробуем вызвать сценарий senderscript
, передав ему сообщение, состоящее из нескольких слов:
$ ./senderscript likegeeks welcome to shell scripting
Попытка отправки длинного сообщения
Как видно, отправлено было лишь первое слово. Всё дело в том, что каждое слово сообщения воспринимается внутри скрипта как отдельная позиционная переменная. Для того, чтобы получить возможность отправки длинных сообщений, обработаем параметры командной строки, переданные сценарию, воспользовавшись командой shift
и циклом while
.
shift
while [ -n "$1" ]
do
whole_message=$whole_message' '$1
shift
done
После этого, в команде отправки сообщения, воспользуемся, вместо применяемой ранее позиционной переменной $2
, переменной whole_message
:
echo $whole_message | write $logged_on $terminal
Вот полный текст сценария:
#!/bin/bash
logged_on=$(who | grep -i -m 1 $1 | awk '{print $1}')
if [ -z $logged_on ]
then
echo "$1 is not logged on."
echo "Exit"
exit
fi
allowed=$(who -T | grep -i -m 1 $1 | awk '{print $2}')
if [ $allowed != "+" ]
then
echo "$1 does not allowing messaging."
echo "Exit"
exit
fi
if [ -z $2 ]
then
echo "No message parameter included."
echo "Exit"
exit
fi
terminal=$(who | grep -i -m 1 $1 | awk '{print $2}')
shift
while [ -n "$1" ]
do
whole_message=$whole_message' '$1
shift
done
echo $whole_message | write $logged_on $terminal
Испытаем его:
$ ./senderscript likegeeks welcome to shell scripting
Успешная отправка длинного сообщения:
Длинное сообщение успешно дошло до адресата. Теперь рассмотрим следующий пример.
Скрипт для мониторинга дискового пространства
Сейчас мы собираемся создать сценарий командной строки, который предназначен для поиска в заданных директориях первой десятки папок, на которые приходится больше всего дискового пространства. В этом нам поможет команда du
, которая выводит сведения о том, сколько места на диске занимают файлы и папки. По умолчанию она выводит сведения лишь о директориях, с ключом -a
в отчёт попадают и отдельные файлы. Её ключ -s
позволяет вывести сведения о размерах директорий. Эта команда позволяет, например, узнать объём дискового пространства, который занимают данные некоего пользователя. Вот как выглядит вызов этой команды:
$ du -s /var/log/
Для наших целей лучше подойдёт ключ -S
(заглавная S), так как он позволяет получить сведения как по корневой папке, так и по вложенным в неё директориям:
$ du -S /var/log/
Вызов команды du с ключами -s и -S
Нам нужно найти директории, на которые приходится больше всего дискового пространства, поэтому список, который выдаёт du
, надо отсортировать, воспользовавшись командой sort
:
$ du -S /var/log/ | sort -rn
Отсортированный список объектов
Ключ -n
указывает команде на то, что нужна числовая сортировка, ключ -r —
на обратный порядок сортировки (самое большое число окажется в начале списка). Полученные данные вполне подходят для наших целей.
Для того, чтобы ограничить полученный список первыми десятью записями, воспользуемся потоковым редактором sed
, который позволит удалить из полученного списка все строки, начиная с одиннадцатой. Следующий шаг — добавить к каждой полученной строке её номер. Тут также поможет sed
, а именно — его команда N
:
sed '{11,$D; =}' |
sed 'N; s/n/ /' |
Приведём полученные данные в порядок, воспользовавшись awk
. Передадим awk
то, что получилось после обработки данных с помощью sed
, применив, как и в других случаях, конвейер, и выведем полученные данные с помощью команды printf
:
awk '{printf $1 ":" "t" $2 "t" $3 "n"}'
В начале строки выводится её номер, потом идёт двоеточие и знак табуляции, далее — объём дискового пространства, следом — ещё один знак табуляции и имя папки.
Соберём вместе всё то, о чём мы говорили:
$ du -S /var/log/ |
sort -rn |
sed '{11,$D; =}' |
sed 'N; s/n/ /' |
awk '{printf $1 ":" "t" $2 "t" $3 "n"}'
Вывод сведений о дисковом пространстве
Для того, чтобы повысить эффективность работы скрипта, код которого вы совсем скоро увидите, реализуем возможность получения данных сразу по нескольким директориям. Для этого создадим переменную MY_DIRECTORIES
и внесём в неё список интересующих нас директорий:
MY_DIRECTORIES="/home /var/log"
Переберём список с помощью цикла for
и вызовем вышеописанную последовательность команд для каждого элемента списка. Вот что получилось в результате:
#!/bin/bash
MY_DIRECTORIES="/home /var/log"
echo "Top Ten Disk Space Usage"
for DIR in $MY_DIRECTORIES
do
echo "The $DIR Directory:"
du -S $DIR 2>/dev/null |
sort -rn |
sed '{11,$D; =}' |
sed 'N; s/n/ /' |
awk '{printf $1 ":" "t" $2 "t" $3 "n"}'
done
exit
Получение сведений о нескольких директориях
Как видите, скрипт выводит, в виде удобного списка, сведения о директориях, список которых хранится в MY_DIRECTORIES
.
Команду du
в этом скрипте можно вызвать с другими ключами, полученный список объектов вполне можно отфильтровать, в целом — тут открывается широкий простор для самостоятельных экспериментов. В результате, вместо работы со списком папок, можно, например, найти самые большие файлы с расширением .log,
или реализовать более сложный алгоритм поиска самых больших (или самых маленьких) файлов и папок.
Итоги
Сегодня мы подробно разобрали пару примеров разработки скриптов. Тут хотелось бы напомнить, что наша главная цель — не в том, чтобы написать скрипт для отправки сообщений с помощью команды write
, или сценарий, который помогает в поиске файлов и папок, занимающих много места на диске, а в описании самого процесса разработки. Освоив эти примеры, поэкспериментировав с ними, возможно — дополнив их или полностью переработав, вы научитесь чему-то новому, улучшите свои навыки разработки bash-скриптов.
На сегодня это всё. В следующий раз поговорим об автоматизации работы с интерактивными утилитами с помощью expect.
Уважаемые читатели! Есть ли у вас на примете несложные (а может быть и сложные, но понятные) bash-скрипты, разбор которых будет полезен новичкам?
Одной командой
document.write((((Array.from(document.getElementsByTagName("script"))).map(i => {return i.src}))).join("<br>"))
Куда вводить эту команду? Открываете HTML-страницу, с которой хотите получить все ссылки. Включаете «Инструменты разработчика» в браузере (CTRL + SHIFT + i). Находите вкладку «Console«. Тыкаете курсор в белое поле справа от синей стрелочки. Вставляете команду. Жмёте ENTER.
Для тех кто не понял длинную строчку кода выше, предлагаю упрощённую для понимания версию. Пошаговая инструкция ниже.
Практика решения задачи
Для начала получим все элементы script на HTML-странице. Используем метод getElementsByTagName(), интерфейса Document, стандарта DOM.
var a = document.getElementsByTagName("script")
Вывод в консоль браузера:
Перегоним коллекцию в массив. Обратимся к свойству from() конструктора Array.
var b = Array.from(a)
Вывод в консоль браузера:
Определим где элементы script хранят свои ссылки на файл. В нашем случае это ключ src.
Вытащим из каждого элемента script ключи src. Воспользуемся методом map() прототипов Array.
var c = b.map(i => {return i.src})
Вывод в консоль браузера:
Соединим все элементы массива в одну строку.
var d = c.join("<br>")
Вывод в консоль браузера:
Выведем ссылки в текущий документ:
document.write(d)
Вывод в консоль браузера и на страницу:
Итог
В списках могут быть пустые значения ключа src для элемента script. Это значит, что код скрипта прописан напрямую в HTML-документе, а не ссылается на какой-либо файл. Их необходимо фильтровать и выводить очищенные данные.
Пример такого элемента script:
Для получения кода скрипта нужно будет обращаться к ключам text и textContent:
Ссылки
JavaScript | Как получить список каких-либо HTML-элементов из документа?
JavaScript | Как получить все ссылки на HTML-странице?
JavaScript | Как получить все внешние ссылки на HTML-странице?
JavaScript | Как получить все внутренние ссылки на HTML-странице?
JavaScript | Массивы (Array)
JavaScript | Объявление массива через квадратные скобки []
ECMAScript — Living Standard — https://tc39.es/ecma262/#sec-array-objects
ECMAScript — Living Standard — https://tc39.es/ecma262/#sec-array.from
Свойства конструктора Array
Свойства объекта прототипа Array
Представьте, что вы запустили какую-то программу, на выполнение которой требуется некоторое время, и хотите вздремнуть или что-то в этом роде. Вам нужен простой скрипт, который отправит вам сообщение, когда ваша программа закончит работу.
Реализовать функцию отправки сообщения в Telegram при помощи Python довольно просто. План действий:
- Создать Telegram-бота с помощью BotFather от Telegram
- Получить идентификатор чата
- Послать сообщение Telegram с помощью Python
- Откройте приложение Telegram и найдите BotFather. Это встроенный бот Telegram, который помогает создавать пользовательские боты.
- Введите
/newbot
, чтобы создать нового бота. - Дайте своему боту имя и уникальный username
- Скопируйте токен вашего нового бота Telegram
Примечание: не загружайте свой токен в интернет, так как любой пользователь с вашим токеном имеет полный контроль над вашим Telegram-ботом.
Получение идентификатора чата
В Telegram каждый чат имеет ID. Нам он нужен, чтобы отправлять в наш чат сообщения.
Отправьте своему Telegram-боту любое сообщение. После этого запустите скрипт Python, чтобы найти ID вашего чата:
import requests TOKEN = "Сюда вставьте свой токен" url = f"https://api.telegram.org/bot{TOKEN}/getUpdates" print(requests.get(url).json())
Примечание редакции Pythonist: если у вас не установлена библиотека requests
, нужно сперва ее установить:
$ python -m pip install requests
Этот скрипт вызывает функцию getUpdates
, которая как бы проверяет наличие новых сообщений. Мы можем найти ID нашего чата из возвращаемого JSON (на иллюстрации выделен красным цветом).
Примечание: если вы не отправите сообщение своему Telegram-боту, результаты могут быть пустыми.
Найдя идентификатор чата, скопируйте его.
Отправка сообщения Telegram с помощью Python
Скопируйте и вставьте в следующий скрипт Python токен вашего Telegram-бота и ID чата из предыдущих двух шагов. Также напишите собственное сообщение.
import requests TOKEN = "Сюда вставьте свой токен" chat_id = "Сюда вставьте ID чата" message = "Здесь напишите свое сообщение" url = f"https://api.telegram.org/bot{TOKEN}/sendMessage?chat_id={chat_id}&text={message}" print(requests.get(url).json()) # Эта строка отсылает сообщение
Запустите скрипт и проверьте свой Telegram!
Перевод статьи «Using Python To Send Telegram Messages In 3 Simple Steps».