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

共闘ことばRPG コトハマン

はじめに

皆さんはコトダマンというゲームを御存じでしょうか

コトダマンとはiOS/Android向けに配信されている共闘ことばRPGゲームのことです

ルールとしては空いた枠に文字を埋めていきコンボを組んで敵を倒す、という感じのものになっています

cotodaman.jpg

共闘ことばRPGコトダマン好評配信中!!

iOS
https://itunes.apple.com/jp/app/id1298368256
Android
https://play.google.com/store/apps/details?id=com.sega.Kotodaman

なにをするのか

さて、媚を売り切ったところで本題に入っていこうと思います

今回やっていくのはCOTOHA APIを使ってコトダマンのようなものを作ってみようというものです

(コトダマンのようなものといっても単語ごとに分けてコンボ数を数えるだけですが)

プログラム本体

コトハマン.py
cotohaman.py
# -*- coding: utf-8 -*-
import os
import urllib.request
import json

class CotohaApi:
    def __init__(self,client_id, client_secret, developer_api_base_url, access_token_publish_url):
        self.client_id = client_id
        self.client_secret = client_secret
        self.developer_api_base_url = developer_api_base_url
        self.access_token_publish_url = access_token_publish_url
        self.getAccessToken()

    def getAccessToken(self):
        url = self.access_token_publish_url
        headers={
            "Content-Type": "application/json;charset=UTF-8"
        }
        data = {
            "grantType": "client_credentials",
            "clientId": self.client_id,
            "clientSecret": self.client_secret
        }
        data = json.dumps(data).encode()
        req = urllib.request.Request(url, data, headers)
        res = urllib.request.urlopen(req)
        res_body = res.read()
        res_body = json.loads(res_body)
        self.access_token = res_body["access_token"]
    def callCotohaApiCommon(self, url, data):
        headers= {
            "Authorization": "Bearer " + self.access_token,
            "Content-type":"application/json;charset=UTF-8",
        }
        data = json.dumps(data).encode()
        req = urllib.request.Request(url, data, headers)

        CONNECTION_RETRY_COUNT = 2

        for counter in range(1, CONNECTION_RETRY_COUNT + 1):
            try:

                res = urllib.request.urlopen(req)
                break
            except urllib.request.HTTPError as e:
                if e.code == 401:
                    print("Please retry.")
                    self.access_token = self.getAccessToken()
                    headers["Authorization"] = "Bearer " + self.access_token
                    req = urllib.request.Request(url, data, headers)
                else:
                    print ("<Error> " + e.reason)
                    return ""
            except Exception as e:
                print(e)
                return ""

        res_body = res.read()    
        res_body = json.loads(res_body)
        return res_body["result"][0]["tokens"]

    def cotodama(self,coto):
        url = self.developer_api_base_url + "nlp/v1/parse"
        data = {
            "sentence": coto
        }
        coto = self.callCotohaApiCommon(url, data)
        if len(coto) == 1 and coto[0]["pos"] == "名詞":
            return coto
        return ""

    def cut(self):
        word_lis = []
        result_lis = []
        coto = input("文字を入力してください(7文字)")
        for i in range(0,6,1):
            for j in range(7,0,-1):
                if i+1 == j: break
                word_lis.append(coto[i:j])
        for tex in word_lis:
            if tex[0] == "ん":
                continue
            result_lis.append(self.cotodama(tex))
        result_lis = list(filter(lambda a: a!="",result_lis))
        return result_lis

if __name__ == "__main__":
    f = open('token.txt')
    lines = f.readlines()  
    for i in range(len(lines)):
        lines[i] = lines[i].replace("\n",'')
    inst = CotohaApi(lines[0], lines[1], lines[2], lines[3])
    result = inst.cut()
    for res in result:
        print(res[0]["lemma"])
    print("{}COMBO!".format(len(result)))

少しだけ解説

序盤のAPI設定and呼び出し部分は
↓この記事か公式リファレンスを読んでください
「メントスと囲碁の思い出」をCOTOHAさんに要約してもらった結果。COTOHA最速チュートリアル付き

このテンプレートに与えるデータを加工する部分の解説をします

七文字のひらがなを入力として受け取り、左から長い順に入力を分割してリストに格納しています

その後分割した単語ごとにAPIに投げていくのですが、"ん"が単語の最初にいるとなぜか名詞判定されてしまうので取り除いています

そして帰ってきた結果が分割されず、単語のみでかつ名詞であった場合に結果のリストに格納しています

最後に、それを順に出力して終了です

結果

入力>>さいかくあいま
才覚
さいか

いかくあ
威嚇
いか
くあいま
くあい
くあ
合間
あい

12COMBO!

適当に画像検索から見つけてきた単語を入れましたが、人間には理解できない単語も出てきてしまっていますね

まとめ

今回作ったものの問題点としては
・複数回APIコールしなければいけない
・ちょっと人間には理解できない単語が出てきてしまう

修正案があればコメントいただけると助かります

さいごに

この記事は【Qiita x COTOHA APIプレゼント企画】に参加しています

いいねください

参考ページ

COTOHA API
公式リファレンス
「メントスと囲碁の思い出」をCOTOHAさんに要約してもらった結果。COTOHA最速チュートリアル付き
自然言語処理を簡単に扱えると噂のCOTOHA APIをPythonで使ってみた

Why not register and get more from Qiita?
  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
No 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
ユーザーは見つかりませんでした