Автоматический постинг в Twitter

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Raschen
рядовой
Сообщения: 21
Зарегистрирован: 2011-11-29 20:21:05

Re: Автоматический постинг в Twitter

Непрочитанное сообщение Raschen » 2012-12-11 15:39:19

Код: Выделить всё

#!/bin/sh
#
# 20121211_twit.sh
# 2012-12-11 13:20:11
#

# файл сообщений
FILE_MESS="twit.txt"
# файл хранения номера последней строки
FILE_NUM="twit_post.num"
# Интервал отправки сообщений в секундах
INTERVAL=10

# если файл существует, вычитываем номер последней строки
if [ -r "${FILE_NUM}" ]; then
   LAST_NUM="`cat "${FILE_NUM}"`"
   KOL_STR="`wc -l "${FILE_MESS}" | sed 's/^[ ]*\([0-9][0-9]*\).*$/\1/'`"
   [ 0${LAST_NUM} -ge 0${KOL_STR} ] && LAST_NUM=0
else
   LAST_NUM=0
fi

CURR_NUM=0

while read mess
do
   CURR_NUM=$((${CURR_NUM}+1))
   [ ${CURR_NUM} -le ${LAST_NUM} ] && continue

   echo "${mess}"
   #ttytter -status="${mess}"

   # записать в файл номер последней строки
   echo ${CURR_NUM} > ${FILE_NUM}

   sleep ${INTERVAL}
done  < "${FILE_MESS}"
вот что получается

Код: Выделить всё

bzda# cat twit.txt 
11111 petya
22222 vasya
33333 anton
bzda# ./test.sh 
11111 petya
22222 vasya
33333 anton
bzda# cat twit_post.num 
3
bzda# ./test.sh
11111 petya -----\
22222 vasya ----- >  почему тут получается не пустой вывод ведь записано что последняя строка 3 ?
33333 anton ----/
bzda# 

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Автоматический постинг в Twitter

Непрочитанное сообщение kpp » 2012-12-11 15:54:24

Потому что вывод циклический - если достигнут конец файла, начинать опять с начала файла.
Если циклически не нужно, закомментировать строку

Код: Выделить всё

[ 0${LAST_NUM} -ge 0${KOL_STR} ] && LAST_NUM=0
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Raschen
рядовой
Сообщения: 21
Зарегистрирован: 2011-11-29 20:21:05

Re: Автоматический постинг в Twitter

Непрочитанное сообщение Raschen » 2012-12-11 18:44:28

спасиб то что надо осталось только одна проблема новые записи добавляются в начало файла

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Автоматический постинг в Twitter

Непрочитанное сообщение kpp » 2012-12-11 20:04:34

Огласите сразу все входные условия.
В час по чайной ложке, прямо "пытка апельсинами длилась 3 часа" (с)
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Raschen
рядовой
Сообщения: 21
Зарегистрирован: 2011-11-29 20:21:05

Re: Автоматический постинг в Twitter

Непрочитанное сообщение Raschen » 2012-12-11 20:19:40

все работает наоборот
в файле тхт данные добавляются в начало файла вот так:

Код: Выделить всё

11111 Ivan  -> (12:16 pm)
22222 petr -> (12:14 pm)
33333 Sergey -> (12:01 pm)
то есть надо следить за первой строкой
если какое нибудь регулярное выражение чтоб отсортировать тхт файл наоборот чтоб было так

Код: Выделить всё

33333 Sergey -> (12:01 pm)
22222 petr -> (12:14 pm)
11111 Ivan  -> (12:16 pm)
или проще скрипт исправить ?

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Автоматический постинг в Twitter

Непрочитанное сообщение kpp » 2012-12-11 20:57:45

Вижу два варианта решения.

Подготовительные изменения:

Код: Выделить всё

KOL_NEW="`exp ${KOL_STR} - ${LAST_NUM}`"

[ 0${KOL_STR} -eq 0 ] && exit 0
[ 0${KOL_NEW} -eq 0 ] && exit 0

CURR_NUM=1
LINE_OBOR=
Вариант 1. Если ЕСТЬ возможность отсортировать по каким-либо признакам (например по времени (12:16 pm)), то делать так:

Код: Выделить всё

sort +4 -5 +3 -4 "${FILE_MESS}" | head -n ${KOL_NEW} | (\
while read mess
do
   echo "${mess}"
   # ttytter -status="${mess}"

   # записать в файл номер последней строки
   echo ${CURR_NUM} > ${FILE_NUM}
   CURR_NUM=$((${CURR_NUM}+1))

   sleep ${INTERVAL}
done
)
Вариант 2. Если НЕТ возможности отсортировать:

Код: Выделить всё

head -n ${KOL_NEW} "${FILE_MESS}" | (\
while read mess
do
   if [ ${CURR_NUM} -eq 1 ]; then
      CURR_NUM=$((${CURR_NUM}+1))
      LINE_OBOR="${mess}"
   else
      LINE_OBOR="`echo -e "${mess}\n${LINE_OBOR}"`"
   fi
done
echo "${LINE_OBOR}" )  |\
( CURR_NUM=$((${LAST_NUM}+1))
while read mess
do
   echo "${mess}"
   # ttytter -status="${mess}"

   # записать в файл номер последней строки
   echo ${CURR_NUM} > ${FILE_NUM}
   CURR_NUM=$((${CURR_NUM}+1))

   sleep ${INTERVAL}
done
)
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Автоматический постинг в Twitter

Непрочитанное сообщение kpp » 2012-12-11 21:10:54

Поправка 1-го варианта:

Код: Выделить всё

CURR_NUM=$((${LAST_NUM}+1))
head -n ${KOL_NEW} "${FILE_MESS}" | sort +4 -5 +3 -4 | (\
while read mess
do
   echo "${mess}"
   # ttytter -status="${mess}"

   # записать в файл номер последней строки
   echo ${CURR_NUM} > ${FILE_NUM}
   CURR_NUM=$((${CURR_NUM}+1))

   sleep ${INTERVAL}
done
)
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Автоматический постинг в Twitter

Непрочитанное сообщение kpp » 2012-12-11 21:24:14

Поправка ко 2-му варианту (красота\оптимизация):

Код: Выделить всё

head -n ${KOL_NEW} "${FILE_MESS}" |\
( while read mess
do
   if [ -z "${LINE_OBOR}" ]; then
      LINE_OBOR="${mess}"
   else
      LINE_OBOR="`echo -e "${mess}\n${LINE_OBOR}"`"
   fi
done
echo "${LINE_OBOR}" ) |\
( CURR_NUM=$((${LAST_NUM}+1))
while read mess
do
   echo "${mess}"
   # ttytter -status="${mess}"

   # записать в файл номер последней строки
   echo ${CURR_NUM} > ${FILE_NUM}
   CURR_NUM=$((${CURR_NUM}+1))

   sleep ${INTERVAL}
done )
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Raschen
рядовой
Сообщения: 21
Зарегистрирован: 2011-11-29 20:21:05

Re: Автоматический постинг в Twitter

Непрочитанное сообщение Raschen » 2012-12-11 21:45:25

Все разрешилось при помощи sort спасибо большое за помощь