Created
October 20, 2014 06:27
-
-
Save amiraliakbari/8359e129e504e4c7e987 to your computer and use it in GitHub Desktop.
Sms sending
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.