ローカルでも動くSlackBot管理ツールができるまで 〜 Bot編 〜

Share on Facebook
Pocket
LINEで送る
Bookmark this on Google Bookmarks

ローカルでも動くSlackBot管理ツールができるまで 〜 WebUI編 2 〜の続き。
はてブからデータを取得し、Slackに投稿するBotを作成。

 

 

構成

slack_botter

 

githubから必要なファイルをダウンロード

まずこれまでに作った仮想環境に入り、slack_botterディレクトリ配下にbotディレクトリを作成する。

$ cd /Users/umentu/Documents/slack_botter
$ source ./bin/activate
(slack_botter)$ mkdir bot
(slack_botter)$ cd bot

gitからhatebubotをダウンロードする。

hatebu_bot.pyのみ必要なため、hatebu_bot.pyをbotディレクトリに入れる。
次にrequirements.txtの中身をpipでインストールしたらhatebubotディレクトリは削除する。

(slack_botter)$ git clone https://github.com/umentu/hatebubot
(slack_botter)$ mv hatebubot/hatebu_bot.py ./
(slack_botter)$ pip install -r hatebubot/requirements.txt
(slack_botter)$ rm -rf ./hatebubot

gitからslackbotをダウンロードする。
slack_bot.pyのみ必要なため、slack_bot.pyをbotディレクトリに入れる。

次にrequirements.txtの中身をpipでインストールしたらslackbotディレクトリは削除する。
(pipでのインストールに関しては、WebUI編2で行っている場合は同じパッケージのため必要ない。)

(slack_botter)$ git clone https://github.com/umentu/slackbot
(slack_botter)$ mv slackbot/slack_bot.py ./ 
(slack_botter)$ pip install -r slackbox/requirements.txt
(slack_botter)$ rm -rf ./slackbot

 

botディレクトリに bot.py を作成

botディレクトリ配下にBotの本体となるbot.pyを作成する。
Web編1 で作成したDB(sqlite3)のhatebu_listテーブルを読み込み、その情報を基にはてブから情報を取得してくる。
hatebu_listテーブルのlast_postよりも新しい情報である場合はSlackに投稿し、last_postに新しい日付を更新する。

# -*- coding: utf-8 -*-

import os
import sys
import sqlite3
import datetime 

# ライブラリのパスを追加
sys.path.append( os.path.dirname(__file__) )

from hatebu_bot import Hatebu
from slack_bot import Slack

def judge_new_date(current, new):
    """
    はてブから取得した日付がデータベースのlast_postより新しい日付かを判定する
    """

    current_datetime = datetime.datetime.strptime(current, "%Y-%m-%dT%H:%M:%S+09:00")
    new_datetime = datetime.datetime.strptime(new, "%Y-%m-%dT%H:%M:%S+09:00")

    return current_datetime < new_datetime


if __name__ == "__main__":

    hatebu = Hatebu()
    slack = Slack("************slack apiのコード**********")

    # データベースアクセス
    path = os.path.dirname(os.path.dirname( os.path.abspath(__file__))) + "/db"
    connect = sqlite3.connect(path + "/hatena.db")
    cursor = connect.cursor()

    sql = """
    SELECT * FROM hatebu_list
    """

    con = cursor.execute(sql)
    for row in con:

        (idx, channel, word, bookmark_count, last_post) = row
        xml = hatebu.get_rss_data(word, bookmark_count)
        parse_data = hatebu.parse_xml_data(xml)

        for data in parse_data:
            
            # last_post より はてブから取得した日付が 新しい場合はslackに投稿する。
            if judge_new_date(last_post, data["date"]):

                last_post = data["date"]
                message = """
                ブックマーク数: {0}
                タイトル: {1}
                URL: {2} 
                """.format(data["bookmark_count"], data["title"], data["url"])
                
                # slackに投稿する。
                slack.post_message_to_channel(channel, message)

        # データベースのlast_postを更新する
        sql = """
        UPDATE hatebu_list SET last_post = ? WHERE id = ?
        """
        cursor.execute(sql, (last_post, idx))
    
    # データベースの変更を更新
    connect.commit()
    # データベースを閉じる
    connect.close()

(slack_botter)$ python bot.py 

を実行すると、指定したSlackのチャンネルに投稿される。
初回ははてブから取得された20件全て投稿されるため、投稿先のチャンネルには注意。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です