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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

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

Непрочитанное сообщение Demontager » 2012-08-28 22:58:09

Хотелось бы, даже я б сказал что есть необходимость организовать автоматический постинг в твитер. Суть такая, имеется консольный клиент для твитера ttytter и есть текстовый файл, с заранее заготовленным списком твитом.
Задача: Сделать так, чтобы через срипт твиты постепенно постились через определенный промежуток времени и не повторялись, пока не кончаться строки с твитами.
Пока нашел несколько вариантов скриптов, но все не доработаны на постинг определенного твита в списке, ну вот к примеру, этот скрипт постить весь текст с первой строки.

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

#!/bin/bash
(IFS=$’\n’; for a in $(cat twit.txt); do echo $a; ttytter -status=»$a»; sleep 10; done)
где twit.txt файл с твитами.

Хостинговая компания 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-08-29 13:31:46

Если одно сообщение = одна строка в файле:

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

while read mess
do
   echo "${mess}"
   ttytter -status="${mess}"
   sleep 10
done  < twit.txt
Не ясна постановка задачи:
твиты постепенно постились через определенный промежуток времени и не повторялись
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

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

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

Непрочитанное сообщение kpp » 2012-08-29 13:38:34

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

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

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

Непрочитанное сообщение Demontager » 2012-08-29 15:52:18

Как раз нужен последовательный перебор строк. Допустим, есть txt с таким содержанием -
строка1: текст твита номер 1
строка2: текст твита номер 2
строка3: текст твита номер 3

Запускаем через крон скрипт и он постит первую строку, через заданный промежуток вторую троку и т.д. Т.е последовательно одна за другой и тогда можно будет легко отследить сколько твитов уже отпостилось. А если доходит до конца файла, начинает заново или завершает постинг.
Только вот как в скрипте задать промежуток времени, через который постить новый твит ? Задать sleep промежуток, сутки, двое, можно такое сделать ?

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

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

Непрочитанное сообщение kpp » 2012-08-29 15:56:55

ожидать N секунд. В сутках 86400 секунд.
Если нужно не просто через определенное время, а по расписанию, тогда либо создать файл расписания, и работать по нему, либо через крон запускать скрипт в нужные моменты, скрипт будет сохранять номер последнего отправленного сообщения, и слать следующее.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

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

Непрочитанное сообщение Demontager » 2012-08-31 18:31:36

Наконец-то попробовал на деле, что-то так долго lissyara forum лежал, не видел решения. Все работает как я и хотел, срипт постит по порядку, а когда доходит до конца файла, останавливается.
А как вы говорили можно сделать,чтобы срипт мог ещё проверять, что он уже строку отпостил и не постил ее заново ?
Допустим, скрипт остановился, потом я его заново запустил, вот чтобы он заново не начал постить то что уже есть, как сделать ?

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

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

Непрочитанное сообщение Bayerische » 2012-08-31 19:43:05

Я такие вещи на PHP делаю, но не в этом суть, хотя, сложность реализации разная получается.
В общем, вам надо куда-то записывать переменную, обозначающую последнюю строку. В моём случае тупо пишется в MySQL. Не в курсе, может ли шелл писать в БД, потому вариант создать обновляемый файл конфигурации.

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

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

Непрочитанное сообщение kpp » 2012-08-31 21:09:55

Нужно просто в файл записывать номер последней строки, а при старте скрипта этот номер вычитывать, и все сообщения с меньшим номером пропускать.
Примерно так:

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

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

# если файл существует, вычитываем номер последней строки
if [ -r "${FILE_NUM}" ]; then 
   LAST_NUM="`cat "${FILE_NUM}"`"
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  < twit.txt
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

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

Непрочитанное сообщение Demontager » 2012-09-01 15:51:02

ЭЭ. что-то у меня не получается с cron. Сразу обозначу что сиcтема FreeBSD 9.0, поставил с портов bash и в скрипте изменил путь на #!/usr/local/bin/bash
постинг 3 раза в день

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

#!/usr/local/bin/bash
while read mess
do
   echo "${mess}"
   ttytter -status="${mess}"
   sleep 28800
done  < /root/twitter/twit.txt
Мой crontab

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

# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD: release/9.0.0/etc/crontab 194170 2009-06-14 06:37:19Z brian $
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
#
#minute	hour	mday	month	wday	who	command
#
*/5	*	*	*	*	root	/usr/libexec/atrun
#
# Save some entropy so that /dev/random can re-seed on boot.
*/11	*	*	*	*	operator /usr/libexec/save-entropy
#
# Rotate log files every hour, if necessary.
0	*	*	*	*	root	newsyslog
#
# Perform daily/weekly/monthly maintenance.
1	3	*	*	*	root	periodic daily
15	4	*	*	6	root	periodic weekly
30	5	1	*	*	root	periodic monthly
#
# Adjust the time zone if the CMOS clock keeps local time, as opposed to
# UTC time.  See adjkerntz(8) for details.
1,31	0-5	*	*	*	root	adjkerntz -a

# Twitter auto-posting 
42	14	1	9	*	root	/root/twitter/twitter.sh
Последняя строка для твитера, поставил дату 1 Сентября, время 14:42. Скрипт запустился, в логе Sep 1 14:42:00 max-cook /usr/sbin/cron[13400]: (root) CMD (/root/twitter/twitter.sh) . Вот только постинг не пошел, что не так ?
Что самое интересное, с консоли пускаю
sh /root/twitter/twitter.sh и постинг идет нормально.

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

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

Непрочитанное сообщение kpp » 2012-09-01 18:36:50

Зачем ставить БАШ??
В скрипте изменить на

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

#!/bin/sh
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

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

Непрочитанное сообщение Demontager » 2012-09-01 21:14:06

Изменил на /bin/sh, все равно не постит, хотя в логе крона пишет что скрипт запускается. Понятия не имею что ему ещё надо.

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

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

Непрочитанное сообщение kpp » 2012-09-01 21:48:33

Указать полный путь к ttytter
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

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

Непрочитанное сообщение Demontager » 2012-09-01 22:53:15

не помогло :st:

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

#!/bin/sh
while read mess
do
   echo "${mess}"
   /usr/local/bin/ttytter -status="${mess}"
   sleep 28800
done  < /root/twitter/twit.txt
А в консоли выполняется и постится sh /root/twitter/twitter.sh

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

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

Непрочитанное сообщение kpp » 2012-09-01 23:24:18

В консоли выполняется и постится /root/twitter/twitter.sh без sh ?
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

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

Непрочитанное сообщение Demontager » 2012-09-01 23:32:25

Да и с sh и без начинает постить

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

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

Непрочитанное сообщение kpp » 2012-09-02 21:34:21

Сделайте так:

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

#!/bin/sh
echo "Start script..." >> /tmp/twitt.debug
while read mess
do
   echo "${mess}" >> /tmp/twitt.debug
   /usr/local/bin/ttytter -status="${mess}" >> /tmp/twitt.debug 2>&1
   sleep 28800
done  < /root/twitter/twit.txt
Запустите через крон, посмотрите появился ли файл /tmp/twitt.debug и что в нем.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

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

Непрочитанное сообщение Demontager » 2012-09-02 22:35:16

Чего-то в /tmp/ не создался, тогда я поменял на место, откуда запускается скрипт. Лог появился

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

Start script...
Чаще всего в пробки попадает штопор.
trying to find cURL ... not found.
failed. trying to find Lynx ... not found.
you must have either Lynx or cURL installed to use TTYtter.
А если постить с консоли, то в терминале такое

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

 sh /root/twitter/twitter.sh
В центре внимания лучше быть на свадьбе, чем на похоронах…
trying to find cURL ... /usr/local/bin/curl
test-login SUCCEEDED!
post attempt SUCCEEDED!

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

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

Непрочитанное сообщение schizoid » 2012-09-03 18:00:57

поправьте в /etc/crontab

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

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
на

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

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

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

Непрочитанное сообщение Demontager » 2012-09-05 16:42:28

Работает, спасибо больше. 2 дня прошло, постит без перерыва :Yahoo!:

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

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

Непрочитанное сообщение kpp » 2012-09-05 17:55:22

Ну вот, еще одним спам-ботом больше стало... :shock:
Зачем помогать было?.. :pardon:
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

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

Непрочитанное сообщение Demontager » 2012-09-05 20:33:18

Ну я не спамлю, твиты идут только в свой один аккаунт, тем более там не бредотекст. Кстати, жене понравилось, хочет чтобы и ей настроил. Надо подумать как на несколько акков такое сделать.

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

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

Непрочитанное сообщение Raschen » 2012-12-11 14:03:04

kpp писал(а):Нужно просто в файл записывать номер последней строки, а при старте скрипта этот номер вычитывать, и все сообщения с меньшим номером пропускать.
Примерно так:

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

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

# если файл существует, вычитываем номер последней строки
if [ -r "${FILE_NUM}" ]; then 
   LAST_NUM="`cat "${FILE_NUM}"`"
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  < twit.txt
Понадобился похожий скриптик только он некорректно работает в файл записывает количество строк а при повторном запуске все равно по все строки выдает

А задача у меня такая есть файл txt в нем записи такова вида

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

11111 Ivan 
22222 petr
33333 Sergey 
По крону читать этот файл раз в 5 минут и постить в твиттер только новые записи и еще маленький нюанс в 23:59 обнулять счетчик строк т.к в файл обновится полностью

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

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

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

Забыл добавить в файле txt может быть от 0 до 15 записей

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

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

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

Это такое типа ненавязчивое техзадание? :shock:
Я не поленился, проверил скрипт - работает.
От кол-ва строк в файле не зависит.
По поводу "23:59 обнулять счетчик строк т.к в файл обновится полностью" - добавить в крон удаление файла FILE_NUM.
Можно немного модифицировать скрипт:

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

#!/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}"
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

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

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

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

Точнее будет так:

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

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

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

KOL_STR=0
# если файл существует, вычитываем номер последней строки
if [ -r "${FILE_NUM}" ]; then
   LAST_NUM="`cat "${FILE_NUM}"`"
else
   LAST_NUM=0
fi

[ -r "${FILE_MESS}" ] && KOL_STR="`wc -l "${FILE_MESS}" | sed 's/^[ ]*\([0-9][0-9]*\).*$/\1/'`"
[ 0${LAST_NUM} -ge 0${KOL_STR} ] && LAST_NUM=0

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