Быстрый в изучении - мощный в программировании
Скрипт ИНВЕСТОР на Python

Попробуйте себя в качестве инвестора имея в помощники мощный алгоритм советника на Python...

Все уроки по PyQt5

PyQt5 реализован как комплект Python-модулей. Он включает в себя около 620 классов и 6000 функций и методов...

Скрипт отправки SMS через Python

Была задача отправить SMS-ки большому списку номеров телефона с уточнением цены за всю рассылку "До" ее отправки...

Отправка SMS через Python [в одну функцию]

Отправка SMS Python

Была задача отправить SMS-ки большому списку номеров телефона с уточнением цены за всю рассылку "До" ее отправки. Сперва хотел спарсить цены на главном сайте биллинга в зависимости от страны и оператора, потом проверять какие номера какому оператору и стране принадлежат тем самым узнать окончательную цену всей рассылки. Но, благодаря одному качественному сервису по отправке SMS эта функция была встроена в базовый функционал ихнего API.

Хотел найти уже готовый вариант скрипта по отправки sms на Python, но все было не то. Как то слишком большой код для такого простого дела. Написал небольшую функцию которая облегчила мою работу и надеюсь, что и вашу тоже.

Шаг 1

Пожалуй самый главный шаг при начале написания скрипта по отправке смс. Поиск хорошей системы по отправке смс, поискал в интернете, прочитал отзывы и каждый раз перед глазами мелькала одна компания SMSC. Зарегистрировался, посмотрел их API и обрадовался, что имеющейся функционал в полной мере удовлетворяет мои требования для решения поставленной задачи.

-> Пройдите регистрацию

Шаг 2

После регистрации вам нужно будет зарегистрировать свое уникальное имя отправителя. После некоторых изменений правил от сотовых операторов, возможность менять динамично имя отправителя отменили. Теперь приходится ждать подтверждения имени отправителя, но это не страшно - поддержка работает быстро!

Совет: Чем адекватнее и уникальнее будет название, тем быстрее и без лишних вопросах пройдете проверку.

PS: Да, имя отправителя можно не регистрировать, но тогда ваши получатели будут видеть вместо имени - обычный незнакомый им номер телефона.

Заходим во вкладке Настройки -> Имена отправителей:

Отправка SMS через Python

Нажимаем "Добавить новое имя" и наполняем поля. Все поля обязательны, в поле "Комментарий" так же лучше будет если вы опишите как можно четче необходимость этого имени. Чем адекватнее будут наполнены поля тем быстрее будет активация. Ждем пока статус будет "допущено" и можем использовать данное имя в нашей программе.

Скрипт отправки 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 'Ошибка...'

Ограничение нужна если отправляется один и тот же текст.

Вот и все, скрипт можно менять. Тарифы на их сайте не окончательные их можно менять в зависимости от объемов вашей рассылки. Тех. поддержка очень быстрая так, что в случае чего можете писать там. Если возникнут проблемы со скриптом - пишите в комментариях помогу чем смогу ;)

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru yandex.ru
Комментариев: 3
  1. 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

  2. Андрей | 2016-07-01 в 15:11:29

    Возможно, будет интересно. Использую скрипт для отправки смс на Perl - http://www.smsfeedback.ru/smsapi/perl.php

  3. @python настройте кодировку!

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)