サイトアイコン 知的好奇心

PythonでConoHaのオブジェクトストレージ操作を行う方法

PythonでConoHaのオブジェクトストレージ操作を行う方法をご紹介します。

条件

PythonによるConoHaのオブジェクトストレージの操作

ConoHaのオブジェクトストレージがcurlによって様々な処理を実行することが出来ます。
ここでは、Pythonのrequestsを使用することで、curlの場合と同等の処理を行う方法をご紹介します。

必要に応じて以下の記事もご参照ください。

ConoHa オブジェクトストレージを使う方法

Pythonでcurlコマンドと同等の処理を実行する方法

サンプルソース

Pythonのサンプルソースを以下に示します。

次のような処理を行っています。

# objectTest.py

import requests
import json
from logging import getLogger, StreamHandler, Formatter, DEBUG, FileHandler

## ログ出力設定
logger = getLogger("オブジェクトストレージ操作")
logger.setLevel(DEBUG)

# コンソール出力設定
stream_handler = StreamHandler()
formatter = Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)

# 接続パラメータ
USER_NAME = "gncu00000000"
PASSWORD = "passpasspass"
TENANT_ID = "9999999999999999999999999"
URL = 'https://identity.tyo2.conoha.io/v2.0/tokens'
OBJECT_STORAGE = 'https://object-storage.tyo2.conoha.io/v1/nc_9999999999999999999999999999'

# オブジェクトストレージ情報
CONTAINER = 'sample1'
OBJECT = '1.jpg'
#OBJECT = 'test.txt'


def getToken():
    """
    tokenの取得
    """

    headers = {
        'Accept': 'application/json',
    }

    data = '{"auth":{"passwordCredentials":{"username":"%s","password":"%s"},"tenantId":"%s"}}' % (USER_NAME, PASSWORD, TENANT_ID)
    #logger.debug(data)

    response = requests.post(URL, headers=headers, data=data)
    data = response.json()

    return json.dumps(data["access"]["token"]["id"], indent=4)


def getContainer(token):
    """
    コンテナの作成
    """
    
    headers = {
        'Accept': 'application/json',
        'X-Auth-Token': token,
    }
    response = requests.get(OBJECT_STORAGE + '/' + CONTAINER, headers=headers)

    data = response.json()

    return json.dumps(data, indent=4)


def getObjectInfo(token):
    """
    オブジェクト情報の取得
    """
    
    headers = {
        'X-Auth-Token': token,
    }
    params = {
        ('format','json'),
    }
    response = requests.get(OBJECT_STORAGE + '/' + CONTAINER + '/' + OBJECT, headers=headers, params=params)

    return response.headers


def webPublishing(token):
    """
    オブジェクトのWeb公開
    """
    
    headers = {
        'Accept': 'application/json',
        'X-Auth-Token': token,
        'X-Container-Read': '.r:*',  # 公開する場合
        #'X-Remove-Container-Read': '.r:*',  # 非公開にする場合
    }

    response = requests.post(OBJECT_STORAGE + '/' + CONTAINER, headers=headers)

    return response


def main():
    """
    実処理(main)
    """
    
    token = getToken().replace('\"', '')  # tokenの取得
    # logger.debug(token)

    container = getContainer(token)  # コンテナの取得
    logger.debug('コンテナ情報:' + container)

    objectInfo = getObjectInfo(token)  # オブジェクト情報の取得
    logger.debug('オブジェクト情報:' + str(objectInfo))

    result = webPublishing(token)  # Webに公開
    logger.debug('Web公開処理:' + str(result))


if __name__ == '__main__':
    """
    main関数を実行
    """
    
    main()

実行結果

コンテナおよび、指定したオブジェクト情報が取得できることが分かります。

$ python3 objectTest.py
2019-08-30 07:58:52,988 - オブジェクトストレージ操作 - DEBUG - コンテナ情報:[
    {
        "hash": "b0fd9193c5ed60631f6c68d77b3d261a",
        "last_modified": "2019-08-29T04:40:46.634140",
        "bytes": 21596,
        "name": "1.jpg",
        "content_type": "image/jpeg"
    },
    {
        "hash": "d41d8cd98f00b204e9800998ecf8427e",
        "last_modified": "2019-08-30T00:53:52.647930",
        "bytes": 0,
        "name": "test.txt",
        "content_type": "text/plain;charset=utf-8"
    }
]
2019-08-30 07:58:53,041 - オブジェクトストレージ操作 - DEBUG - オブジェクト情報:{'Content-Length': '21596', 'Accept-Ranges': 'bytes', 'Last-Modified': 'Thu, 29 Aug 2019 04:40:47 GMT', 'Etag': 'b0fd9193c5ed60631f6c68d77b3d261a', 'X-Timestamp': '1567053646.63414', 'Content-Type': 'image/jpeg', 'X-Trans-Id': 'tx4026a734daa1494db02f1-005d68d73d', 'Date': 'Fri, 30 Aug 2019 07:58:53 GMT'}
2019-08-30 07:58:53,126 - オブジェクトストレージ操作 - DEBUG - Web公開処理:<Response [204]>
$

Web公開設定を行ったため、URL指定(オブジェクトストレージのURL/コンテナ名/オブジェクト名)でブラウザ上でオブジェクトを表示することが出来ます。

ちなみに、Web非公開の場合は以下のような表示となります。

その他処理

コンテナ作成/削除、オブジェクトアップロード/ダウンロードなども実行することが出来ます。

詳細は以下の記事をご参照ください。

PythonでConoHaのオブジェクトストレージ操作を行う方法2

参考

ConoHa:オブジェクトストレージを使う(RESTful API [curl] 編)

https://support.conoha.jp/v/objectstoragecurl/

ConoHa API Documantation

https://www.conoha.jp/docs/

Requests: 人間のためのHTTP

https://requests-docs-ja.readthedocs.io/en/latest/


モバイルバージョンを終了