【问题标题】:Access the Twitter API + GetDirectMessages + Arduino in Python在 Python 中访问 Twitter API + GetDirectMessages + Arduino
【发布时间】:2011-04-20 01:11:22
【问题描述】:

按照教程,我能够获取和解析我自己帐户的 Twitter 流,并通过串行连接发送此信息以与我的 Arduino 项目进行交互。但是,我需要将消息直接发送给我,而不是我的公共提要。下面是获取公共提要的代码,然后是我尝试获取我的直接消息的代码。

我怎样才能做到这一点?

##Import Libraries

import twitter
import serial
import time

##authenticate yourself with twitter
api = twitter.Api(consumer_key='*************', consumer_secret='**************', access_token_key='************', access_token_secret='*************')

##set to your serial port
ser = serial.Serial('/dev/tty.usbmodem1a21', 19200)

## check serial port
def checkokay():
    ser.flushInput()
    time.sleep(3)
    line=ser.readline()
    time.sleep(3)

    if line == ' ':
            line=ser.readline()
    print 'here'

## Welcome message
print 'Starting Wooden Wave!'

def driptwit():
    status = []
    x = 0

    status = api.GetUserTimeline('wooden_wave') ##grab latest statuses

    checkIt = [s.text for s in status] ##put status in an array

    drip = checkIt[0].split() ##split first tweet into words

    ## check for match and write to serial if match
    if drip[0] == '#high':
        print 'Tweet Recieved, raise block high.'
        ser.write('1')
    elif drip[0] == '#low': ##break if done
        ser.write('0')
        print 'Tweet Recieved, raise block low.'
    elif drip[0] == '#light': ##break if done
        ser.write('2')
        print 'Tweet Recieved, turn on LED.'
    else:
    ser.write('0')
    print 'Awaiting Tweet'

while 1:
driptwit() ## call driptwit function
time.sleep(15) ## sleep for 15 seconds to avoid rate limiting

尝试获取直接消息:

##Import Libraries

import twitter
import serial
import time

##authenticate yourself with twitter
api = twitter.Api(consumer_key='***********', consumer_secret='***********', access_token_key='***********', access_token_secret='***********')

##set to your serial port
ser = serial.Serial('/dev/tty.usbmodem1a21', 19200)

## check serial port
def checkokay():
    ser.flushInput()
    time.sleep(3)
    line=ser.readline()
    time.sleep(3)

    if line == ' ':
            line=ser.readline()
    print 'here'

## Welcome message
print 'Starting Wooden Wave!'

def driptwit():
status = []
x = 0

status = api.GetDirectMessages() ##grab latest statuses

checkIt = [s.text for s in status] ##put status in an array

drip = checkIt[0].split() ##split first tweet into words

## check for match and write to serial if match
if drip[0] == '#high':
    print 'Tweet Recieved, raise block high.'
    ser.write('1')
elif drip[0] == '#low': ##break if done
    ser.write('0')
    print 'Tweet Recieved, raise block low.'
elif drip[0] == '#light': ##break if done
    ser.write('2')
    print 'Tweet Recieved, turn on LED.'
else:
    ser.write('0')
    print 'Awaiting Tweet'

while 1:
    driptwit() ## call driptwit function
    time.sleep(15) ## sleep for 15 seconds to avoid rate limiting

//// 更新 //

def driptwit():
    status = []
    x = 0

    status = api.GetMentions() ##grab latest statuses
    print [s.text for s in status]
    checkIt = [s.text for s in status] ##put status in an array

    drip = checkIt[0].split() ##split first tweet into words

    ## check for match and write to serial if match
    if drip[0] == '#high':
        print 'Tweet Recieved, raise block high.'
        ser.write('1')
    elif drip[0] == '#low': ##break if done
        ser.write('0')
        print 'Tweet Recieved, raise block low.'
    elif drip[0] == '#light': ##break if done
        ser.write('2')
        print 'Tweet Recieved, turn on LED.'
    else:
        ser.write('0')
        print 'Awaiting Tweet'

while 1:
    driptwit() ## call driptwit function
    time.sleep(15) ## sleep for 15 seconds to avoid rate limiting

【问题讨论】:

  • 快速浏览一下没有任何问题。您能否详细说明第二个程序是如何失败的?
  • 我收到的输出错误是:raceback(最近一次调用最后一次):文件“woodentwit3.py”,第 54 行,在 driptwit() ## calldriptwit 函数文件“woodentwit3. py”,第 35 行,indriptwit 滴 = checkIt[0].split() ##split first tweet into words IndexError: list index out of range 我不确定这是否意味着直接消息返回的结果格式不同到为用户时间线返回的那些。感谢您的观看

标签: python api twitter feed arduino


【解决方案1】:

从您的评论看来,api.GetDirectMessages() 返回了一个空列表。在 API 调用之后直接打印 len(status) 以验证这一点。您确定有新的直接消息可供阅读吗?您是否尝试过使用since 参数为api.GetDirectMessages() 设置特定日期?

不要只检查第一个标记中的哈希标记,而是检查整个字符串。换句话说,测试if '#high' in drip 而不是if drip[0] == '#high'

【讨论】:

  • 我已将其从直接消息更改为提及并添加了一个打印行,因此它表明我可以引入推文,但它让我停止它们并且无法找到#tags。
  • 我在阅读提及时没有任何问题。但是,能否直接将库返回的 unicode 字符串与 8 位字符串进行比较?
  • [u'@wooden_wave #low ;)', u'@wooden_wave testing python #low', u'@wooden_wave #low testing if that works', u'#high test @wooden_wave', u'@wooden_wave #high move it up high', u'@wooden_wave #on test', u'@wooden_wave #Newcastle', u'@wooden_wave LED', u'@wooden_wave 36'] Awaiting Tweet 这是输出即时消息得到。
  • @liamviney 这就是你应该得到的输出。您正在与第一个标记进行比较,哈希标记是第一个字符串中的第二个标记。
猜你喜欢
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 2013-02-21
  • 2015-06-27
  • 2013-10-31
  • 2022-01-25
  • 2011-03-27
相关资源
最近更新 更多