Raspberry Pi Python Tweet按钮不起作用

时间:2018-01-22 15:40:01

标签: python api twitter raspberry-pi twython

我正在尝试这样的程序:

按下按钮时,程序自动发送推文。这个程序不会给出错误,但总是说" Not Pushed Button"。

我真的是python的初学者。有人可以帮帮我吗?

#!/usr/bin/env python
import sys
from twython import Twython
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN)

apiKey = 'xxxxxxxxx'
apiSecret = 'xxxxxxxxx'
accessToken = 'xxxxxxxxxx'
accessTokenSecret = 'xxxxxxxxx'

api = Twython(apiKey,apiSecret,accessToken,accessTokenSecret)

GPIO.add_event_detect(7, GPIO.FALLING)

tweetStr = "@raspberrytest34 deneme 1-2-3"

if GPIO.event_detected(7):
    api.update_status(status=tweetStr)
    print "Tweeted: " + tweetStr
else:
    print "Not Pushed Button"

1 个答案:

答案 0 :(得分:2)

你的程序不会等待任何事情。它只是运行,测试按钮是否在初始化然后停止的几毫秒内被按下。

对于测试,您可以添加一个简单的

time.sleep(5)

到你的代码,让脚本等待五秒,然后评估你是否在此期间按下了按钮。

你也可以这样做:

try:
    while True:
        if GPIO.event_detected(7):
            api.update_status(status=tweetStr)
            print "Tweeted: " + tweetStr
    time.sleep(1)
except KeyboardInterrupt:
    GPIO.cleanup()
    print "\nBye"

这将永远运行,直到你按Ctrl-C并每秒响应一次你的按键。

然而,处理此问题的更好方法是将回调函数传递给键盘中断。注意回调函数只能通过全局变量与主脚本通信(如果有更好的方法,请有人纠正我!)。

import time
api = Twython(apiKey,apiSecret,accessToken,accessTokenSecret)
tweetStr = "@raspberrytest34 deneme 1-2-3"

def send_tweet(channel):
    global tweetStr
    global api
    api.update_status(status=tweetStr)
    print "Tweeted: " + tweetStr

GPIO.add_event_detect(7, GPIO.FALLING, callback=send_tweet)

try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    GPIO.cleanup()
    print "\nBye"