Командный сценарий bash для обновления своего статуса в Twitter

Или Как чирикать из терминала
На днях в офисе довольно интересным образом упал ростелекомовский интернет. Браузеры и почта не работали, но вот терминальный доступ к внешнему миру остался. А поскольку делать без интернета в конторе нечего, задумался о возможности постить в твиттер из командной строки. Ниже перевод заметки Luka Pušić (@lukapusic) Command line Twitter status update for Linux and Mac. Кроме перевода, пофиксил один баг, вылезающий для нелатинских кодировок. Так что, лучше копируйте с этой страницы, а не качайте с github.

Скрипт написан на BASH и использует утилиту CURL, которая присутствует на большинстве систем.

Сценарий будет работать с Linux, Mac OS X, а с использованием Cygwin под Windows. Сценарий может авторизоваться в Twitter, создать новый твит и выйти из системы. Есть еще много вещей, которые вы могли бы сделать между этими, почитать сообщения, твиленту, написать кому-нибудьв личку... Если у вас есть запросы на доработку скрипта оставляйте его в комментариях к http://360percents.com/posts/command-line-twitter-status-update-for-linu.... И не забудьте оставить свои собственные доработки! :)

Страница проекта: https://github.com/lukapusic/twitter-bot
Скачать: twitter-bot

Usage:

bash tweet.sh "My new tweet!"

Только будте уверены, что:
- вы ввели корректный логин и пароль в скрипте,
- в системе установлена CURL с поддержкой SSL
- у вас есть права на запись/чтение в текущей директории,
- скрипт запускается в bash, а не в sh.

Авторский код скрипта на этой странице немного поправлен, поскольку при использовании скрипта с github вылез баг. Программа не отправляет русские сообщения длиннее 70 символов.
В 14-ой строке надо заменить
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">[</span> $<span style="color: #7a0874; font-weight: bold;">(</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">"<span style="color: #007800;">$tweet</span>"</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">wc</span> -c<span style="color: #7a0874; font-weight: bold;">)</span> <span style="color: #660033;">-gt</span> <span style="color: #000000;">140</span> <span style="color: #7a0874; font-weight: bold;">]</span>; <span style="color: #000000; font-weight: bold;">then</span>
на
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">[</span> $<span style="color: #7a0874; font-weight: bold;">(</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">"<span style="color: #007800;">$tweet</span>"</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">wc</span> -m<span style="color: #7a0874; font-weight: bold;">)</span> <span style="color: #660033;">-gt</span> <span style="color: #000000;">141</span> <span style="color: #7a0874; font-weight: bold;">]</span>; <span style="color: #000000; font-weight: bold;">then</span>
Это заставит wc считать символы, а не байты и учтет наличие нулевого завершающего строку байта. 

#!/bin/bash
# Twitter status update bot
# Author: Luka Pusic <luka@pusic.com>
 
#REQUIRED PARAMS (Special characters must be urlencoded.)
username=''
password=''
tweet="$*" # tweet length must be less than 140 chars
 
#EXTRA OPTIONS
uagent="Mozilla/5.0 (Series40; NokiaX2-02/10.90; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/1.0.2.26.11"
sleeptime=0 # seconds between requests
 
if [ $(echo "$tweet" | wc -m) -gt 140 ]; then
	echo "[FAIL] Tweet must not be longer than 140 chars!" && exit 1
elif [ "$tweet" == "" ]; then
	echo "[FAIL] Nothing to tweet. Enter your text as argument." && exit 1
fi
 
touch "cookie.txt" #create a temp. cookie file
 
# GRAB LOGIN TOKENS
echo "[+] Fetching twitter.com..." && sleep $sleeptime
initpage=$(curl -s -b "cookie.txt" -c "cookie.txt" -L -A "$uagent" "https://mobile.twitter.com/session/new")
token=$(echo "$initpage" | grep "authenticity_token" | sed -e 's/.*value="//' | cut -d '"' -f 1 | head -n 1)
 
# LOGIN
echo "[+] Submitting the login form..." && sleep $sleeptime
loginpage=$(curl -s -b "cookie.txt" -c "cookie.txt" -L -A "$uagent" -d "authenticity_token=$token&session[username_or_email]=$username&session[password]=$password&remember_me=1&wfa=1&commit=Log+in" "https://mobile.twitter.com/sessions")
 
# CHECK IF LOGIN FAILED
[[ "$loginpage" == *"/account/begin_password_reset"* ]] && { echo "[!] Login failed. Exiting."; exit; }
[[ "$loginpage" == *"/account/login_challenge"* ]] && { echo "[!] Login challenge encountered. Exiting."; exit; }
[[ "$loginpage" == *"/account/login_verification"* ]] && { echo "[!] Login verification encountered. Exiting."; exit; }
 
# GRAB COMPOSE TWEET TOKENS
echo "[+] Getting compose tweet page..." && sleep $sleeptime
composepage=$(curl -s -b "cookie.txt" -c "cookie.txt" -L -A "$uagent" "https://mobile.twitter.com/compose/tweet")
 
# TWEET
echo "[+] Posting a new tweet: $tweet..." && sleep $sleeptime
tweettoken=$(echo "$composepage" | grep "authenticity_token" | sed -e 's/.*value="//' | cut -d '"' -f 1 | tail -n 1)
update=$(curl -s -b "cookie.txt" -c "cookie.txt" -L -A "$uagent" -d "wfa=1&authenticity_token=$tweettoken&tweet[text]=$tweet&commit=Tweet" "https://mobile.twitter.com/compose/tweet")
 
# GRAB LOGOUT TOKENS
logoutpage=$(curl -s -b "cookie.txt" -c "cookie.txt" -L -A "$uagent" "https://mobile.twitter.com/account")
 
# LOGOUT
echo "[+] Logging out..." && sleep $sleeptime
logouttoken=$(echo "$logoutpage" | grep "authenticity_token" | sed -e 's/.*value="//' | cut -d '"' -f 1 | tail -n 1)
logout=$(curl -s -b "cookie.txt" -c "cookie.txt" -L -A "$uagent" -d "authenticity_token=$logouttoken" "https://mobile.twitter.com/session/destroy")
 
rm "cookie.txt"

 

Теги

Добавить комментарий

Ограниченный HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
CAPTCHA
А не робот ли вы случайно?
4 + 2 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.