Доступ к API Twitter + GetDirectMessages + Arduino в Python - PullRequest
0 голосов
/ 20 апреля 2011

После обучения я смог получить и проанализировать поток 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

1 Ответ

0 голосов
/ 20 апреля 2011

Судя по вашему комментарию, api.GetDirectMessages() вернул пустой список.Напечатайте len(status) непосредственно после вызова API, чтобы убедиться в этом.Вы уверены, что есть новые прямые сообщения, доступные для чтения?Вы пытались установить конкретную дату с помощью api.GetDirectMessages(), используя параметр since?

Вместо проверки хеш-тегов только в первом токене, проверьте всю строку.Другими словами, тест if '#high' in drip вместо if drip[0] == '#high'.

...