Help us understand the problem. What is going on with this article?

TwitterBot『超DTM速報』作成しました。

More than 3 years have passed since last update.

超DTM速報

こちらです。
超DTM速報

あらまし

DTMの情報をすごくまとめられるBotを作りたかった。
当初は複数サイトから得られたRSSのデータを形態素解析して、マルコフ連鎖で文章を作成し、斜め読み出来るBotを作ろうと思ってました。
RSSの情報を形態素解析し、マルコフ連鎖で作成した文章をツイートする(python3)
しかし、下記のような問題が判明。

1.ニュースサイトの更新が頻繁ではない。
2.事実以外の主観的な情報が多く含まれる(と思う)

実用性を考えて、複数サイトのRSS最新記事を取得し、つぶやくBotにしました。

コード

SuperDTMBot.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import feedparser
import time
import csv
import threading
import signal
from twython import Twython, TwythonError

CONSUMER_KEY = "許しません!"
CONSUMER_SECRET = "来たれ、生誕の雷!"
ACCESS_KEY = "怒れ、創世の大地!"
ACCESS_SECRET = "リバースクルセイダー!!"
api = Twython(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_SECRET)
archives = {}
urlText = "rssUrl.txt"
archiveText = "rssArchive.txt"


def resist_url():
    urls = []
    f = open(urlText, "r")
    for row in f:
        if row[0] == "#":
            continue
        urls.append(row)

    return urls


def monitor():
    urls = resist_url()
    read_archive()

    for url in urls:
        feed = feedparser.parse(url)
        if feed.feed.title not in archives:
            archives[feed.feed.title] = ""

    while True:
        for url in urls:
            feed = feedparser.parse(url)
            if (archives[feed.feed.title] == feed["entries"][0].title):
                continue
            archives[feed.feed.title] = feed["entries"][0].title
            sentence = feed["entries"][0].title
            sentence += "\n" + " ≪" + feed.feed.title + "≫"
            sentence += "\n" + feed["entries"][0].link
            tweet(sentence)
        time.sleep(300)


def tweet(sentence):
    try:
        api.update_status(status=sentence)
    except TwythonError as e:
        print(e)


def write_archive(signum, frame):
    try:
        f = open(archiveText, 'w')
        for key, value in archives.items():
            f.write(key + "," + value + "\n")
    finally:
        f.close()


def read_archive():
    try:
        f = open(archiveText, 'r')
        reader = csv.reader(f)
        for row in reader:
            archives[row[0]] = row[1]

    finally:
        f.close()


def re_follow():
    while True:
        try:
            followers = api.get_followers_list()
            for follower in followers['users']:
                if not follower['following']:
                    api.create_friendship(screen_name=follower['screen_name'], follow="true")
        except TwythonError as e:
            print(e)
        time.sleep(3600)

if __name__ == "__main__":
    re_follow_thread = threading.Thread(target=re_follow, name="re_follow_thread")
    re_follow_thread.setDaemon(True)
    re_follow_thread.start()
    signal.signal(signal.SIGINT, write_archive)
    monitor()

機能

・10分毎にRSSの更新有無を確認し、更新があった場合、最新記事をつぶやく。
・1時間毎にフォロワーを見て、フォローしてない場合はリフォローする。

改善点

1.強制終了に耐えられるような構造にする。
2.機能を拡張する(とは言っても何をしたらよいかは特に思いついてない)
3.フォロワー数を増やす(血眼)
4.DTM関連のフォロワーを自動取得する機能をつける。

感想

URLをテキストファイルで管理してるので、URL入れ替えればDTM以外にも利用可能です。
これをターミナルにDTM以外のことを呟いても良さそうですね。普通のニュースとかアニメ速報みたいな。
突貫で作ったので滅茶苦茶エラーに甘いです。
ラズパイ上で動かしてますが、いつ強制終了するかが非常に怖い……。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away