Отправка смс через way2sms с использованием Python 3

Я пытался отправить бесплатные смс с помощью way2sms. Я нашел эту ссылку, где она, похоже, работала на python 3: https://github.com/shubhamc183/way2sms

Я сохранил этот файл как 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:

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... отображается:

>>>Can't login, once check credential..!
Can't perform since NOT logged in..!
Can't perform since NOT logged in..!

С таким простым кодом я думал, что это будет легко. Но я не могу найти, где я ошибаюсь. Это потому что я использую Windows 7?? Кто-нибудь может мне помочь.?


person YSR    schedule 03.05.2018    source источник
comment
Возможно, он использует HTTP-аутентификацию; попробуй from requests.auth import HTTPBasicAuth self.q=self.s.post(self.url, auth=HTTPBasicAuth('user', 'pass'))   -  person Ali Momen Sani    schedule 03.05.2018
comment
@AliMomenSani нет, это не работает   -  person YSR    schedule 03.05.2018


Ответы (2)


Чтобы отправить sms, используя учетную запись way2sms, вы можете использовать приведенный ниже фрагмент кода.

До этого вам потребуется создать API Key из здесь

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 смс в день

person AB Abhi    schedule 12.11.2018

Прежде всего убедитесь, что у вас есть все зависимости, такие как запросы и bs4, если вы не пытаетесь загрузить их с помощью pip3, поскольку этот код работает на Python3 не python2.

Я обновил репозиторий.

Мобильный номер также должен быть в формате String.

Итак, вместо

q=way2sms.sms(1234567890,'password') #username = 1234567890

использовать

q=way2sms.sms('1234567890','password') #username = 1234567890
person Shubham Choudhary    schedule 15.07.2018