问题
I've been trying to send free sms using way2sms. I found this link where it seemed to work on python 3: https://github.com/shubhamc183/way2sms
I've saved this file as way2sms.py:
import requests
from bs4 import BeautifulSoup
class sms:
def __init__(self,username,password):
'''
Takes username and password as parameters for constructors
and try to log in
'''
self.url='http://site24.way2sms.com/Login1.action?'
self.cred={'username': username, 'password': password}
self.s=requests.Session() # Session because we want to maintain the cookies
'''
changing s.headers['User-Agent'] to spoof that python is requesting
'''
self.s.headers['User-Agent']="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0"
self.q=self.s.post(self.url,data=self.cred)
self.loggedIn=False # a variable of knowing whether logged in or not
if "http://site24.way2sms.com/main.action" in self.q.url: # http status 200 == OK
print("Successfully logged in..!")
self.loggedIn=True
else:
print("Can't login, once check credential..!")
self.loggedIn=False
self.jsid=self.s.cookies.get_dict()['JSESSIONID'][4:] # JSID is the main KEY as JSID are produced every time a session satrts
def msgSentToday(self):
'''
Returns number of SMS sent today as there is a limit of 100 messages everyday..!
'''
if self.loggedIn == False:
print("Can't perform since NOT logged in..!")
return -1
self.msg_left_url='http://site24.way2sms.com/sentSMS?Token='+self.jsid
self.q=self.s.get(self.msg_left_url)
self.soup=BeautifulSoup(self.q.text,'html.parser') #we want the number of messages sent which is present in the
self.t=self.soup.find("div",{"class":"hed"}).h2.text # div element with class "hed" -> h2
self.sent=0
for self.i in self.t:
if self.i.isdecimal():
self.sent=10*self.sent+int(self.i)
return self.sent
def send(self,mobile_no,msg):
'''
Sends the message to the given mobile number
'''
if self.loggedIn == False:
print("Can't perform since NOT logged in..!")
return False
if len(msg)>139 or len(mobile_no)!=10 or not mobile_no.isdecimal(): #checks whether the given message is of length more than 139
return False #or the mobile_no is valid
self.payload={'ssaction':'ss',
'Token':self.jsid, #inorder to visualize how I came to these payload,
'mobile':mobile_no, #must see the NETWORK section in Inspect Element
'message':msg, #while messagin someone from your browser
'msgLen':'129'
}
self.msg_url='http://site24.way2sms.com/smstoss.action'
self.q=self.s.post(self.msg_url,data=self.payload)
if self.q.status_code==200:
return True
else:
return False
def sendLater(self, mobile_no, msg, date, time): #Function for future SMS feature.
#date must be in dd/mm/yyyy format
#time must be in 24hr format. For ex: 18:05
if self.loggedIn == False:
print("Can't perform since NOT logged in..!")
return False
if len(msg)>139 or len(mobile_no)!=10 or not mobile_no.isdecimal():
return False
dateparts = date.split('/') #These steps to check for valid date and time and formatting
timeparts = time.split(':')
if int(dateparts[0])<1 or int(dateparts[0])>32 or int(dateparts[1])>12 or int(dateparts[1])<1 or int(dateparts[2])<2017 or int(timeparts[0])<0 or int(timeparts[0])>23 or int(timeparts[1])>59 or int(timeparts[1])<0:
return False
date = dateparts[0].zfill(2) + "/" + dateparts[1].zfill(2) + "/" + dateparts[2]
time = timeparts[0].zfill(2) + ":" + timeparts[1].zfill(2)
self.payload={'Token':self.jsid,
'mobile':mobile_no,
'sdate':date,
'stime':time,
'message':msg,
'msgLen':'129'
}
self.msg_url='http://site24.way2sms.com/schedulesms.action'
self.q=self.s.post(self.msg_url, data=self.payload)
if self.q.status_code==200:
return True
else:
return False
def logout(self):
self.s.get('http://site24.way2sms.com/entry?ec=0080&id=dwks')
self.s.close() # close the Session
self.loggedIn=False
And saved another file as smsing.py:
import way2sms
q=way2sms.sms(1234567890,'password') #username = 1234567890
q.send('0987654321','hello') #receiver ph no.:0987654321, message=hello
n=q.msgSentToday()
q.logout()
-I've tried to pass username as string and otherwise. Password if not given as string shows error. My username and password both are correct. When I execute smsing.py... displays:
>>>Can't login, once check credential..!
Can't perform since NOT logged in..!
Can't perform since NOT logged in..!
With such simple code I thought it would be easy. But I am not able to find where I am going wrong. Is it because I am using Windows 7?? Can anybody please help me.?
回答1:
To send sms
using way2sms
account, you may use below code snippet.
Before that you would be required to create an API Key
from here
import requests
url = "https://smsapi.engineeringtgr.com/send/"
params = dict(
Mobile='login username',
Password='login password',
Key='generated from above sms api',
Message='Your message Here',
To='recipient')
resp = requests.get(url, params)
print(resp, resp.text)
N.B: There is a limit of approx 20 sms per day
回答2:
First of all make sure you have all the dependencies like requests and bs4, if not trying downloading them using pip3 since this code work on Python3 not python2.
I have update the repository.
The mobilenumber should also be in String format
So, instead of
q=way2sms.sms(1234567890,'password') #username = 1234567890
use
q=way2sms.sms('1234567890','password') #username = 1234567890
回答3:
import requests
url = "https://www.fast2sms.com/dev/bulk"
payload = "sender_id=FSTSMS&message=Good morning , this is prasad sending from python.&language=english&route=p&numbers=9052766763,7013514480"
headers = {
'authorization': "your app key",
'Content-Type': "application/x-www-form-urlencoded",
'Cache-Control': "no-cache",
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
来源:https://stackoverflow.com/questions/50151490/sending-an-sms-via-way2sms-using-python-3