目次

ExcelからConoHaを使ってみよう

STEP1

この文書はConoHa Advent Calendar 2015の15日目の記事として書かれました。

前回は手軽にVPSの操作ができるようにFirefoxのアドオンを作ってみましたが、最近はビジネス用途にガッツリ使って頂いているお客様も増えてきましたので、そんな方にちょっと役に立ちそうなツールを作ってみようと思います。

ビジネスと言えば、みんな大好きExcel!(特に偉い人が)

資料作成から予算管理などExcelを使う機会は多いと思います。そこでお申し込み状況や請求金額一覧などをExcelに出力するマクロを組んでみます。

データ取得の流れはいつもと同じです。

(事前にコンパネでAPIユーザーを作成しておいてください)

1.TenantID、APIユーザーID/パスワードでToken取得。

2.Tokenを使って各種情報を取得する。

https://doc.conoha.jp/api-vps3/

申し込み内容や請求情報はAccount(Billing)というサービスで提供されています。OpenStackにはないConoHa独自のコマンドですが、使い方は一緒です。

では早速VBAマクロを書いていきたいと思います。

APIを使う為に必要なのはHTTPS通信とJSONのパーサーです。HTTPS通信はMSXML2.XMLHTTPというCOMコンポーネントがあるのですが、名前の通りXML形式のレスポンスの処理に特化してますので、ConoHaAPIのようなJSON形式のデシリアライズ機能はありません。

そこで先人の知恵を拝借することにします。



JSONLib

https://code.google.com/p/vba-json/

あとはもうやりたい放題です。ポイポイAPIリクエスト投げちゃいましょう!!(投げすぎ注意)

例えばToken取るならこんな感じです。VBと言えば懐かしいハンガリアン記法で。


Private Function GetToken(ByVal strUserID As String, ByVal strPassword As String, Optional ByVal strTenantID As String) As String

    Dim httpReq As Object
    Set httpReq = CreateObject("MSXML2.XMLHTTP")
    
    Dim strPostData As Variant
    strPostData = "{""auth"":{""passwordCredentials"":{""username"":""" & strUserID & """,""password"":""" & strPassword & """},""tenantId"":""" & strTenantID & """}}"
    
    Call httpReq.Open("POST", strEndpointForIdentity, False)
    Call httpReq.setRequestHeader("Accept", "application/json")
    Call httpReq.send(strPostData)
    
    ' ダウンロード待ち
    Do While httpReq.readyState <> 4
    Loop
    
    If httpReq.Status = 200 Then
        'レスポンス情報を変数に格納する
        Dim strJson As String
        Dim objJson As Object
        strJson = httpReq.responseText

        'レスポンスで取得したJSONをパース
        Set objJson = StringToJson(strJson)
     
        '取得したレコードからフィールドの値を取得
        GetToken = objJson("access").item("token").item("id")
    Else
        MsgBox ("トークンが取得できませんでした")
        GetToken = ""
    End If

End Function

使い方です。 情報シートに必要事項を書き込んで情報取得ボタンを押せば

STEP2

こんな感じで表示

STEP3

ついでにVPSの一覧シートも作ってみました。

1箇所つまづいたのが、JSONLibはキー名にコロンが含まれているとハングしてしまうようです。手っ取り早く対応する為にコロンをアンダースコアに置換しちゃいます。

strResponseText = Replace(strResponseText, "OS-DCF:", "OS-DCF_")
strResponseText = Replace(strResponseText, "OS-EXT-AZ:", "OS-EXT-AZ_")
strResponseText = Replace(strResponseText, "OS-EXT-SRV-ATTR:", "OS-EXT-SRV-ATTR_")
strResponseText = Replace(strResponseText, "OS-EXT-STS:", "OS-EXT-STS_")
strResponseText = Replace(strResponseText, "OS-SRV-USG:", "OS-SRV-USG_")
strResponseText = Replace(strResponseText, "OS-EXT-IPS-MAC:", "OS-EXT-IPS-MAC_")
strResponseText = Replace(strResponseText, "OS-EXT-IPS:", "OS-EXT-IPS_")
strResponseText = Replace(strResponseText, "os-extended-volumes:", "os-extended-volumes_")

こんな感じで一覧がでるようになりました。

STEP4

もうちょっと手間暇かけてあげれば、Excelでコンパネ作れちゃうかもしれませんね!?

今回のExcelはこちらからダウンロードできます。

https://github.com/ysworks/excel-conoha/releases/download/v0.1/ConoHa.xlsm

ソースコードはExcelからご覧ください。

問題は解決できましたか?

お役立ち情報

ConoHaではサポートコンテンツの他にも以下のようなお役立ち情報をご用意しております。ぜひご活用ください。