ラベル bucketkey の投稿を表示しています。 すべての投稿を表示
ラベル bucketkey の投稿を表示しています。 すべての投稿を表示

2017年1月24日火曜日

バケットの一覧 +VB.net

現在のバケットの一覧を取得

バケットの一覧を取得するにはDataManagementAPIのGET Bucketを使います。前回のプロジェクトを利用して、WebFormでバケットの一覧を取得してみます。

WebFormの追加

WebFormを追加して、下の図のようにサーバーコントロールを配置します。
サンプルのWebForm

サンプルコード


以下はバケットの一覧を取得するサンプルコードです。ポイントは「apiの戻り値のJSONの配列を処理する部分です。レスポンスをNewtonsoft.Json.Linq.JArray型に変換して情報を取り出します。

Public Class WebForm3
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        '**********************************
        '     アクセストークンを取得
        '**********************************
    'この部分は前回の記事を参照してください。

        Dim acToken As String = mdlUtils.GetToken("bucket:read")
        If acToken = "" Then
            Exit Sub
        End If

        '**********************************
        '     バケットを取得
        '**********************************

        'RestSharpでクライアントを作成
        Dim url As String = "https://developer.api.autodesk.com"
        Dim _client As New RestSharp.RestClient(url)

        'RestSharpでリクエストを作成
        Dim authReq As New RestSharp.RestRequest()
        With authReq
            .Resource = "oss/v2/buckets"

            'メソッド
            .Method = RestSharp.Method.GET

            'ヘッダー
            .AddHeader("Authorization", "Bearer " + acToken)

        End With

        '送信
        'POSTする
        Dim result As RestSharp.IRestResponse = _client.Execute(authReq)

        If result.StatusCode = Net.HttpStatusCode.OK Then

            '200OKの場合

            Dim responseString As String = result.Content
            'Newtonsont.JsonのJSON解読メソッドを使うと便利
            'まず以下の構文でオブジェクトを作成します。
            Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)
            '"items"を取得しjArrayオブジェクトとする
            Dim itemArray As Newtonsoft.Json.Linq.JArray = jsonObj("items")
            '配列を走査する
            For Each item As Newtonsoft.Json.Linq.JObject In itemArray
                'バケットキー
                Dim strBucketKey As String = item("bucketKey")
                '作成した日付(ミリセカンド)
                Dim strCreatedDate As String = item("createdDate")
                'ポリシーキー
                Dim strPolicyKey As String = item("policyKey")

                'タイムスタンプから日付へ変換
                Dim intTimeStamp As Int64 = Int64.Parse(strCreatedDate)
                Dim dtCreateDate As DateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(intTimeStamp)

                'リストボックスのアイテムを追加する
                lbxBuckets.Items.Add(New ListItem(strBucketKey + " / 作成日時 : " + dtCreateDate.ToLocalTime.ToString + " / ポリシーキー : " + strPolicyKey, strBucketKey))

            Next
            lblStatus.Text = itemArray.Count.ToString + "個のバケットが見つかりました。"
        Else
            Dim responseString As String = result.Content
            Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)
            lblStatus.Text = "取得に失敗しました。" + vbTab + jsonObj("reason")


        End If
    End Sub
End Class

実行する

実行すると以下のようになります。
現在のバケットの一覧

2016年12月21日水曜日

ビューア用に変換する

アップロードしたファイルの変換

FORGEビューアで見ることができるファイルフォーマットは多数ありますが、それはそのファイルを直接見ているのではなく、ビューア用に変換する必要があります。その拡張子はどうやら「svf」という形式のようで、この変換は

Model Derivative API

で行います。デリバティブってなんか危なっかしい響きがありますが、大丈夫なんですかね。その方法を説明したチュートリアルがあります。

Prepare a File for the Viewer

その前に!(Before you begin)やるべきことがあります。
(1) アクセストークンを「data:write」と「data:read」で取得しましょう。
(2) ファイルをアップロードして(前回やりました) objectIdのURNをメモしておいてください。

だそうです。(1)はもう慣れたと思いますが、ポイントはスコープを二つ使うということです。DHCを起動しましょう。

変換用のアクセストークンの取得

いちいちアクセストークンを適切なスコープで取得することが重要なポイントとなります。ヘルプにはこのように書いてあります。
DHCの設定は次の図のようになりますが、

ポイントはSCOPEのところに

data:write data:read

と半角スペースでつないで二つのスコープを入れることです。
scopeをdata:write data:read の二つを設定


これで、SENDボタンを押すと、いつものようにアクセストークンが返ってきます。
{
"access_token": "LBBv4IgAg4qhe7P1zaRJcff6f3VK",
"token_type": "Bearer",
"expires_in": 86399
}


変換命令を送る(Model Derivative API)

アクセストークンを取得できたら、前回アップロードしたファイルをSVF形式に変換します。この掟はヘルプに書いてあります。まずはRequestですが

Method and URIPOST https://developer.api.autodesk.com/modelderivative/v2/designdata/job
これは単純に送信先にPOSTするということですから、DHCとしては

次にヘッダーです。
AuthorizationyesstringMust be Bearer <token>, where <token> is obtained via OAuth
Content-TypeyesstringMust be application/json
<token>は先ほど取得したアクセストークンを使います。ですから、DHCのヘッダーは
ヘッダーの設定
となります。
問題はBODYセクションですが、なんだかこむつかしいことが書かれています。
inputyesobjectGroup of inputs
input.urnyesstringThe design URN; returned when uploading the file to Forge The URN needs to be `Base64 (URL Safe) encoded`_span>.




outputyesstringGroup of outputs
output.formatsyesarray: objectGroup of requested formats/types. User can request multiple formats.
formats.typeyesstringThe requested output types. Possible values: DWG, FBX, IFC, IGES, OBJ, STEP, STL, SVF, thumbnail. For a list of supported types, call the GET formats endpoint.
必ず必要なところだけ取り出してみました。JSON形式で書けばいいのですが、なんだかよくわかりませんねぇ。どうやらinputというセクションの中にurnというセクションを入れ子にして作りなさい、という意味らいいです。
従いまして

{
      "input" : {
                   "urn" : Base64でエンコードされたオブジェクト(アップロードしたファイルのobjectid)のurn
                   },
というように書きます。これはこのサイトを使って、前回取得したurnをエンコードします。
urn:の文字も含んでENCODEボタンで変換する。
謎の文字列が表示される
エンコード後の文字はなんだか意味不明ですが、この文字列でオブジェクト(アップロードしたファイル)を指定します。

またoutput.formatsですが、「どんな形式に変換したいのか?」の情報を記入します。これはいろいろなフォーマットを指定できますが、SVFの場合はさらにどんなビューを変換するのかを指定します。
Viewsyesarray: stringRequired options for SVF type. Possible values: 2d, 3d
指定できるのは2dと3dだけですが、これらを[ ]でくくって指定できます。従いまして、Bodyの部分は例えば以下のようになります。{  "input" : {    "urn" : ”dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6YmxhY2tzbWl0aGJ1Y2tldDEyMDMvc2FtcGxlcHJvamVjdDAxLnJ2"  },  "output" : {    "formats" : [      {        "type" : "svf",        "views" : ["2d", "3d"]      }    ]  }}

"output" : [{"type":"svf", "view":["2d","3d"]}]の指定がちょっと特徴的ですが、JSON形式なので、]や}がチャンと対になっているように気を付けてください。DHCの画面は次のようになります。
: { [を間違えないように
これでSendを押すと200OKの値が返ってくるはずです。
200OK     (゜-゜)気持ちいい!
変換命令が受けつけられました。




今どんな感じ?

変換が開始されましたが、それには時間がかかります。お仕事の進行状況を問い合わせて、データが準備できたかどうか確認してみましょう。
ヘルプはこちら。

こちらは現在のオブジェクトの状態を問い合わせるAPIです。使い方はとても単純で
Method and URIGET https://developer.api.autodesk.com/modelderivative/v2/designdata/:urn/manifest
Authentication Contextapp only
Required OAuth Scopesdata:read
Data FormatJSON
これは単純に、URIの「:urn」の部分を、上記のurnに入れ替えて、data:readのアクセストークンを使ってGETするだけです。以下はDHCの設定です。ヘッダーにはAuthorizationに「Bearer アクセストークン」のいつものパターンですね。
長ーいendpoint

やたらと長いendpointになりますねー。この例では
developer.api.autodesk.com/modelderivative/v2/designdata/dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6YmxhY2tzbWl0aGJ1Y2tldDEyMDMvc2FtcGxlcHJvamVjdDAxLnJ2dA/manifest

となりました。レスポンスは
{
"type": "manifest",
"hasThumbnail": "true",
"status": "success",
"progress": "complete",
"region": "US",
"urn": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6YmxhY2tzbWl0aGJ1Y2tldDEyMDMvc2FtcGxlcHJvamVjdDAxLnJ2dA",
"version": "1.0",
[
{"name": "sampleproject01.rvt", "hasThumbnail": "true", "status": "success", "progress": "complete",…},
{"status": "success", "progress": "complete", "outputType": "thumbnail", "children":[{"guid": "0576ce39-e54e-369e-da0e-7a306abf2144",…}
]
ですので、progress はcompleteなので、変換はすでに終わったようです。

じゃあ、いよいよビューアで表示してみますか!

2016年12月19日月曜日

バケットにファイルをアップロードする

ファイルのアップロード

引き続き、チュートリアルの後半を実行してみます。

Step 2: Upload a file to a storage location

ファイルのアップロードに必要なHTTPリクエストの項目をこちらで確認します。
Resource Information

Method and URI

  • メソッドは「PUT」
  • URIは

    https://developer.api.autodesk.com/oss/v2/buckets/:bucketKey/objects/:objectName
    となっています。:bucketKeyには取得したバケットの名前(:は必要ありません)を、:ObjectNameにはアップロードするファイルにつける任意の名前をつけます。名前は本当のファイル名でもいいし、GUIDのような名前でも構いませんが、拡張子は変更しないでください。

Required OAuth Scopes

  • data:write または data:create で取得したアクセストークン。data:write の場合は、既存のファイルを上書きすることができます。

Data Format

  • データフォーマットはJSON形式

まずは例によって、アクセストークンを取得します。スコープはdata:writeです。DHCを起動し、以下のように設定して、Sendで応答を待ちます。
DHCでアクセストークンを取得する
すると、応答が返ってきます。
アクセストークンを取得した!

ファイルをアップロード

いよいよファイルをアップロードします。ファイルは任意のRevitのファイル(標準添付のサンプルプロジェクトなどを利用してください。)を使用します。

ヘッダーの必要事項はこちらで確認します。
ヘッダーには何が必要か?
たくさん項目がありますが、必ず必要なのはAuthorizationとContent-Lengthだけです。

Authorization


  • Bearer アクセストークン (Bearer+半角スペース+アクセストークン)

Content-Length


  • DHCも含めて、ほとんどのクライアントはファイルを指定すれば、この項目は自動的に設定されます。

DHCの設定は下の図のようになります。
DHC
① BODYはファイルなので「file」を選ぶ
② Revitのファイルを選択します。
③ Bearer アクセストークン
④ developer.api.autodesk.com/oss/v2/buckets/blacksmithbucket1203/objects/sampleproject01.rvt
バケット名とオブジェクトの名前(②のファイル名と一致しなくてもいいが、拡張子は同じにします。)

ファイルのアップロードの設定は、なにか拍子抜けするほど簡単ですねぇ。ほんとにこれでいいんでしょうか?とりあえず[Send]を押してみます。

しばらくすると・・・・・

おお!ちゃんんとアップロードできたじゃないですか!応答の内容をチェックしてみましょう。
アップロード成功!
{
"bucketKey": "blacksmithbucket1203",
"objectId": "urn:adsk.objects:os.object:blacksmithbucket1203/sampleproject01.rvt",
"objectKey": "sampleproject01.rvt",
"sha1": "55d89511380aeaa070be7072ed7a57d89172e5f3",
"size": 17215488,
"contentType": "application/octet-stream",
}

bucketkey

バケットの名前。アップロード時に指定したものと同じ名前が返されます。

objectId

これがアップロードしたファイルのバケット内でのURN(ID)になります。以降、この名前でファイルをs操作します。

ObjectKey

アップロードしたファイルの名前。ファイルはアップロード後は「オブジェクト」と呼ばれます。

うまくアップロードできました。今度はこのファイルをビューア用に「変換」します。作成したバケットはtransient、急がなければ。なぜなら作成したバケットはtransient、つまり24時間しかデータを保持してくれないのだから・・・・