使用 Python 3 通过 way2sms 发送短信 [英] Sending an sms via way2sms using Python 3

查看:51
本文介绍了使用 Python 3 通过 way2sms 发送短信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试使用way2sms 发送免费短信.我发现这个链接似乎适用于 python 3:https://github.com/shubhamc183/way2sms

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

我已将此文件保存为 way2sms.py:

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

并将另一个文件另存为 smsing.py:

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()

- 我试图将用户名作为字符串传递,否则.如果没有以字符串形式给出密码,则显示错误.我的用户名和密码都是正确的.当我执行 smsing.py... 显示:

-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..!

有了这么简单的代码,我认为这很容易.但我无法找到我哪里出错了.是因为我使用的是 Windows 7 吗??有人可以帮我吗?

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.?

推荐答案

使用way2sms账号发送sms,你可以使用下面的代码片段.

To send sms using way2sms account, you may use below code snippet.

在此之前,您需要从此处创建 API Key

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)

注意:每天限制大​​约 20 条短信

这篇关于使用 Python 3 通过 way2sms 发送短信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆