ご利用ガイド ExcelからConoHaを使ってみよう
目次
ExcelからConoHaを使ってみよう
この文書は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
使い方です。 情報シートに必要事項を書き込んで情報取得ボタンを押せば
こんな感じで表示
ついでに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_")
こんな感じで一覧がでるようになりました。
もうちょっと手間暇かけてあげれば、Excelでコンパネ作れちゃうかもしれませんね!?
今回のExcelはこちらからダウンロードできます。
https://github.com/ysworks/excel-conoha/releases/download/v0.1/ConoHa.xlsm
ソースコードはExcelからご覧ください。
- 問題は解決できましたか?
-