Python Noob возникают проблемы при отправке голосового текста Google

Я пишу простой маленький сценарий, чтобы отправить мне текстовое сообщение, когда в продажу поступят билеты на ранний фестиваль Ultra Music Festival, чтобы я мог их схватить. Когда я пришел к написанию этого, я подумал, что Python будет быстрым способом достижения моей цели. Что я делаю, так это собираю ссылки, а затем подсчитываю их и определяю, есть ли изменения, и отправляю голосовое текстовое сообщение Google на пару номеров. Вот мой код работает против stackru.

from googlevoice import Voice
from googlevoice.util import input
from bs4 import BeautifulSoup, SoupStrainer
from time import sleep
import urllib2
from array import *

#define login details
email = 'example@gmail.com'
password = 'password'
url = 'http://stackru.com/questions'

def send_message(var_text):
    voice = Voice()
    voice.login(email, password)

    phoneNumber = array('L',[9998675309, 9998675309])   
    for i in phoneNumber:
        voice.send_sms(i, var_text)

#init
soup = BeautifulSoup(urllib2.urlopen(url).read(), parse_only=SoupStrainer('a'))

link_count = len(soup)

#start the loop
var = 1
while var == 1 :  # This constructs an infinite loop
    soup = BeautifulSoup(urllib2.urlopen(url).read(), parse_only=SoupStrainer('a'))
    if link_count != len(soup): 
        string = str('Link Count Changed\n\nSite:\n' + url + '\nPrev:\n' + str(link_count) + '\nNew:\n' + str(len(soup)))
        send_message(string)
        print (string)
        link_count = len(soup)
        sleep(10)
        pass
    else:
        print('Number of links ('+ str(link_count) + ') has not changed, going to sleep now.') 
        sleep(10)
        pass
print "Good bye!"

Вот ошибка, которую я продолжаю получать (кажется, происходит только при отправке более чем на один номер)

doesn't work array('L',[9998675309, 9998675309])
works array('L',[9998675309])

ОШИБКА:

bash-3.2# python gvsendalert.py 
Number of links (195) has not changed, going to sleep now.
Traceback (most recent call last):
  File "gvsendalert.py", line 32, in <module>
    send_message(string)
  File "gvsendalert.py", line 19, in send_message
    voice.send_sms(i, var_text)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/googlevoice/voice.py", line 151, in send_sms
    self.__validate_special_page('sms', {'phoneNumber': phoneNumber, 'text': text})
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/googlevoice/voice.py", line 225, in __validate_special_page
    load_and_validate(self.__do_special_page(page, data))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/googlevoice/util.py", line 65, in load_and_validate
    validate_response(loads(response.read()))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/googlevoice/util.py", line 59, in validate_response
    raise ValidationError('There was a problem with GV: %s' % response)
googlevoice.util.ValidationError: There was a problem with GV: {u'data': {u'code': 58}, u'ok': False}

Хорошо, я принял во внимание то, что некоторые из вас опубликовали и вышли с этим. Для массива чисел, отправляющего мой голосовой номер Google дважды, он отправит 2 сообщения. Если я ставлю номер моих друзей в качестве второго, он ломает его. Может ли это быть потому, что номер моих друзей не является голосовым номером Google? Мне удалось отправить сообщения на этот номер с помощью Google Voice и некоторых других сторонних приложений для iPhone, поэтому я думаю, что модуль python будет работать так же.

Вот мой второй код ревизии:

def send_message(var_text):
    voice = Voice()
    voice.login(email, password)

    phoneNumber = ['myrealgooglenumber', 'myfriendsactualphonenumber']  
    for i in phoneNumber:
        print( str('sending to: ') + str(i))
        voice.send_sms(str(i), str(var_text))
        sleep(5)

#init
soup = BeautifulSoup(urllib2.urlopen(url).read(), parse_only=SoupStrainer('a'))

link_count = len(soup)

#start the loop
var = 1
while var == 1 :  # This constructs an infinite loop
    soup = BeautifulSoup(urllib2.urlopen(url).read(), parse_only=SoupStrainer('a'))
    if link_count != len(soup): 
        string = ('Link Count Changed\n\nSite:\n{0}\nPrev:\n{1}\nNew:\n{2}').format(url, link_count, len(soup))     
        send_message(string)        
        link_count = len(soup)
        print (string)
        sleep(10)
        pass
    else:
        string = ('Number of links ({0}) has not changed, going to sleep now.').format(str(link_count))
        print(string) 
        sleep(10)
        pass
print "Good bye!"

Протестировал с 2 голосовыми номерами Google, и это работает. Все еще не работает с не голосовыми номерами Google.

2 ответа

Похоже, вы используете целые числа для телефонных номеров.

Номера телефонов не являются настоящими номерами.

Попробуйте вместо строк:

phoneNumber = ['9998675309', '9998675309']

Также, на заметке о стиле, взгляните на форматирование строки:

string = 'Link Count Changed\n\nSite:\n{0}\nPrev:\n{1}\nNew:\n{2}').format(url, link_count, len(soup))

У Google может быть таймер, чтобы вы не могли отправлять слишком много SMS-сообщений.

Возможно, вы могли бы попробовать изменить ваш цикл на что-то вроде:

for i in phoneNumber:
    voice.send_sms(i, var_text)
    sleep(5)

Еще одна мысль, работает ли лучше, если вы используете 2 разных телефонных номера?

Другие вопросы по тегам