OPEN API - fingeredman/teanaps GitHub Wiki

TEANAPS OPEN API

ACCESS TOKEN ๋ฐœ๊ธ‰

  • ๋ฌด๋ถ„๋ณ„ํ•œ API ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ACCESS TOKEN ๋ฐœ๊ธ‰์„ ํ†ตํ•ด API ์ ‘๊ทผ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • API ํ˜ธ์ถœ์‹œ ๊ด€๋ฆฌ์ž ๋ฌธ์˜๋ฅผ ํ†ตํ•ด ๋ฐœ๊ธ‰๋ฐ›์€ ACCESS TOKEN์„ BODY์— ํฌํ•จํ•ด ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ACCESS TOKEN ๋ฐœ๊ธ‰์€ ๊ด€๋ฆฌ์ž ์ด๋ฉ”์ผ([email protected])๋กœ ์•„๋ž˜ ๋‚ด์šฉ์„ ํฌํ•จํ•ด ๋ฌธ์˜ ๋ฐ”๋ž๋‹ˆ๋‹ค.

    • ์ด๋ฆ„ : ํ™๊ธธ๋™

    • ์†Œ์† : ํšŒ์‚ฌ/๋Œ€ํ•™๊ต/์—ฐ๊ตฌ์†Œ/๊ทธ๋ฃน ๋“ฑ

    • ์‚ฌ์šฉ๋ชฉ์  : "~ ๋ถ„์„/๊ตฌ์ถ• ํ”„๋กœ์ ํŠธ" ์ˆ˜ํ–‰์‹œ ๊ฐ์„ฑ๋ถ„์„ ํ™œ์šฉ ๋“ฑ

    • ๊ฐœ์ธ์ •๋ณด์ˆ˜์ง‘ ๋ฐ ์ •๋ณดํ™œ์šฉ ๋™์˜์—ฌ๋ถ€ : Y/N

      Notes :

      • TEANAPS OPEN API์˜ ACCESS TOKEN์€ TEANAPS Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๊ณผ๋Š” ๋ฌด๊ด€ํ•ฉ๋‹ˆ๋‹ค.
      • TEANAPS Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์Šน์ธ์—†์ด ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

TEANAPS OPEN API ๋ฆฌ์ŠคํŠธ

TEANAPS OPEN API๋Š” TEANAPS์—์„œ ์ง€์›ํ•˜๋Š” ํ…์ŠคํŠธ ๋ถ„์„ ๊ธฐ๋Šฅ์„ REST API๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  API๋Š” ๋น„๋กœ๊ทธ์ธ ๋ฐฉ์‹์˜ OPEN API๋กœ, ํ˜ธ์ถœ์‹œ ๊ด€๋ฆฌ์ž ๋ฌธ์˜๋ฅผ ํ†ตํ•ด ๋ฐœ๊ธ‰๋ฐ›์€ ACCESS TOKEN์„ BODY์— ํฌํ•จํ•ด ์ „์†กํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ ์š”์ฒญ URL : http://api.teanaps.com/

  • API ๋ฒ„์ „ : v1 (2019.7.12 ~)

    API ID ํ˜ธ์ถœ๋ฐฉ์‹ ์‘๋‹ตํ˜•์‹ ์—ญํ•  ์š”์ฒญ URL ํ‰๊ท ์‘๋‹ต์†๋„
    T01-01 HTTP (POST) JSON API ์‘๋‹ต์ฒดํฌ /alive 0.029s
    T02-01 HTTP (POST) JSON ํ˜•ํƒœ์†Œ๋ถ„์„ /nlp/pos 0.154s
    T02-02 HTTP (POST) JSON ๊ฐœ์ฒด๋ช…์ธ์‹ /nlp/ner 0.150s
    T03-01 HTTP (POST) JSON ๊ฐ์„ฑ๋ถ„์„ /text_analysis/sentiment 0.676s

    Notes :

    • ํ‰๊ท ์‘๋‹ต์†๋„๋Š” ๋ฌด์„  ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ API๋ฅผ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›๋Š”๋ฐ ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์˜๋ฏธํ•˜๋ฉฐ, ํ•ด๋‹น ์‹œํ—˜๊ฒฐ๊ณผ๋Š” 1,000ํšŒ ์—ฐ์† API์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์†๋„์˜ ํ‰๊ท ์ž…๋‹ˆ๋‹ค.

TEANAPS OPEN API References

[T01-01] API ์‘๋‹ต์ฒดํฌ

REST API ๋™์ž‘์—ฌ๋ถ€์™€ ACCESS TOKEN์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ (Request Parameter)

    ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„์ˆ˜ ์œ ํ˜• ์„ค๋ช… ์ƒ˜ํ”Œ
    access_token V str ACCESS TOKEN ODMFKGLDICK20190601132625
  • ์‘๋‹ต ํŒŒ๋ผ๋ฏธํ„ฐ (Response Parameter)

    ํŒŒ๋ผ๋ฏธํ„ฐ ์œ ํ˜• ์„ค๋ช… ์ƒ˜ํ”Œ
    code int ์‘๋‹ต์ฝ”๋“œ 200
    api_condition str API ์ƒํƒœ free
    access_token_info list ACCESS TOKEN ์ƒํƒœ
    ใ„ดcreated_at str ์ƒ์„ฑ์ผ์ž 2019-06-01
    ใ„ดexpiration_in str ์ƒ์„ฑ์ผ์ž 2019-09-06
  • ํ˜ธ์ถœ์˜ˆ์‹œ

    Python Code (Request):

    import requests
    
    URL = "http://api.teanaps.com"
    VERSION = "/v1"
    URL_PATTERN = "/alive"
    data = {
        "access_token": "ODMFKGLDICK20190601132625"
    } 
    
    url = URL + VERSION + URL_PATTERN
    r = requests.post(url, data=data)
    j = r.json()
    print(j)
    

    Output (Response):

    {
      'code': 200,
      'api_condition': 'free',
      'access_token_info': {
        'access_token': 'ODMFKGLDICK20190601132625',
        'created_at': '2019-06-01',
        'expiration_in': '2019-09-06'
      }
    }
    

[T02-01] ํ˜•ํƒœ์†Œ๋ถ„์„

๋ฌธ์žฅ์„ ํ˜•ํƒœ์†Œ๋ถ„์„ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ (Request Parameter)

    ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„์ˆ˜ ์œ ํ˜• ์„ค๋ช… ์ƒ˜ํ”Œ
    access_token V str ACCESS TOKEN ODMFKGLDICK20190601132625
    sentence V str ํ•œ๊ตญ์–ด ๋˜๋Š” ์˜์–ด๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์žฅ. ์ตœ๋Œ€ 128์ž. ์†ํฅ๋ฏผ์€ 2015๋…„ ๋ ˆ๋ฒ„์ฟ ์  ์—์„œ ํ† ํŠธ๋„˜ ํ•ซ์Šคํผ๋กœ ์ด์ ํ–ˆ๋‹ค.
  • ์‘๋‹ต ํŒŒ๋ผ๋ฏธํ„ฐ (Response Parameter)

    ํŒŒ๋ผ๋ฏธํ„ฐ ์œ ํ˜• ์„ค๋ช… ์ƒ˜ํ”Œ
    code int ์‘๋‹ต์ฝ”๋“œ 200
    sentence str ์š”์ฒญ๋ฌธ์žฅ ์†ํฅ๋ฏผ์€ 2015๋…„ ๋ ˆ๋ฒ„์ฟ ์  ์—์„œ ํ† ํŠธ๋„˜ ํ•ซ์Šคํผ๋กœ ์ด์ ํ–ˆ๋‹ค.
    pos_list list ํ˜•ํƒœ์†Œ๋ถ„์„ ๊ฒฐ๊ณผ
    ใ„ดpos str ํ˜•ํƒœ์†Œ ์†ํฅ๋ฏผ
    ใ„ดpos_tag str ํ’ˆ์‚ฌ ํƒœ๊ทธ NNP
    ใ„ดner_tag str ๊ฐœ์ฒด๋ช… ํƒœ๊ทธ PS
    ใ„ดlocation list ํ˜•ํƒœ์†Œ ์œ„์น˜ [0, 3]
  • ํ˜ธ์ถœ์˜ˆ์‹œ

    Python Code (Request):

    import requests
    
    URL = "http://api.teanaps.com"
    VERSION = "/v1"
    URL_PATTERN = "/nlp/pos"
    data = {
        "access_token": "ODMFKGLDICK20190601132625",
        "sentence": "์†ํฅ๋ฏผ์€ 2015๋…„ ๋ ˆ๋ฒ„์ฟ ์  ์—์„œ ํ† ํŠธ๋„˜ ํ•ซ์Šคํผ๋กœ ์ด์ ํ–ˆ๋‹ค."
    } 
    
    url = URL + VERSION + URL_PATTERN
    r = requests.post(url, data=data)
    j = r.json()
    print(j)
    

    Output (Response):

    {
      'code': 200,
      'sentence': '์†ํฅ๋ฏผ์€ 2015๋…„ ๋ ˆ๋ฒ„์ฟ ์  ์—์„œ ํ† ํŠธ๋„˜ ํ•ซ์Šคํผ๋กœ ์ด์ ํ–ˆ๋‹ค.',
      'pos_list': [
        {
          'pos': '์†ํฅ๋ฏผ',
          'pos_tag': 'NNP',
          'ner_tag': 'PS',
          'location': [0, 3]
        },
        {
          'pos': '์€',
          'pos_tag': 'JX',
          'ner_tag': 'UN',
          'location': [3, 4]
        },
        ...
        {
          'pos': '๋‹ค',
          'pos_tag': 'EF',
          'ner_tag': 'UN',
          'location': [30, 31]
        },
        {
          'pos': '.',
          'pos_tag': 'SW',
          'ner_tag': 'UN',
          'location': [31, 32]
        }
      ]
    }
    

    Notes :

    • TEANAPS ํ˜•ํƒœ์†Œ๋ถ„์„ API์˜ ํ’ˆ์‚ฌํƒœ๊ทธ๋Š” ์„ธ์ข…๋ง๋ญ‰์น˜ ํ’ˆ์‚ฌํƒœ๊ทธ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ’ˆ์‚ฌํƒœ๊ทธํ‘œ๋Š” Appendix๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.
    • TEANAPS ํ˜•ํƒœ์†Œ๋ถ„์„ API์˜ ์„ฑ๋Šฅ ๋ฐ ํŠน์ง•์€ ์„ฑ๋Šฅํ‰๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

[T02-02] ๊ฐœ์ฒด๋ช…์ธ์‹

๋ฌธ์žฅ์—์„œ ๊ฐœ์ฒด๋ช…์„ ์ธ์‹ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ (Request Parameter)

    ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„์ˆ˜ ์œ ํ˜• ์„ค๋ช… ์ƒ˜ํ”Œ
    access_token V str ACCESS TOKEN ODMFKGLDICK20190601132625
    sentence V str ํ•œ๊ตญ์–ด ๋˜๋Š” ์˜์–ด๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์žฅ. ์ตœ๋Œ€ 128์ž. ์†ํฅ๋ฏผ์€ 2015๋…„ ๋ ˆ๋ฒ„์ฟ ์  ์—์„œ ํ† ํŠธ๋„˜ ํ•ซ์Šคํผ๋กœ ์ด์ ํ–ˆ๋‹ค.
  • ์‘๋‹ต ํŒŒ๋ผ๋ฏธํ„ฐ (Response Parameter)

    ํŒŒ๋ผ๋ฏธํ„ฐ ์œ ํ˜• ์„ค๋ช… ์ƒ˜ํ”Œ
    code int ์‘๋‹ต์ฝ”๋“œ 200
    sentence str ์š”์ฒญ๋ฌธ์žฅ ์†ํฅ๋ฏผ์€ 2015๋…„ ๋ ˆ๋ฒ„์ฟ ์  ์—์„œ ํ† ํŠธ๋„˜ ํ•ซ์Šคํผ๋กœ ์ด์ ํ–ˆ๋‹ค.
    ner_list list ํ˜•ํƒœ์†Œ๋ถ„์„ ๊ฒฐ๊ณผ
    ใ„ดentity str ๊ฐœ์ฒด๋ช… ์†ํฅ๋ฏผ
    ใ„ดner_tag str ๊ฐœ์ฒด๋ช… ํƒœ๊ทธ PS
    ใ„ดlocation list ๊ฐœ์ฒด๋ช… ์œ„์น˜ [0, 3]
  • ํ˜ธ์ถœ์˜ˆ์‹œ

    Python Code (Request):

    import requests
    
    URL = "http://api.teanaps.com"
    VERSION = "/v1"
    URL_PATTERN = "/nlp/ner"
    data = {
        "access_token": "ODMFKGLDICK20190601132625",
        "sentence": "์†ํฅ๋ฏผ์€ 2015๋…„ ๋ ˆ๋ฒ„์ฟ ์  ์—์„œ ํ† ํŠธ๋„˜ ํ•ซ์Šคํผ๋กœ ์ด์ ํ–ˆ๋‹ค."
    } 
    
    url = URL + VERSION + URL_PATTERN
    r = requests.post(url, data=data)
    j = r.json()
    print(j)
    

    Output (Response):

    {
      'code': 200,
      'sentence': '์†ํฅ๋ฏผ์€ 2015๋…„ ๋ ˆ๋ฒ„์ฟ ์  ์—์„œ ํ† ํŠธ๋„˜ ํ•ซ์Šคํผ๋กœ ์ด์ ํ–ˆ๋‹ค.',
      'ner_list': [
        {
          'entity': '์†ํฅ๋ฏผ',
          'ner_tag': 'PS',
          'location': [0, 3]
        },
        {
          'entity': '2015๋…„',
          'ner_tag': 'DT',
          'location': [5, 10]
        },
        {
          'entity': '๋ ˆ๋ฒ„์ฟ ์  ',
          'ner_tag': 'OG',
          'location': [11, 15]
        },
        {
          'entity': 'ํ† ํŠธ๋„˜ ํ•ซ์Šคํผ',
          'ner_tag': 'OG',
          'location': [18, 25]
        }
      ]
    }
    

    Notes :

    • TEANAPS ๊ฐœ์ฒด๋ช…์ธ์‹ API์˜ ๊ฐœ์ฒด๋ช… ํƒœ๊ทธ๋Š” ์ด 16์ข…์œผ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ํƒœ๊ทธ ์ข…๋ฅ˜ ๋ฐ ๊ตฌ๋ถ„์€ ์ •๋ณดํ†ต์‹ ๋‹จ์ฒดํ‘œ์ค€ (TTAS)์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
    • ๊ฐœ์ฒด๋ช… ํƒœ๊ทธํ‘œ๋Š” Appendix๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.
    • TEANAPS ๊ฐœ์ฒด๋ช…์ธ์‹ API์˜ ์„ฑ๋Šฅ ๋ฐ ํŠน์ง•์€ ์„ฑ๋Šฅํ‰๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

[T03-01] ๊ฐ์„ฑ๋ถ„์„

๋ฌธ์žฅ์˜ ๊ฐ์„ฑ์ˆ˜์ค€์„ ๊ธ์ • ๋˜๋Š” ๋ถ€์ •์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ (Request Parameter)

    ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„์ˆ˜ ์œ ํ˜• ์„ค๋ช… ์ƒ˜ํ”Œ
    access_token V str ACCESS TOKEN ODMFKGLDICK20190601132625
    sentence V str ํ•œ๊ตญ์–ด ๋˜๋Š” ์˜์–ด๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์žฅ. ์ตœ๋Œ€ 128์ž. ์†ํฅ๋ฏผ์ด ์ด๋ฒˆ ํ‡ด์žฅ์œผ๋กœ 1๋…„ ๋™์•ˆ 3๋ฒˆ์งธ ํ‡ด์žฅ์„ ๊ธฐ๋กํ–ˆ๋‹ค.
  • ์‘๋‹ต ํŒŒ๋ผ๋ฏธํ„ฐ (Response Parameter)

    ํŒŒ๋ผ๋ฏธํ„ฐ ์œ ํ˜• ์„ค๋ช… ์ƒ˜ํ”Œ
    code int ์‘๋‹ต์ฝ”๋“œ 200
    sentence str ์š”์ฒญ๋ฌธ์žฅ ์†ํฅ๋ฏผ์€ ์ด๋ฒˆ ํ‡ด์žฅ์œผ๋กœ 1๋…„ ๋™์•ˆ 3๋ฒˆ์งธ ํ‡ด์žฅ์„ ๊ธฐ๋กํ–ˆ๋‹ค.
    sentiment str ๊ฐ์„ฑ์ˆ˜์ค€ negative
    sentiment_score dict
    ใ„ดpositive float ๊ธ์ • ์Šค์ฝ”์–ด 0.0339
    ใ„ดnegative float ๋ถ€์ • ์Šค์ฝ”์–ด 0.9634
  • ํ˜ธ์ถœ์˜ˆ์‹œ

    Python Code (Request):

    import requests
    
    URL = "http://api.teanaps.com"
    VERSION = "/v1"
    URL_PATTERN = "/text_analysis/sentiment"
    data = {
        "access_token": "ODMFKGLDICK20190601132625",
        "sentence": "์†ํฅ๋ฏผ์€ ์ด๋ฒˆ ํ‡ด์žฅ์œผ๋กœ 1๋…„ ๋™์•ˆ 3๋ฒˆ์งธ ํ‡ด์žฅ์„ ๊ธฐ๋กํ–ˆ๋‹ค."
    } 
    
    url = URL + VERSION + URL_PATTERN
    r = requests.post(url, data=data)
    j = r.json()
    print(j)
    

    Output (Response):

    {
      'code': 200,
      'sentence': '์†ํฅ๋ฏผ์€ ์ด๋ฒˆ ํ‡ด์žฅ์œผ๋กœ 1๋…„ ๋™์•ˆ 3๋ฒˆ์งธ ํ‡ด์žฅ์„ ๊ธฐ๋กํ–ˆ๋‹ค.',
      'sentiment': 'negative',
      'sentiment_score': {
        'positive': 0.0339,
        'negative': 0.9634
      }
    }
    

์‘๋‹ต์ฝ”๋“œ

  • ๊ณตํ†ต ์‘๋‹ต์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

    Code Message DESC
    200 Success ์š”์ฒญ์ด ์ •์ƒ ์ฒ˜๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    401 Incorrect request ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    402 Invalid ACCESS TOKEN ACCESS TOKEN์ด ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.