Linux для всех

индекс
247,37

Bash и Twitter

image
Развивая уже упомянутую идею постинга в Twitter из линуксового Bash'а: делается все элементарно и просто.
Устанавливаем curl:
$ sudo apt-get install curl

Теперь создаем простой скрипт такого содержания:
#!/bin/bash
curl --basic --user USERNAME:PASSWORD \
--data status="$*" 'http://twitter.com/statuses/update.xml' -o /dev/null;

Соответственно, USERNAME и PASSWORD меняем на наши логин и пароль в твиттере.
Теперь кидаем скрипт куда-нибудь в /usr/local/bin, например, под именем tw, выставляем права:
$ sudo chmod 551 /usr/local/bin/tw
$ sudo chmod +s /usr/local/bin/tw
$ sudo chown root /usr/local/bin/tw

(дабы запускать могли все, а править только рут) — и смело пользуемся!
$ tw "Проверка, как слышно?"
+59
26 января 2009, 03:12
63

комментарии (23)

+4
iv1 #
Автор молодец, а для интересующихся like me подробности о команде curl ( rus-linux.net/MyLDP/internet/curlrus.html )
rus-linux.net/MyLDP/internet/curlrus.html
0
iv1 #
очень странно парсер ссылки отобразил.
0
Lashezzz #
CURL — это сила!!! спасибо за пост!)
+1
Marsikus #
Изящно!
+7
sharkman #
Я-бы не советовал класть сей скрипт в /usr/local/bin, если в системе несколько пользователей, лучше положить куда-нибудь в ~/bin, ведь в скрипте указаны логин и пароль… да, и ещё права выставить лучше 700
+4
dimaka #
А я иногда пишу в тви из vim, с помощью плагина twitvim. Там же можно просматривать и таймлайн, и реплаи, постить строку из буффера или весь буффер полностью.
+1
iv1 #
Вот к Хабру прикрутить такое: постить и получать фидбэк.
–3
vini #
прикольна))
+3
k0sh #
Добавляем проверку на 140 символов:
len=`echo "$*" | wc -c`
if [ $len -gt  140 ]; then
        echo "Too much"
        exit 1
fi

0
fhh #
Или так

len=`echo "$*" | wc -c`

if [ $len -gt 140 ]; then
s=«Too much»
`notify-send «Twitter» "$s"`
exit 1
fi
+1
drew #
В API к Twitter есть некоторые команды с curl: apiwiki.twitter.com/REST+API+Documentation
0
laQie #
А какая кодировка должна быть при отправке? Если системная локаль UTF-8 — русские буквы не отображаются нормально.
0
enchantner #
У меня и с русским все работает нормально, локаль UTF-8, Ubuntu 8.10.
0
gramilla #
Есть одна проблема в скрипте, при добавлении записи у которой в конце восклицательный знак, скрипт не хочет работать
0
enchantner #
Лучше использовать одинарные кавычки вместо двойных.
0
enchantner #
Или временно выключить histexpand командой set +H
0
etz #
экранируйте его слэшем — вот так\!
0
enchantner #
в данном случае этот способ не подходит
+1
Takeji #
А можно сделать так:

#!/bin/bash
len=`echo $3 | wc -c`
if [ $len -gt 140 ]; then
echo "Too much"
exit 1
fi

curl --basic --user $1:$2 \
--data status=$3 'http://twitter.com/statuses/update.xml' -o /dev/null;


Кидаем скрипт куда-нибудь в /usr/local/bin и запускаем вот так:

$ tw user pass 'Тест'
+1
7hr33pw1r3 #
Лучше сделать вот так, тогда скрипт для всех подойдет и не надо каждый раз набирать логин/пасс
#!/bin/bash

FILE="$HOME/.twitter"

if [! -f $FILE ]; then
echo "$FILE: does not exists."
echo «Please create this file with following contents:»
echo "[login]"
echo "[pass]"
echo «Where [login] and [pass] is your twitter login/password.»
echo «Make sure you DO NOT have an empty line in the end of file and/or spaces at start/end of the lines or authentication may fail.»
exit 1
elif [! -r $FILE ]; then
echo "$FILE: can not be read"
exit 2
fi

if [ `stat -c %a $FILE` -ne 600 ]; then
echo «WARNING: file chmod is not safe! Will try to fix.»
exec chmod 0600 $FILE
fi

LOGIN=`head -n 1 $FILE` # quick'n'dirty =)
PASSWORD=`tail -n 1 $FILE`

MSG="$*"

MSGLEN=`echo $3 | wc -c`
if [ $MSGLEN -gt 140 ]; then
echo «Too much text»
exit 3
fi

curl --basic --user $LOGIN:$PASSWORD \
--data status=$MSG 'http://twitter.com/statuses/update.xml' -o /dev/null;
0
Takeji #
Небольшая поправочка:
MSGLEN=`echo $MSG | wc -c`
0
ibex #
Люди добрые, объясните, почему строчка
curl --basic --user twitteruser:123456789 \ --data status=«test post» 'http://twitter.com/statuses/update.xml' -o /dev/null;
мгновенно отправляет пост в твиттер а вышеприведенный скрипт с учтённой правкой выделывается.

# ./tw.sh test post
curl: (6) Couldn't resolve host ' --data'
curl: (6) Couldn't resolve host 'status=test'
<?xml version=«1.0» encoding=«UTF-8»?>
/statuses/update.xml
This method requires a POST.


еще и думает около минуты…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.