Skip to content

Instantly share code, notes, and snippets.

@amiraliakbari
Created October 20, 2014 06:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amiraliakbari/8359e129e504e4c7e987 to your computer and use it in GitHub Desktop.
Save amiraliakbari/8359e129e504e4c7e987 to your computer and use it in GitHub Desktop.
Sms sending
# -*- coding: utf-8 -*-
"""
SMS Service Module
====================
Utilities to easily send sms using any service provider
usage:
>>> from commons.sms.sms_service import Sms, SmsService
>>> sms_ir = SmsService('sms.ir', '30000958', 'username', 'pass')
>>> sms_ir.send_sms(Sms(to='09122132796', message=u'Hello World!'))
"""
import re
import requests
class Sms(object):
def __init__(self, to=None, message=''):
"""
:param str to: receiver phone
:param unicode message: sms message
"""
self.to = to
self.message = message
self.is_sent = False
class SmsService(object):
def __init__(self, provider, number, username, password):
self.username = username
self.password = password
self.number = number
self._provider = None
self.provider = provider
@property
def provider(self):
"""
:rtype: SmsProvider
"""
return self._provider
@provider.setter
def provider(self, new_provider):
if isinstance(new_provider, SmsProvider):
self._provider = new_provider
elif new_provider == 'sms.ir':
self._provider = SmsDotIr()
else:
raise ValueError('Unknown provider: {0}'.format(new_provider))
def send_sms(self, sms):
""" Send the sms
:param Sms sms: sms object to be sent
"""
self.provider.send_sms(sms, from_number=self.number, username=self.username, password=self.password)
sms.is_sent = True
class SmsProvider(object):
def send_sms(self, sms, from_number, username, password):
raise NotImplementedError
class SmsDotIr(SmsProvider):
def send_sms(self, sms, from_number, username, password):
"""
:param Sms sms: SMS to be sent
"""
params = {
'from': from_number,
'to': self.normalize_number(sms.to),
'text': sms.message,
'username': username,
'password': password,
}
# TODO: also support delivery report
r = requests.get('http://www.sms.ir/post/sendSMS.ashx', params=params)
response = r.text[0]
if response == '0':
raise ValueError('Invalid Credentials')
elif response == '1':
pass # OK!
elif response == '2':
raise ValueError('Insufficient Credit')
elif response == '3':
raise ValueError('Day SMS Sending Limit Reached')
elif response == '4':
raise ValueError('SMS Sending Limit Reached')
elif response == '5':
raise ValueError('Invalid Recipient Number')
@classmethod
def normalize_number(cls, number):
"""
:type number: str
"""
return re.sub(r'^(0|98|\+98)', '', number)
@bardcrack
Copy link

La URL mostrada en la linea 79 ya no existe.
http://www.sms.ir/post/sendSMS.ashx
Por lo que el Script habria que actualizarlo.

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment