TomoProgの技術書

底辺プログラマーが達人プログラマーになるまで

Pythonで百人一首ボットを作ってみる!! 最終回

皆さん
こんにちは、こんばんは
TomoProgです。

前回のボット作ってみるからまた日が空いてしまいましたが、
Python百人一首ボットを作ってみるシリーズもこれで最後です。

パート2までで百人一首の画像と歌を投稿する機能を実装しました。
今回は投稿した百人一首の現代語訳を投稿する機能を実装してみます。

パート1、パート2を見ていない方はそちらからどうぞ!!
tomoprog.hatenablog.com
tomoprog.hatenablog.com

それでは最終回頑張っていきます!!

現代語訳データを収集する

現代語訳は以下のサイトの現代語訳を拝借しました。
www.hyakunin.stardust31.com

収集する方法はパート2でもやりましたが、

  1. 上記のサイトを全コピーする
  2. テキストエディタで不要な行を削除する
  3. 表計算ソフトに貼り付ける
  4. CSVファイルとして保存する

この方法でいきます!!

表計算ソフトに貼り付けるとこんな感じです。
f:id:TomoProg:20160303213026j:plain

左から

  • 歌人
  • 歌人のふりがな
  • 上の句
  • 下の句
  • 現代語訳

の順です。

これで、投稿する現代語訳の収集は完了しました!!

現代語訳を投稿するコードを実装する

さて、現代語訳の収集が終わったので、現代語訳を投稿するコードを追記します。

def karuta_tweet(karuta_info):
    """
        Content:
            つぶやく
    """

    global app
    global app_up

    #------------------------------
    # かるた画像つぶやき
    #------------------------------
    # 画像ファイル読み込み
    try:
        file_path = os.path.join("./karuta_img/", karuta_info["img"])
        with open(file_path, "rb") as image_f:
            image_data = image_f.read()
    except Exception as e:
        logger.write("画像ファイル[{filename}]の読み込みに失敗しました".format(filename=filepath))
        logger.write(str(e))
        return False

    # つぶやきメッセージ作成
    tweet_msg = (
        karuta_info["first_part"] + "\n" +
        karuta_info["last_part"] + "\n" +
        karuta_info["name"])

    # つぶやく
    try:
        id_img = app_up.media.upload(media=image_data)["media_id_string"]
        app.statuses.update(status=tweet_msg, media_ids=id_img)
    except Exception as e:
        logger.write("画像のTweetに失敗しました。")
        logger.write(str(e))
        return False

    time.sleep(30)

    #------------------------------
    # 現代語訳つぶやき
    #------------------------------
    tweet_msg = karuta_info["translate"]
    try:
        app.statuses.update(status=tweet_msg)
    except Exception as e:
        logger.write("現代語訳のTweetに失敗しました。")
        logger.write(str(e))
        return False

    return True

百人一首ボットプログラムのTwitterに投稿する関数を抜き取りました。
歌、歌人、かるた画像の投稿をしたあとに、time.sleep(30)で30秒スリープ後、日本語訳を投稿するようになっています。

少し雑ですが、例外処理を入れ、何かしらの例外があった際には自作のロガープログラムでログをファイルに出力するようにしています。

ボットを起動しておくサーバを借りる

今までは自分が使っているPCの仮想環境から投稿していました。
しかし、一日中投稿しようとすると、PCをずっと起動していないといけないのです。

スリープも出来ないのはきついと思ったので、さくらインターネットVPSを借りました。
vps.sakura.ad.jp

ちなみに月額972円のHDD100Gのプランです。
今回はそこから起動してみます。

VPSサーバの設定

さくらのVPSサーバは標準だとOSがCentOS6ですが、CentOSをほぼ触ったことがないので、Ubuntu Server 14.04を使用することにしました。

とりあえず、Pythonを使用できる環境を整えます。
Ubuntu14.04では標準でPython3.4.3がインストールされているので、Python自体のインストールは不要です。

Pythonのパッケージ管理システムであるpipを使えるように以下のコマンドを入力します。

$ sudo apt-get install pip3

pip3ではなくpipでインストールすると、Python2系のpipがインストールされるので、注意が必要です。

pipがインストール出来たら、Pythonの仮想環境を構築するためにvirtualenvをインストールします。

$ sudo pip3 install virtualenv

virtualenvはPythonの仮想環境を作成する便利なモジュールです。
virtualenvを使えば作成した仮想環境ごとにPythonのバージョンやインストールするモジュールを分けることができます。

さて、あとは仮想環境にtwitterモジュールをインストールします。

# 仮想環境にて
$ pip install twitter

これでサーバの環境構築は終了です。

サーバから起動する

さて、環境が整ったので、サーバから起動してみます。
仮想環境にて以下のコマンドを入力します。

# 仮想環境にて
$ python karuta_bot.py &

この"&"記号をつけることで、バックグラウンドでプログラムを起動出来ます。

起動して約一日ほど放置してみた結果がこんな感じです。
twitter.com

画像につづいて現代語訳を投稿することが出来ました!!

今日の成果

  • 現代語訳を投稿することが出来た!!
  • サーバから起動することで、一日中起動しておくことに成功した!!
  • 百人一首ボットが完成!!

やっと百人一首ボットが完成しました!!
Twitterボットは簡単に作成するサービスが既にありますが、自分で1から作ってみるというのが新鮮で面白かったです。
この記事を見て作りたくなったと思った人は是非自分で作ってみてください!!

ここまで読んでいただきありがとうございました。
それではまた。

TomoProg

GitHub
TomoProg (TomoProg) · GitHub

Twitter
TomoProg (@tomoprog_xxx) | Twitter