2015-08-30 3 views
2

Я действительно потерялся сейчас в этой части, где мне нужно отправить sms нескольким получателям.Python отправляет много sms через usb serial

Как отправить sms всем контактам, которые есть у меня в моей базе данных? Я использую for-loops? Или есть другие способы? Пожалуйста, помогите поблагодарить вас.

Это мой SMS код

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import serial 
import time 
import sys 
import MySQLdb as mdb 

try: 
    con = mdb.connect('localhost', 'user', 'password', 'db') 
    print 'Database connected'; 
except Exception as e: 
    sys.exit('Database connection failed') 

cur = con.cursor() 
cur.execute("Select contacts from dbtable") 
con.commit() 
number= cur.fetchall() 
print number 

for item in number: 
    recipient= recipient+item 

class TextMessage: 
    def __init__(self, recipient="xxxxxxxx",message="TextMessage.content not set."): 
     self.recipient = recipient 
     self.content = message 

    def setRecipient(self, number): 
     self.recipient = number 

    def setContent(self, message): 
     self.content = message 

    def connectPhone(self): 
     self.ser = serial.Serial('/dev/ttyUSBSMS', 460800, timeout=5, xonxoff = False, rtscts = False, bytesize = serial.EIGHTBITS, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE) 
     time.sleep(1) 

    def sendMessage(self): 
     self.ser.write('ATZ\r') 
     time.sleep(1) 
     self.ser.write('AT+CMGF=1\r') 
     time.sleep(1) 
     self.ser.write('''AT+CMGS="''' + self.recipient + '''"\r''') 
     time.sleep(1) 
     self.ser.write(self.content + "\r") 
     time.sleep(1) 
     self.ser.write(chr(26)) 
     time.sleep(1) 
    def disconnectPhone(self): 
     self.ser.close() 

sms = TextMessage("xxxxxxxx","Important!") 
sms.connectPhone() 
sms.sendMessage() 
sms.disconnectPhone() 
print "message sent successfully" 

печатной продукции

(('99876545',), ('87546412',), ('97789546',), ('87546464',), ('97377454',)) 
+0

Пожалуйста, определите, какую кодировку вы хотите использовать, поскольку не имеет смысла указывать более одного. Я бы предложил использовать UTF-8 ради совместимости. Подробнее см. [PEP0263] (https://www.python.org/dev/peps/pep-0263/). – albert

+0

Хорошо, отметим, что спасибо – Tyra

+0

После прочтения вашего вопроса несколько раз: что конкретно у вас? Не могли бы вы предоставить анонимный фрагмент, иллюстрирующий, что сервер базы данных возвращает в '.fetchall()', поскольку [docs] (http://dev.mysql.com/doc/connector-python/en/connector-python- api-mysqlcursor-fetchall.html) говорят, что это список кортежей. – albert

ответ

0

Простой for цикл будет выполнять работу:

t_list = (('99876545',), ('87546412',), ('97789546',), ('87546464',), ('97377454',)) 

for t in t_list: 
    number = t[0] 
    print(number) 
    # Call function to send SMS to the given `number` 

Просто адаптировать этот базовый подход действительно выполнить ваш необходимо.

+0

номер = t [0] означает только отправку на первый номер? – Tyra

+0

'('99876545',)' - так называемый кортеж. Мы можем получить доступ к первому элементу кортежа, в этом случае номер '99876545', индексируя кортеж, как' t [0] '. Сделав это в цикле, итерации по списку, содержащему все кортежи, и вызывая нужную функцию для отправки SMS на число, считанное из кортежа, мы можем отправлять сообщение всем получателям один за другим. Вы должны взглянуть на документы о for-loop, кортежах и списках. – albert

+0

Я вижу! Огромное спасибо. – Tyra

Смежные вопросы