BETA

年末ジャンボの季節なので宝くじのシミュレーションbotを作った

投稿日:2018-12-16
最終更新:2018-12-21

はじめに

はじめまして。私は情報系を専攻している大学生です。(Twitterはこちら
iOSアプリ開発の勉強などを最近しているのですが、Pythonも勉強してみようと思いそのついでにTwitterのAPIを使ってbotを作ってみました。

完成したものがこちら

宝くじシミュレーションbot
1日1回、「宝くじを10枚買ったら確率的にこんな感じ」というシミュレーションをします。2018年末ジャンボの確率に則って、1等7等、もしくははずれのどれかが毎回ツイートされます。

完成までの道のり

コード自体はとても簡単なのですが、色々初めてのことが多く、細かいところでつまづきました。

Twitter APIの申請って…

めんどくさいですね。

開発するアプリの詳細などについて3回ほど英語で書かされました。

2回目以降はTwitterからのメールに返信する形でした。3回目にようやく下のように質問文も詳しくなり「最初からそう言ってくれよ」と思いながら説明を書きました。

Herokuでデプロイしたのにツイートされない!

今回はAPSchedulerというライブラリを使用することで、定期的なツイートを実現しました。

Clock.pyというファイルに以下のようなコードを書きました。

from apscheduler.schedulers.blocking import BlockingScheduler  
import tweet  

twische = BlockingScheduler()  


@twische.scheduled_job('interval', hours=24)  
def timed_job():  
    tweet.put_tweet()  

if __name__ == '__main__':  
    twische.start()  

こうした場合デプロイした後に

heroku ps:scale clock=1  

というコマンドを実行しないとダメなんだということに気づかず、小一時間浪費しました。

#ソースコード紹介
初Pythonで見苦しいコードかもしれませんが、僭越ながら紹介します。
「ここは普通こうするよ」のように感じる点がありましたらご指摘下さい。

tweet.py

以下が確率から結果を求め実際にツイートする部分です。

import os  
import numpy as np  
import twitter  

count = 0  
income = 0  
spending = 0  


def put_tweet():  
    # Twitter APIs information  
    auth = twitter.OAuth(  
        consumer_key=os.environ['CONSUMER_KEY'],  
        consumer_secret=os.environ['CONSUMER_SECRET'],  
        token=os.environ['TOKEN'],  
        token_secret=os.environ['TOKEN_SECRET']  

    )  

    t = twitter.Twitter(auth=auth)  

    status = ''  
    global count  
    global income  
    global spending  

    count += 1  
    spending += 3000  

    status += str(count) + '日目' + '\n\n'  

    def calc_probability():  
        result = np.random.choice(['1等 7億円',  
                                   '1等前後賞 1億5000万円',  
                                   '1等組違い賞 10万円',  
                                   '2等 1000万円',  
                                   '3等 100万円',  
                                   '4等 10万円',  
                                   '5等 1万円',  
                                   '6等 3千円',  
                                   '7等 300円',  
                                   'はずれ'],  
                                  p=[0.00000005,  
                                     0.0000001,  
                                     0.00001,  
                                     0.00000015,  
                                     0.000005,  
                                     0.00002,  
                                     0.001,  
                                     0.01,  
                                     0.1,  
                                     0.8889647])  

        return result  

    for _ in range(10):  
        lottery_result = calc_probability()  
        status += lottery_result + '\n'  

        if lottery_result == '1等 7億円':  
            income += 700000000  
        elif lottery_result == '1等前後賞 1億5000万円':  
            income += 150000000  
        elif lottery_result == '1等組違い賞 10万円':  
            income += 100000  
        elif lottery_result == '2等 1000万円':  
            income += 10000000  
        elif lottery_result == '3等 100万円':  
            income += 1000000  
        elif lottery_result == '4等 10万円':  
            income += 100000  
        elif lottery_result == '5等 1万円':  
            income += 10000  
        elif lottery_result == '6等 3千円':  
            income += 3000  
        elif lottery_result == '7等 300円':  
            income += 300  
        else:  
            income += 0  

    status += '\n収入合計 ' + str(income) + '円\n' + '支出合計 ' + str(spending) + '円'  

    t.statuses.update(status=status)  

Pythonにはswitch文がなく、if…elif…elif……のようにif文が延々と続く形にしかできないんですかね?

#おわりに
初めてPythonでアプリケーションを作りましたが、全体的に非常に作りやすかったです。
Twitterのbotってまだまだ面白いこと出来そうですし、アイデアが浮かんだらまたチャレンジしたいと思います。

参考にさせていただいた記事

全部無料で、自動ツイートするbotを作る
簡単!Herokuで動くTwitter botをPythonで実装する

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@ynskskiの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう