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 "Проверка, как слышно?"
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

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

                      • 0
                        Или так

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

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

                                #!/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
                                  Лучше сделать вот так, тогда скрипт для всех подойдет и не надо каждый раз набирать логин/пасс
                                  #!/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
                                    Небольшая поправочка:
                                    MSGLEN=`echo $MSG | wc -c`
                                    • 0
                                      Люди добрые, объясните, почему строчка
                                      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.


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

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