[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, т.к. именно он отвечает за ту базу к которой вы подключаетесь и наполняете своими «отмазками».

На этом собственно всё!

Опубликовано 13.09.2017 в 15:00 · Автор JTProg_ru · Ссылка
Рубрики: Программирование · Теги: , , ,