Slack에서 Zaif에서 구입할 수 있도록하는 방법 - (첫 번째)

올해 3월부터 zaif를 사용하여 암호화폐 거래를 시작했지만, bot 거래를 하고 싶다고 생각해 조금씩 진행해 나가고 싶습니다.

목표
- 봇으로 자동 거래
- 중재 대형 격차 거래

그럼 이번에 갔던 일이지만,
"Slack을 이용하여 쉽게 구입, 가격 확인을 할 수 있도록 했습니다"

필요한 것


  • python3 시스템
  • pip install slackbot - 참고 링크 >> https://github.com/lins05/slackbot
  • 구입까지 하고 싶은 사람은 API KEY 발행 참고 링크 >> https://zaif.jp/api_keys
  • SlackAPI와 이용하기 위한 팀

    전제 조건



    slack에서 봇에 대하여
    가격 xem
    price btc
    price all
    등으로 보내면 현재 가격표가 반환되도록합니다.

    달성 후 이미지





    작업 절차


  • 적절한 프로젝트 폴더 만들기
  • 가격표를 잡을 수 있도록 (이번은 여기까지)
  • 구매 가능

  • 1. 적절한 프로젝트 폴더 만들기



    여기서 가는 것은 slackbot lib를 이용하는데 필요한 프로젝트 구성을 설명합니다.
    - 프로젝트 폴더
    -- -- run.py (실제로 실행할 수있는 앱 - 특히 변경 없음)
    - - slackbot_settings.py (슬랙 봇 구성 파일)
    - - 플러그인
    - - - price_bot.py (가격표를 취하는 서비스)
    - - - trade_bot.py (거래를 실제로 만드는 서비스)

    run.py
    #run.py
    
    from slackbot.bot import Bot
    def main():
        bot = Bot()
        bot.run()
    
    if __name__ == "__main__":
        print('slackbot start')
        main()
    

    slackbot_settings.py
    #slackbot_settings.py
    
    # slack bot API
    API_TOKEN = "xoxb-<YOUR API TOKEN HERE>"
    
    # ボットがキーワードを理解できなかった場合に返すデフォルトメッセージ
    DEFAULT_REPLY = "ゴメン!理解ができなかったよ。(/ω・\)ナキッ"
    
    # pluginsフォルダへパスを通すことによってpluginsフォルダ内に入っている全てのサービスを運用することが出来るようになる
    PLUGINS = ['plugins']
    

    위의 설정을 먼저 했으면 plugin 폴더 안에 우선 서비스 파일을 만들어 보자!!

    2 . 가격표를 잡을 수 있도록(이번은 여기까지)



    이번에는 현재 가격을 알 수 있도록 하기 위한 서비스를 만들어 본다.

    price_bot.py
    #price_bot.py
    
    import re, requests, json
    from slackbot.bot import respond_to # Slackで送られてきたキーワードに対して返答を返すため
    

    필요한 글로벌 변수 설정

    price_bot.py
    # 今回利用する現物公開APIの元URL
    API_URL = "https://api.zaif.jp/api/1/"
    # サポートされている通貨リスト 全て日本円(fiat)との価格差を想定
    SUPPORTED_COIN = ["zaif","sjcx","btc","ncxc","cicc","xcp","xem","pepecash","jpyz","bitcrystals","bch","eth","fscc","mona"]
    # 私事ではあるが、メインで取引している通貨
    MAIN_SUPPORTED_COIN = ["xem","zaif","btc","bch","mona","pepecash","eth"]
    

    price_bot.py
    @respond_to(r'^price\s+\S.*')
    def price_coin_func(message):
        slack_message = ""
        text = message.body['text'].lower() # 大文字を全て小文字に
        # 前提条件として送られてくるキーワードは2つ
        # price coin名
        method, coin_name = text.split(" ") 
        if coin_name == 'all':
            # 最初に決めている私のメイン通貨のみの確認この場合は現在の価格のみを取得する
            for main_coin in MAIN_SUPPORTED_COIN:
                data = get_last_price_func(main_coin + "_jpy").json()
                slack_message += main_coin + " - 現在の価格 : " + str(data['last_price']) + "\n"
        elif coin_name not in SUPPORTED_COIN:
            # サポート外の通貨に対するエラーメッセージ メッセージを直打ちにしたのはあまり意味はない
            slack_message = "対象の通貨 : " + coin_name + " は、サポートされていません。\n サポート対象通貨は:\n"
            slack_message += "\n".join(SUPPORTED_COIN)
        else:
            # 指定通貨の過去24時間の値動きなども併せて表示
            data = get_trade_detail_func(coin_name + "_jpy").json()
            slack_message = coin_name + 'の価格 : \n 買気配 : ' + str(data['bid']) + '\n 売気配 : ' + str(data['ask']) + '\n最高額 : ' + str(data['high']) + '\n最低額 : ' + str(data['low'])
        message.reply(slack_message)
    

    price_bot.py
    # 指定通貨が存在した場合の詳細ticker情報を取る場合
    def get_trade_detail_func(coin_type):
        request_data = requests.get(
            API_URL + 'ticker/' + coin_type
            , headers = {
            })
        return request_data
    

    price_bot.py
    # 全てのメイン通貨現在価格を取得したい場合
    def get_last_price_func(coin_type):
        request_data = requests.get(
            API_URL + 'last_price/' + coin_type
            , headers = {
            })
        return request_data
    

    여기까지 해 봐, 「아, 이것이라면 하나로 정리할 수 있어!」
    라는 것을 깨닫는다. . .

    조금 돌아와서

    price_bot.py
    #data = get_last_price_func(main_coin + "_jpy").json()
    data = get_price_func(main_coin + "_jpy", 'last_price/').json()
    *
    **
    ****
    #data = get_trade_detail_func(coin_name + "_jpy").json()
    data = get_price_func(coin_name + "_jpy", 'ticker/').json()
    
    # 一つにまとめてあげる
    def get_price_func(currency_pair, action):
        request_data = requests.get(
            API_URL + action + currency_pair
            , headers = {
            })
        return request_data
    
    

    그리고 변경!
    이쪽이 깔끔했습니다!
    라고 할까 이것이라면 기본적으로 현금 거래의 API를 두드리고 싶을 때는 곧바로 호출할 수 있게 되었어요!

    이상으로 종료!



    볼륨이 커지고 있기 때문에 오늘은 지금까지입니다!



    다음에는 실제로 거래를 어떻게 할 것인가를 써 가고 싶습니다.

    Zaif에 관심이 있는 분은 이쪽으로부터 부디! (아피입니다만!)
    Zaif 링크

    향후 예정



  • - 이번에는 Slack을 사용하여 가격표를 쉽게 얻을 수 있습니다

  • (다음 번) Slack을 사용하여 쉽게 구입할 수 있습니다
  • python 비공식 API로 전환
  • AWS에 설치하여 언제든지 사용할 수 있도록합니다.
  • websocket에 의한 stream에 의한 데이터 취득을 행한다
  • 아비트라가 할 수 있도록 다른 거래소간의 가격 차이를 취득 계산하고 거래를 할 수 있도록 한다
  • 봇에 의한 자동 거래 (FX 거래 방법 참조)
  • 좋은 웹페이지 즐겨찾기