geneXplain platform の apiを利用してみた

# geneXplain platformのapiを利用してみた
ドイツのgeneXplain社が開発しているgeneXplain platform はブラウザーを利用してライフサイエンス関連のデータ解析を行う商用のツール

apiを利用して自動化も可能だよと紹介されたので、早速apiを利用してみることにしたhttps://github.com/genexplain/genexplain-api

これを実行するためにはgeneXplainのアカウントが必要で、無償のアカウントを[geneXplain platform registration]
(https://genexplain.com/genexplain-platform-registration/)で登録する
（ストレージの上限が15MBという制限があるけれど)
<img width="1082" alt="Screen Shot 2019-02-22 at 18.01.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/213053/c2c004bf-1b6f-8c61-dca9-0147123e5eb0.png">

## apiについて
GitHub には[R 用 https://github.com/genexplain/geneXplainR](https://github.com/genexplain/geneXplainR)と [Java用 genexplain/genexplain-api](https://github.com/genexplain/genexplain-api)が記載されている

ということで、これらを横目にPythonでアクセスしてみることにした

# Python を利用してgeneXplain platformにアクセスしてみる

##ツールの一覧の取得
GitHubのQuick startではアプリケーションの一覧を取得する例が掲載されているので、これをそのまま実行してみる
プログラム上に記述したりすると面倒なので、geneXplain platformの username と passwordは環境変数で与えることにする

```bash
export gx_username="登録したユーザー名"
export gx_password="登録したパスワード"
```

プログラム中では環境変数を呼び出してusernameとpasswordを取得している
`requests`モジュールが無い場合はpipでインストールしておこう

```terminal
$ python3 -m pip install requests
```

```python3:gx_app.py
#!/bin/env python3
import requests
import sys
import os
import json
import pprint

server = 'https://platform.genexplain.com'
system = 'biouml'

class GeneXplain(object):
     """ GeneXplain object currently supports login and application list only.
        You must set environmental variable `gx_username` and `gx_password` at first.
    """
    # api
    _LOGIN = 'web/login'
    _ANALYSIS_LIST = 'web/analysis/list'

    def __init__(self):
        self.session = None
        self.username = os.environ['gx_username']
        self.password = os.environ['gx_password']
    
    def login(self):
        url = os.path.join(server, system, GeneXplain._LOGIN)
        self.session = requests.Session()
        response = self.session.get(url, params={'username': self.username, 'password': self.password})
        if response.status_code != 200:
            raise ValueError(response.text)
        return response

    def list_applications(self):
        url = os.path.join(server, system, GeneXplain._ANALYSIS_LIST)
        response = self.session.get(url)
        data = response.json()
        if data['type'] != 0:
            raise ValueError
        else:
            applications = data['values']
        return applications

def main():
    gx = GeneXplain()
    response = gx.login()
    applications = gx.list_applications()
    pprint.pprint(applications)

if __name__ == '__main__':
    main()
```

これを実行してみよう

```terminal
$ python3 gx_app.py
['Data manipulation/Annotate diagram',
 'Data manipulation/Annotate table',
 'Data manipulation/Annotate track with genes',
 'Data manipulation/Composite module to proteins',
 'Data manipulation/Convert table',
 'Data manipulation/Convert table to track',
 ...中略...
 'Statistical analysis/PCA',
 'Statistical analysis/Polynomial Regression analysis',
 'Statistical analysis/Table imputation',
 'Statistical analysis/Up and Down Identification',
 'Statistical analysis/Variance filter']
```

こうして利用可能なアプリケーションの一覧が取得できた

今回はここまで:smile: