2

ウルトラ ミュージック フェスティバルの前売りチケットが発売されたときにテキスト メッセージを送信するための簡単なスクリプトを書いています。これを書き始めたとき、Python は私の目標を達成するための迅速な方法であると考えました。私がしていることは、リンクを収集してから数えて、変更があるかどうかを判断し、いくつかの番号に Google 音声テキスト メッセージを送信することです。これがstackoverflowに対して実行された私のコードです。

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://stackoverflow.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回送信する数値配列の場合、2つのメッセージが送信されます。友達の番号を2番目にすると、それが壊れます。これは、友達の番号が Google Voice の番号ではないためでしょうか? Google Voice やその他のサードパーティの iPhone アプリケーションを使用してこの番号にメッセージを送信できたので、python モジュールも同じように機能すると思います。

これが私の2番目のリビジョンコードです:

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 以外の音声番号ではまだ機能しません。

4

2 に答える 2

0

Google には、あまりにも多くの SMS メッセージを連続して送信しないようにするためのタイマーが設定されている場合があります。

おそらく、ループを次のように変更してみてください。

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

もう 1 つの考えとして、2 つの異なる電話番号を使用すると、うまく機能しますか?

于 2012-09-09T22:00:55.353 に答える
0

電話番号にintを使用しているようです。

電話番号は本当の番号ではありません。

代わりに文字列を試してください:

phoneNumber = ['9998675309', '9998675309']

また、スタイル ノートでは、文字列の書式設定を見てください。

string = 'Link Count Changed\n\nSite:\n{0}\nPrev:\n{1}\nNew:\n{2}').format(url, link_count, len(soup))
于 2012-09-09T22:10:04.803 に答える