Отправка SMS через Python [в одну функцию]
Примеры Python » Общие вопросы python sms, python sms скрипт, python отправить sms, python примеры, python смс, смс тарифы
Была задача отправить SMS-ки большому списку номеров телефона с уточнением цены за всю рассылку "До" ее отправки. Сперва хотел спарсить цены на главном сайте биллинга в зависимости от страны и оператора, потом проверять какие номера какому оператору и стране принадлежат тем самым узнать окончательную цену всей рассылки. Но, благодаря одному качественному сервису по отправке SMS эта функция была встроена в базовый функционал их API.
Хотел найти уже готовый вариант скрипта по отправки sms на Python, но все было не то. Как то слишком большой код для такого простого дела. Написал небольшую функцию которая облегчила мою работу и надеюсь, что и вашу тоже.
Шаг 1
Пожалуй самый главный шаг при начале написания скрипта по отправке смс. Поиск хорошей системы по отправке смс, поискал в интернете, прочитал отзывы и каждый раз перед глазами мелькала одна компания SMSC. Зарегистрировался, посмотрел их API и обрадовался, что имеющейся функционал в полной мере удовлетворяет мои требования для решения поставленной задачи.
Шаг 2
После регистрации вам нужно будет зарегистрировать свое уникальное имя отправителя. После некоторых изменений правил от сотовых операторов, возможность менять динамично имя отправителя отменили. Теперь приходится ждать подтверждения имени отправителя, но это не страшно - поддержка работает быстро!
Купить действительно живых подписчиков в Твиттер довольно легко — достаточно посетить сайт avi1.ru. Здесь Вам будут предложены невероятно низкие цены при высоком качестве материала. К тому же, на данных страницах Вы найдете все, что нужно для развития в сети: читателей, лайки, просмотры и т. д.
Совет: Чем адекватнее и уникальнее будет название, тем быстрее и без лишних вопросах пройдете проверку.
PS: Да, имя отправителя можно не регистрировать, но тогда ваши получатели будут видеть вместо имени - обычный незнакомый им номер телефона.
Заходим во вкладке Настройки -> Имена отправителей:
Нажимаем "Добавить новое имя" и наполняем поля. Все поля обязательны, в поле "Комментарий" так же лучше будет если вы опишите как можно четче необходимость этого имени. Чем адекватнее будут наполнены поля тем быстрее будет активация. Ждем пока статус будет "допущено" и можем использовать данное имя в нашей программе.
Скрипт отправки SMS Python
Нам понадобиться библиотеки urllib, json, time
Первая urllib и time уже установлены, а вот json если еще не устанавливали для других нужд придется устанавливать сейчас.
# -*- coding: utf-8 -*-
import urllib
import json
import time
def send_sms(phones, text, total_price=0):
login = 'userlog' # Логин в smsc
password = 'myPas1' # Пароль в smsc
sender = 'Python' # Имя отправителя
# Возможные ошибки
errors = {
1: 'Ошибка в параметрах.',
2: 'Неверный логин или пароль.',
3: 'Недостаточно средств на счете Клиента.',
4: 'IP-адрес временно заблокирован из-за частых ошибок в запросах. Подробнее',
5: 'Неверный формат даты.',
6: 'Сообщение запрещено (по тексту или по имени отправителя).',
7: 'Неверный формат номера телефона.',
8: 'Сообщение на указанный номер не может быть доставлено.',
9: 'Отправка более одного одинакового запроса на передачу SMS-сообщения либо более пяти одинаковых запросов на получение стоимости сообщения в течение минуты. '
}
# Отправка запроса
url = "http://smsc.ru/sys/send.php?login=%s&psw=%s&phones=%s&mes=%s&cost=%d&sender=%s&fmt=3" % (login, password, phones, text, total_price, sender)
answer = json.loads(urllib.urlopen(url).read())
if 'error_code' in answer:
# Возникла ошибка
return errors[answer['error_code']]
else:
if total_price == 1:
# Не отправлять, узнать только цену
print 'Будут отправлены: %d SMS, цена рассылки: %s' % (answer['cnt'], answer['cost'].encode('utf-8'))
else:
# СМС отправлен, ответ сервера
return answer
print send_sms("7111111111111", 'Текст сообщения')
Всю работу выполняет одна функция send_sms() ей передаются параметры:
- phones - номер телеофна в международном формате, можно один а можно через точку с запятой разделять несколько "711111111;72222222"
- text - сам текст для смс-ки
- total_price - 0 просто отправляет сообщение снимая деньги, 1 не отправляет письмо но возвращает отчет сколько будет стоить отправка.
Настройка
В самом теле функции меняем данные для входа в SMSC на свои.
login = 'userlog' # Логин в smsc password = 'myPas1' # Пароль в smsc sender = 'Python' # Имя отправителя
login, password будут логин и пароль для входа в личный кабинет в smsc. В sender нужно прописать имя отправителя которого вам подтвердили служба поддержки.
Рассылка SMS на Python
# ... допустим, что функция выше уже имеется в нашем скрипте
# Отправляем на 3 номера телефона один и тот же текст. Разделяем номера телефона через ;
send_sms("7111111111111;722222222222;7333333333333", 'Текст сообщения')
# Рассылка на несколько номеров
phones = ('711111111', '722222222', '7333333333333')
text = 'текст для письма!'
for number in phones:
send = send_sms(number, text)
if 'cnt' in send:
print 'На номер %s, сообщение отправлено успешно!' % number
time.sleep(30) # Засыпаем передачу на 30 сек - ограничение...
else:
print send
print 'Ошибка...'
Ограничение нужна если отправляется один и тот же текст.
Вот и все, скрипт можно менять. Тарифы на их сайте не окончательные их можно менять в зависимости от объемов вашей рассылки. Тех. поддержка очень быстрая так, что в случае чего можете писать там. Если возникнут проблемы со скриптом - пишите в комментариях помогу чем смогу ;)
File "smsc.py", line 10
SyntaxError: Non-ASCII character '\xd0' in file smsc.py on line 10, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Возможно, будет интересно. Использую скрипт для отправки смс на Perl - http://www.smsfeedback.ru/smsapi/perl.php
@python настройте кодировку!
Можно мне развидеть этот код?
А чем тебе код не понравился? расскажи нам дуракам. как надо писать =)
Traceback (most recent call last):
File "C:/Users/Новый Пользователь/AppData/Local/Programs/Python/Python37-32/0.3.py", line 37, in
send = send_sms(phones, text)
File "C:/Users/Новый Пользователь/AppData/Local/Programs/Python/Python37-32/0.3.py", line 22, in send_sms
answer = json.loads(urllib.urlopen(url).read())
AttributeError: module 'urllib' has no attribute 'urlopen'
Ya.ru
[URL=http://ya.ru]Ya.ru[/URL]
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in
start(fakepyfile,mainpyfile)
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec(open(mainpyfile).read(), __main__.__dict__)
File "", line 30
print 'Будут отправлены: %d SMS, цена рассылки: %s' % (answer['cnt'], answer['cost'].encode('utf-8'))
^
SyntaxError: invalid syntax