[Python] Пишем отмазки в Twitter
Привет %username%! Давно я тут ничего не писал и тут мне захотелось поделиться. Решил я ради развлечения написать небольшую приблуду для своего любимого zsh. Теперь он по команде excuse отправляет случайное предложение из базы данных Redis, которая крутится у меня в Docker’е. Для страждущих собственно код. Остальным под кат.
В остальном все примитивно и просто — как мне теперь кажется.
Вот собственно листинг единственного файла который делает всё:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #!/usr/local/bin/python3 # -*- coding: utf-8 -*- # Copyright 2017 Savin (JTProg) Mihael # Simple Twitter posting excuse # https://jtprog.ru/ import twitter import dotenv as d from pathlib import Path import logging import os import redis import random r = redis.StrictRedis(host='localhost', port=63799, db=0) # Get current working directory cwd = os.path.dirname(os.path.abspath(__file__)) # Log file name LOG_FILE_PATH = cwd + '/logs/info.log' logging.getLogger(__name__) # Logging configuration logging.basicConfig(format=u'%(filename)s [LINE:%(lineno)d]# \ %(levelname)s [%(asctime)s] %(message)s', level=logging.DEBUG, filename=LOG_FILE_PATH) # Twitter credential env = str(Path(__file__).parent / '.env') try: TOKEN = d.get_key(env, 'TOKEN') TOKEN_KEY = d.get_key(env, 'TOKEN_KEY') CON_SEC = d.get_key(env, 'CON_SEC') CON_SEC_KEY = d.get_key(env, 'CON_SEC_KEY') except Exception as e: # Log errors. logging.fatal(u'Can\'t get configuration from enviroment\n\nFATAL: {}'.format(e)) def main(): my_auth = twitter.OAuth(TOKEN, TOKEN_KEY, CON_SEC, CON_SEC_KEY) try: twit = twitter.Twitter(auth=my_auth) except Exception as e: # Log errors logging.fatal(u'FATAL: {}'.format(e)) # List of a reasons reasons = r.get(random.randrange(0, 42388)) try: # Send tweet # tweet = random.choice(reasons) twit.statuses.update(status=reasons[0:139]) logging.info(u'INFO: {}'.format('Message send')) except Exception as e: # Log errors logging.fatal(u'FATAL: {}'.format(e)) return if __name__ == '__main__': main() |
Redis у меня запущен в Docker-контейнере и проброшен соответствующий порт 63799. Наполнение базы данных в Redis делалось с помощью отдельного скрипта, который я решил не выкладывать в репозиторий. Вот его листинг:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # coding=utf-8 from nltk.tokenize import sent_tokenize import redis r = redis.StrictRedis(host='localhost', port=63799, db=0) txt = open(r'tolstoy.txt', encoding='utf-8').read() sents = sent_tokenize(txt) key = 0 for pred in sents: key += 1 r.set(key, pred) print(r.dbsize()) |
Тут все примитивно и понятно подключаемся к БД, открываем файл с текстом в кодировке UTF-8, прогоняем через полезную и интересную библиотеку nltk и простым циклом загоняем все предложения в БД.
Важно: не проглядеть такой параметр как db=0, т.к. именно он отвечает за ту базу к которой вы подключаетесь и наполняете своими «отмазками».
На этом собственно всё!
Рубрики: Программирование · Теги: Docker, python, redis, twitter