ConoHaカードを購入するとVPSが最大1ヶ月無料! 7/4(火)まで
ドキュメント
  • ご利用ガイド
  • ExcelからConoHaを使ってみよう

    ExcelからConoHaを使ってみよう

    ExcelからConoHaを使ってみよう


    Step1

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


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

    ビジネスと言えば、みんな大好きExcel!(特に偉い人が)
    資料作成から予算管理などExcelを使う機会は多いと思います。そこでお申し込み状況や請求金額一覧などをExcelに出力するマクロを組んでみます。


    データ取得の流れはいつもと同じです。
    (事前にコンパネでAPIユーザーを作成しておいてください)
    1.TenantID、APIユーザーID/パスワードでToken取得。
    2.Tokenを使って各種情報を取得する。
    https://www.conoha.jp/docs/


    申し込み内容や請求情報は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からご覧ください。

    今すぐお申し込み