Появился чуток свободного времени и я немного довел до ума свой скриптик постинга сообщений в твиттер из командной строки.
Во-первых я изменил способ передачи сообщения, теперь оно считывается из stdout (тут не обошлось без перломагии). А во-вторых я добавил обратную связь - теперь скрипт проверяет действительно ли сообщение дошло до твиттера.
Если с первым все понятно, то со вторым пришлось повозиться. Эту задачу я решил сравнивая последний id сообщения до и после отправки.
id сообщения я получаю применяя этот xslt-файл к http://twitter.com/statuses/user_timeline.xml (twitter api):
- <?xml version='1.0'?>
- <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
- <xsl:template match='/'>
- <xsl:value-of select='statuses/status/id'/>
- </xsl:template>
- </xsl:stylesheet>
Он будет лежать в /etc/twit/twit.xsl.
Далее собственно сам скрипт:
- #!/bin/sh
- # Made by rsk -- http://rsk.me
- # Imports $TPASS, $TUSER
- . ~/.twit/pass
- XSLPATH=/etc/twit/twit.xsl
- echo "Type in your message..."
- MSG="$(perl -e'$_=<>,print')"
- echo "Checking last id..."
- LASTIDOLD=$(curl --basic --user $TUSER:$TPASS http://twitter.com/statuses/user_timeline.xml 2>/dev/null | xsltproc $XSLPATH - | grep -v ^$ | tail -n 1)
- echo "Sending..."
- curl --basic --user $TUSER:$TPASS --data status="$MSG" http://twitter.com/statuses/update.xml > /dev/null 2> /dev/null
- echo "Checking last id..."
- sleep 1
- LASTIDNEW=$(curl --basic --user $TUSER:$TPASS http://twitter.com/statuses/user_timeline.xml 2>/dev/null | xsltproc $XSLPATH - | grep -v ^$ | tail -n 1)
- if [ $LASTIDOLD -eq $LASTIDNEW ]; then
- echo "Sending failed!";
- else
- echo "ok";
- fi
Искуственную задержку в 18 строке пришлось добавить, потому что один раз id оказались одинаковыми, хотя сообщение и дошло.
Теперь осталось записать пароли в ~/.twit/pass:
UPD. На самом деле это все неправильно :-) Надо анализировать ответ при отправке нового статуса и по ответу определять дошло ли сообщение. Обязуюсь исправить.
- TUSER=user
- TPASS=pass
Комментариев нет:
Отправить комментарий