tag:blogger.com,1999:blog-47577338100726431792024-03-06T03:35:32.904+09:00Blacksmith in FORGEFORGEの世界へようこそ髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.comBlogger14125tag:blogger.com,1999:blog-4757733810072643179.post-303488018332338732017-02-26T16:50:00.000+09:002017-02-26T16:52:43.502+09:00オブジェクトのトランスレーション+VB.net<h2>
ビューア用に変換</h2>
バケットにアップロードしたオブジェクトを、ビューア用のデータであるSVF形式に変換します。使用するAPIは「Model Derivative API」の「POST job」です。<br />
<br />
<h2>
シナリオ</h2>
前回までのバケットの選択→オブジェクトIDの取得 の流れを利用して、オブジェクトを変換してみます。バケットを選択しオブジェクト一覧を表示するGridViewに「SVF変換」の列を設けて、選択したオブジェクトをSVFに変換します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVv1wINJXptTkpz6stxhShYRgVLAeoITc9kJbqEtiLgeR5t93fSW9KpJ5x5crCNYxYbA-4oOuAhD3-m3UPNbBd3n69UpT4YbzKgeGAcnOuruU1xquUfNYF7-LvLI8E1a8kGQ9p_YEZiBU/s1600/bs00093.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVv1wINJXptTkpz6stxhShYRgVLAeoITc9kJbqEtiLgeR5t93fSW9KpJ5x5crCNYxYbA-4oOuAhD3-m3UPNbBd3n69UpT4YbzKgeGAcnOuruU1xquUfNYF7-LvLI8E1a8kGQ9p_YEZiBU/s640/bs00093.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">SVF変換</td></tr>
</tbody></table>
<h2>
使用するAPI</h2>
アップロードしたオブジェクトの変換には、<a href="https://developer.autodesk.com/en/docs/model-derivative/v2/reference/http/job-POST/" target="_blank">「Model Derivative API」の「POST job」</a>を使います。<br />
<h4>
URI</h4>
https://developer.api.autodesk.com/modelderivative/v2/designdata/job<br />
<h4>
アクセストークン</h4>
変換には「data:read」と「data:write または data:create」でアクセストークンを取得します。data:createを使うと、同じオブジェクトでも上書きされず、次々新しい変換ができますので、今回は data:read data:write を使います。<br />
<h4>
リクエストボディ~JSON</h4>
こんかいちょっとややこしいのは、送信するボディにJSONを使用することです。このJSONの形式は以下の通りです。<br />
<span style="color: #e06666;">{</span><br />
<span style="color: #e06666;"> "input": {</span><br />
<span style="color: #e06666;"> "urn": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bW9kZWxkZXJpdmF0aXZlL0E1LnppcA",</span><br />
<span style="color: #e06666;"> "compressedUrn": true,</span><br />
<span style="color: #e06666;"> "rootFilename": "A5.iam"</span><br />
<span style="color: #e06666;"> },</span><br />
<span style="color: #e06666;"> "output": {</span><br />
<span style="color: #e06666;"> "formats": [</span><br />
<span style="color: #e06666;"> {</span><br />
<span style="color: #e06666;"> "type": "svf",</span><br />
<span style="color: #e06666;"> "views": [</span><br />
<span style="color: #e06666;"> "2d",</span><br />
<span style="color: #e06666;"> "3d"</span><br />
<span style="color: #e06666;"> ]</span><br />
<span style="color: #e06666;"> }</span><br />
<span style="color: #e06666;"> ]</span><br />
<span style="color: #e06666;"> }</span><br />
<span style="color: #e06666;"> }</span><br />
これを単に文字列を使って作成してもいいのですが、クラスとしてこのJSONを表現し、Newtonsoft.Json.JsonConvert.SerializeObjectを使ってJSON文字列にしてみましょう。まず、このJSONをクラスに置き換える方法ですが、こちらに<a href="http://json2csharp.com/" target="_blank">大変便利なWebサイト</a>があります。こちらではJSONとC#クラスの変換を助けてくれます。上記JSONを貼り付けてGenerateボタンを押すと<br />
<span style="color: #e06666;">public class Input</span><br />
<span style="color: #e06666;">{</span><br />
<span style="color: #e06666;"> public string urn { get; set; }</span><br />
<span style="color: #e06666;"> public bool compressedUrn { get; set; }</span><br />
<span style="color: #e06666;"> public string rootFilename { get; set; }</span><br />
<span style="color: #e06666;">}</span><br />
<span style="color: #e06666;"><br /></span>
<span style="color: #e06666;">public class Format</span><br />
<span style="color: #e06666;">{</span><br />
<span style="color: #e06666;"> public string type { get; set; }</span><br />
<span style="color: #e06666;"> public List<string> views { get; set; }</span><br />
<span style="color: #e06666;">}</span><br />
<span style="color: #e06666;"><br /></span>
<span style="color: #e06666;">public class Output</span><br />
<span style="color: #e06666;">{</span><br />
<span style="color: #e06666;"> public List<Format> formats { get; set; }</span><br />
<span style="color: #e06666;">}</span><br />
<span style="color: #e06666;"><br /></span>
<span style="color: #e06666;">public class RootObject</span><br />
<span style="color: #e06666;">{</span><br />
<span style="color: #e06666;"> public Input input { get; set; }</span><br />
<span style="color: #e06666;"> public Output output { get; set; }</span><br />
<span style="color: #e06666;">}</span><br />
となり、クラスが4つ作成されました。VB.netでこのクラスを定義すると<br />
<br />
<span style="color: #3d85c6;">Public Class Input</span><br />
<span style="color: #3d85c6;"> Public urn As String</span><br />
<span style="color: #3d85c6;">End Class</span><br />
<span style="color: #3d85c6;"><br /></span>
<span style="color: #3d85c6;">Public Class Format</span><br />
<span style="color: #3d85c6;"> Public type As String</span><br />
<span style="color: #3d85c6;"> Public views As List(Of String)</span><br />
<span style="color: #3d85c6;">End Class</span><br />
<span style="color: #3d85c6;"><br /></span>
<span style="color: #3d85c6;">Public Class Output</span><br />
<span style="color: #3d85c6;"> Public formats As List(Of Format)</span><br />
<span style="color: #3d85c6;">End Class</span><br />
<span style="color: #3d85c6;"><br /></span>
<span style="color: #3d85c6;">Public Class RootObject</span><br />
<span style="color: #3d85c6;"> Public input As Input</span><br />
<span style="color: #3d85c6;"> Public output As Output</span><br />
<span style="color: #3d85c6;">End Class</span><br />
<br />
となります。これをプロジェクト内に定義して [RootObject]クラスを生成し、JSONにコンバートすれば、JSON文字列を生成できます。<br />
<h2>
バケットの内容一覧</h2>
バケットの内容一覧を表示する部分は、前回を参照してください。<br />
<h2>
SVF変換用ButtonField</h2>
WebFormをもう一つ追加して、下の図のように設定します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJuubDXLmQI7tOcc64nC3paCqBj5b_fRUtmors43XNyBnk1d_M_8Jte_FHcqTULIOAPiLNL-tB8_UAnXx1TD6hjOzmqMlpxGBTXOVYNZgWSsml-hDglLEU5Dxcelif8zsvhx0uKLy8fG0/s1600/bs00094.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJuubDXLmQI7tOcc64nC3paCqBj5b_fRUtmors43XNyBnk1d_M_8Jte_FHcqTULIOAPiLNL-tB8_UAnXx1TD6hjOzmqMlpxGBTXOVYNZgWSsml-hDglLEU5Dxcelif8zsvhx0uKLy8fG0/s640/bs00094.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Webフォーム</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
SVF変換用のButtonFieldをGridViewに付け加えます。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEineokbUHEHFZlP41Y_T2Ulgff6Db198HyT60N5Sug82BvWVOHUvd1ZRcs46_TSLGks8VwmMtHHvbbsvV06BBD4w3kDlW4Aolv5VUcfeBnGuw1OlqnRV3snKhc2viIrRHKvdxd9bECw9WU/s1600/bs00095.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEineokbUHEHFZlP41Y_T2Ulgff6Db198HyT60N5Sug82BvWVOHUvd1ZRcs46_TSLGks8VwmMtHHvbbsvV06BBD4w3kDlW4Aolv5VUcfeBnGuw1OlqnRV3snKhc2viIrRHKvdxd9bECw9WU/s400/bs00095.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ButtonFieldを付けくわて、ButtonStyleをButtonにする</td></tr>
</tbody></table>
このボタンフィールドのハンドラにSVF変換のコードを記入します。<br />
<br />
<h2>
コードサンプル</h2>
Protected Sub gdvObjects_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles gdvObjects.RowCommand<br />
<br />
<span style="color: #6aa84f;"> '何行目がクリックされたのか?</span><br />
Dim index As Integer = Convert.ToInt32(e.CommandArgument)<br />
Dim row As GridViewRow = gdvObjects.Rows(index)<br />
<br />
<span style="color: #6aa84f;"> 'オブジェクトIDの取得</span><br />
Dim objKey As String = row.Cells(1).Text<br />
Dim objId As String = row.Cells(2).Text<br />
<br />
<span style="color: #6aa84f;"> '*******************************************</span><br />
<span style="color: #6aa84f;"> ' アクセストークンを取得</span><br />
<span style="color: #6aa84f;"> '*******************************************</span><br />
<br />
Dim acToken As String = mdlUtils.GetToken("data:write data:read")<br />
If acToken = "" Then<br />
lblBucketkey.Text = "アクセストークンの取得に失敗しました。"<br />
Exit Sub<br />
End If<br />
<span style="color: #6aa84f;"><br /></span>
<span style="color: #6aa84f;"> '*******************************************</span><br />
<span style="color: #6aa84f;"> ' URN(ObjectId)をBase64エンコード</span><br />
<span style="color: #6aa84f;"> '*******************************************</span><br />
<br />
Dim bytes As Byte() = System.Text.Encoding.UTF8.GetBytes(objId)<br />
Dim convURN As String = Convert.ToBase64String(bytes, Base64FormattingOptions.None)<br />
<br />
<span style="color: #6aa84f;"> '*******************************************</span><br />
<span style="color: #6aa84f;"> ' 変換リクエスト(RestSharp)</span><br />
<span style="color: #6aa84f;"> '*******************************************</span><br />
<span style="color: #6aa84f;"> 'クライアント</span><br />
Dim strClient As String = "https://developer.api.autodesk.com"<br />
Dim _client As New RestSharp.RestClient(strClient)<br />
<br />
<span style="color: #6aa84f;"> 'リクエスト</span><br />
Dim transReq As New RestSharp.RestRequest()<br />
transReq.Resource = "modelderivative/v2/designdata/job"<br />
<span style="color: #6aa84f;"> 'メソッド</span><br />
transReq.Method = RestSharp.Method.POST<br />
<span style="color: #6aa84f;"> 'ヘッダー</span><br />
transReq.AddHeader("Authorization", "Bearer " + acToken)<br />
transReq.AddHeader("Content-Type", "application/json")<br />
<span style="color: #6aa84f;"> 'ボディのJSON文字列</span><br />
<span style="color: #6aa84f;"> '{</span><br />
<span style="color: #6aa84f;"> ' "input" {</span><br />
<span style="color: #6aa84f;"> ' "urn": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bW9kZWxkZXJpdmF0aXZlL0E1LnppcA"</span><br />
<span style="color: #6aa84f;"> ' },</span><br />
<span style="color: #6aa84f;"> ' "output": {</span><br />
<span style="color: #6aa84f;"> ' "formats": [</span><br />
<span style="color: #6aa84f;"> ' {</span><br />
<span style="color: #6aa84f;"> ' "type": "svf",</span><br />
<span style="color: #6aa84f;"> ' "views": ["2d","3d"]</span><br />
<span style="color: #6aa84f;"> ' }</span><br />
<span style="color: #6aa84f;"> ' ]</span><br />
<span style="color: #6aa84f;"> ' }</span><br />
<span style="color: #6aa84f;"> '}</span><br />
<span style="color: #93c47d;"> '送信するJSONをクラスで置き換えて作成</span><br />
Dim iInput As New Input<br />
iInput.urn = convURN<br />
<br />
Dim iFormat As New Format<br />
iFormat.type = "svf"<br />
iFormat.views = New List(Of String)<br />
iFormat.views.Add("2d")<br />
iFormat.views.Add("3d")<br />
<br />
Dim iOutput As New Output<br />
iOutput.formats = New List(Of Format)<br />
iOutput.formats.Add(iFormat)<br />
<br />
Dim iRootObj As New RootObject<br />
iRootObj.input = iInput<br />
iRootObj.output = iOutput<br />
<br />
<span style="color: #93c47d;"> 'JSONオブジェクトに変換する</span><br />
Dim json As Object = Newtonsoft.Json.JsonConvert.SerializeObject(iRootObj)<br />
<br />
<span style="color: #93c47d;"> '変換したJSONオブジェクトをボディに追加する</span><br />
transReq.AddParameter("application/json", json, RestSharp.ParameterType.RequestBody)<br />
<br />
<span style="color: #6aa84f;"> 'リクエストを送信</span><br />
Dim result As RestSharp.IRestResponse = _client.Execute(transReq)<br />
<br />
<span style="color: #6aa84f;"> '*******************************************</span><br />
<span style="color: #6aa84f;"> ' 応答</span><br />
<span style="color: #6aa84f;"> '*******************************************</span><br />
If result.StatusCode = Net.HttpStatusCode.OK Then<br />
<br />
<span style="color: #6aa84f;"> '200 成功した場合</span><br />
<span style="color: #6aa84f;"> '戻り値のJSONは次の形式になっている</span><br />
<span style="color: #6aa84f;"> '{</span><br />
<span style="color: #6aa84f;"> ' "result": "success",</span><br />
<span style="color: #6aa84f;"> ' "urn": "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6bW9kZWxkZXJpdmF0aXZlL0E1LnppcA",</span><br />
<span style="color: #6aa84f;"> ' "acceptedJobs": {</span><br />
<span style="color: #6aa84f;"> ' "output": {</span><br />
<span style="color: #6aa84f;"> ' "formats": [</span><br />
<span style="color: #6aa84f;"> ' {</span><br />
<span style="color: #6aa84f;"> ' "type": "svf",</span><br />
<span style="color: #6aa84f;"> ' "views": [</span><br />
<span style="color: #6aa84f;"> ' "2d",</span><br />
<span style="color: #6aa84f;"> ' "3d"</span><br />
<span style="color: #6aa84f;"> ' ]</span><br />
<span style="color: #6aa84f;"> ' }</span><br />
<span style="color: #6aa84f;"> ' ]</span><br />
<span style="color: #6aa84f;"> ' }</span><br />
<span style="color: #6aa84f;"> ' }</span><br />
<span style="color: #6aa84f;"> '}</span><br />
Dim responseString As String = result.Content<br />
<span style="color: #6aa84f;"> 'Newtonsont.JsonのJSON解読メソッドを使うと便利</span><br />
<span style="color: #6aa84f;"> 'まず以下の構文でオブジェクトを作成します。</span><br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
<span style="color: #6aa84f;"> 'URNを取得</span><br />
Dim strURN As String = jsonObj("urn")<br />
lblStatus.Text = "変換を開始しました。"<br />
tbxURN.Text = strURN<br />
<br />
ElseIf result.StatusCode = Net.HttpStatusCode.Created Then<br />
<span style="color: #6aa84f;"> '201 すでに作成されている場合</span><br />
Dim responseString As String = result.Content<br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
Dim strURN As String = jsonObj("urn")<br />
lblStatus.Text = "すでに変換されています。"<br />
tbxURN.Text = strURN<br />
<br />
ElseIf result.StatusCode = Net.HttpStatusCode.BadRequest Then<br />
Dim responseString As String = result.Content<br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
<span style="color: #6aa84f;"> '"diagnostic"の値にエラーの詳細が記載されている。</span><br />
Dim strDiagnostic As String = jsonObj("diagnostic")<br />
lblStatus.Text = "変換に失敗しました。" + strDiagnostic<br />
tbxURN.Text = ""<br />
<br />
Else<br />
<span style="color: #6aa84f;"> '何らかの失敗</span><br />
lblStatus.Text = "変換に失敗しました。"<br />
tbxURN.Text = ""<br />
End If<br />
End Sub<br />
End Class<br />
<span style="color: #6aa84f;"><br /></span>
<span style="color: #6aa84f;">'JSONクラス</span><br />
Public Class Input<br />
Public urn As String<br />
End Class<br />
<br />
Public Class Format<br />
Public type As String<br />
Public views As List(Of String)<br />
End Class<br />
<br />
Public Class Output<br />
Public formats As List(Of Format)<br />
End Class<br />
<br />
Public Class RootObject<br />
Public input As Input<br />
Public output As Output<br />
End Class<br />
<br />
<h2>
実行してみる</h2>
<div>
まず、バケットの一覧を表示します。</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdLoJryLZlGD3sWjjSdslEFIhuY72uQRZ8ibLGJzSdf1rk7hqPMRbG89c5xWl2V4pSTp6SyrPPn9CF1zwJrW_ltkDiSpBt7OeH-tNpSTdCJCA5L0K1zxwUEvPjv2ic-g8CJPIzm6-UEDM/s1600/bs00097.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdLoJryLZlGD3sWjjSdslEFIhuY72uQRZ8ibLGJzSdf1rk7hqPMRbG89c5xWl2V4pSTp6SyrPPn9CF1zwJrW_ltkDiSpBt7OeH-tNpSTdCJCA5L0K1zxwUEvPjv2ic-g8CJPIzm6-UEDM/s640/bs00097.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">バケットの一覧</td></tr>
</tbody></table>
<div>
バケットを選択すると、</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLY3xWLlJHbpRzTE3XvGnhQiv1EzASKL0Es3ldiGFO8GfxakhY2ToqIJilbOFYEviNFppg6vzZQxehC_SXnOWtiXU5CcDcCnLjgCCxgi4d2D0penOimRYR54RQ5-p3s_KR3EyG7ng8mF8/s1600/bs00096.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLY3xWLlJHbpRzTE3XvGnhQiv1EzASKL0Es3ldiGFO8GfxakhY2ToqIJilbOFYEviNFppg6vzZQxehC_SXnOWtiXU5CcDcCnLjgCCxgi4d2D0penOimRYR54RQ5-p3s_KR3EyG7ng8mF8/s640/bs00096.PNG" width="640" /></a></div>
<div>
<br /></div>
が表示されます。ここで[SVF変換]ボタンを押して、変換します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN5NKHiMQ9e_K5GJ7254EdU382me9w2WVIcJ-A3-vqA4WZP5ZVVdMVFRwRq5u1PoUI7ntihPffkVm-6GsfClJxr-36qyswkwWkHN_9vfm7fXf462wFndT13-B-Ddt2fuxiWE50YyJWBn0/s1600/bs00098.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="136" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN5NKHiMQ9e_K5GJ7254EdU382me9w2WVIcJ-A3-vqA4WZP5ZVVdMVFRwRq5u1PoUI7ntihPffkVm-6GsfClJxr-36qyswkwWkHN_9vfm7fXf462wFndT13-B-Ddt2fuxiWE50YyJWBn0/s640/bs00098.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">変換が開始されるとURNが表示されます</td></tr>
</tbody></table>
時間をおいて、再度SVF変換を押すと「すでに変換されています」となります。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-ya_adhXei8NnRgSDVKiliJZSXJoZcX7LBpP7Zlb9xxv7gNWdSmA_wCfDOydQ-morlYXbcuV3rfxJ8SNBTLThSFEUM-asjMZk5c1oURTdd0gcolY9vUkfQ49z8A-V0qJMgKsidOiS1eg/s1600/bs00099.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-ya_adhXei8NnRgSDVKiliJZSXJoZcX7LBpP7Zlb9xxv7gNWdSmA_wCfDOydQ-morlYXbcuV3rfxJ8SNBTLThSFEUM-asjMZk5c1oURTdd0gcolY9vUkfQ49z8A-V0qJMgKsidOiS1eg/s640/bs00099.PNG" width="640" /></a></div>
<br />
このURNを使って、ビューアにオブジェクトを表示することができます。<br />
<br />
<br />髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-53910615071316302502017-02-04T18:30:00.002+09:002017-02-04T18:44:06.088+09:00バケット内のオブジェクト+VB.net<h2>
バケット内のオブジェクト</h2>
作成したバケットにどのようなファイルがアップロードされているかを表示してみます。APIはData Management APIの「<a href="https://developer.autodesk.com/en/docs/data/v2/reference/http/buckets-:bucketKey-objects-GET/" target="_blank">GET buckets/:bucketKey/objects</a>」です。<br />
<br />
リファレンスによると、必要な情報は<br />
<br />
<ul>
<li>data:readのアクセストークン</li>
<li>バケットキー</li>
</ul>
<br />
の二つです。<br />
<br />
(1) バケットの一覧を取得し表示<br />
(2) 表示された一覧からバケットを選択<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwun4IMVvbbcn8yHwd7vPHa1mIVl_NYqe_LqgB4347eNtrVlRm4mk8Os6lX4YMhtad6p4UsqyhUlnIq7XNdsVcjBkBDQ1NJNTzkM6T7X9sqQepZreW_6mdZc4m8-j97HiaQoVs3Xp3DsM/s1600/bs00090.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="138" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwun4IMVvbbcn8yHwd7vPHa1mIVl_NYqe_LqgB4347eNtrVlRm4mk8Os6lX4YMhtad6p4UsqyhUlnIq7XNdsVcjBkBDQ1NJNTzkM6T7X9sqQepZreW_6mdZc4m8-j97HiaQoVs3Xp3DsM/s400/bs00090.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">バケットの一覧を表示し「選択」をクリック</td></tr>
</tbody></table>
(3)バケット内のオブジェクトの一覧を表示<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil6vKS0b0KTLEGWqEDsNuDBUoBuktA8bTaISVfAa2iQ-qjBleR5xbBUWtG4esL29brDIVYEBr5lqFBl-AqocDvhzsupkWBH_fgAGX5UL8GsQ0ifoK8rKgu3SjEd-QstgTDS9ui6TIMVI0/s1600/bs00091.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="41" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil6vKS0b0KTLEGWqEDsNuDBUoBuktA8bTaISVfAa2iQ-qjBleR5xbBUWtG4esL29brDIVYEBr5lqFBl-AqocDvhzsupkWBH_fgAGX5UL8GsQ0ifoK8rKgu3SjEd-QstgTDS9ui6TIMVI0/s400/bs00091.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">バケット内のオブジェクトを表示</td></tr>
</tbody></table>
というシナリオで構成してみます。<br />
ASP.net Webフォームでこのお題を解いてみます。<br />
<br />
<h2>
バケットの一覧を取得してGridViewに表示する</h2>
<br />
前回はListViewにバケットの一覧を表示しましたが、今回はGridViewに表示します。新なWebフォームを追加して、GridView(gdvBucket)とラベル(lblStatus)を追加します。FORGE APIの部分は前回と同じですが、GridViewにデータを表示するために、新たにデータセット(DataSet)を作成して、GridViewにバインドします。どうもGridViewはデータベースと結びつけないと作動しないようです。<br />
<br />
<br />
<h3>
サンプルコード</h3>
<br />
Public Class WebForm4<br />
Inherits System.Web.UI.Page<br />
<br />
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load<br />
<br />
<br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"> ' アクセストークンを取得</span><br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<br />
Dim acToken As String = mdlUtils.GetToken("bucket:read")<br />
If acToken = "" Then<br />
Exit Sub<br />
End If<br />
<br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"> ' バケットを取得</span><br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<br />
<span style="color: #6aa84f;"> 'RestSharpでクライアントを作成</span><br />
Dim url As String = "https://developer.api.autodesk.com"<br />
Dim _client As New RestSharp.RestClient(url)<br />
<br />
<span style="color: #6aa84f;"> 'RestSharpでリクエストを作成</span><br />
Dim authReq As New RestSharp.RestRequest()<br />
With authReq<br />
.Resource = "oss/v2/buckets"<br />
<br />
<span style="color: #6aa84f;"> 'メソッド</span><br />
.Method = RestSharp.Method.GET<br />
<br />
<span style="color: #6aa84f;">'ヘッダー</span><br />
.AddHeader("Authorization", "Bearer " + acToken)<br />
<br />
End With<br />
<br />
<span style="color: #6aa84f;">'送信</span><br />
Dim result As RestSharp.IRestResponse = _client.Execute(authReq)<br />
<br />
If result.StatusCode = Net.HttpStatusCode.OK Then<br />
<br />
<span style="color: #6aa84f;"> '200OKの場合</span><br />
<span style="color: #6aa84f;"><br /></span>
<span style="color: #6aa84f;"><br /></span>
<span style="color: #6aa84f;"> 'データセットを定義</span><br />
<span style="color: red;"> Dim dsBucket As New DataSet("BucketList")</span><br />
<span style="color: red;"> Dim tblBucket As DataTable = dsBucket.Tables.Add("Table1")</span><br />
<span style="color: red;"> tblBucket.Columns.Add("</span><b><span style="color: blue;">バケットキー</span></b><span style="color: red;">", Type.GetType("System.String"))</span><br />
<span style="color: red;"> tblBucket.Columns.Add("作成日", Type.GetType("System.String"))</span><br />
<span style="color: red;"> tblBucket.Columns.Add("ポリシーキー", Type.GetType("System.String"))</span><br />
<br />
<br />
Dim responseString As String = result.Content<br />
<br />
<span style="color: #6aa84f;"> 'Newtonsont.JsonのJSON解読メソッドを使うと便利</span><br />
<span style="color: #6aa84f;"> 'まず以下の構文でオブジェクトを作成します。</span><br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
<span style="color: #6aa84f;"> '"items"を取得しjArrayオブジェクトとする</span><br />
Dim itemArray As Newtonsoft.Json.Linq.JArray = jsonObj("items")<br />
<span style="color: #6aa84f;"> '配列を走査し、データテーブルにデータ行を充てんする</span><br />
For Each item As Newtonsoft.Json.Linq.JObject In itemArray<br />
<span style="color: #6aa84f;"> 'バケットキー</span><br />
Dim strBucketKey As String = item("bucketKey")<br />
<span style="color: #6aa84f;"> '作成した日付(ミリセカンド)</span><br />
Dim strCreatedDate As String = item("createdDate")<br />
'<span style="color: #6aa84f;">ポリシーキー</span><br />
Dim strPolicyKey As String = item("policyKey")<br />
<br />
<span style="color: #6aa84f;"> 'タイムスタンプから日付へ変換</span><br />
Dim intTimeStamp As Int64 = Int64.Parse(strCreatedDate)<br />
Dim dtCreateDate As DateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(intTimeStamp)<br />
<br />
<br />
<span style="color: #6aa84f;"> 'データセット</span><br />
<span style="color: red;">Dim rowBucket As DataRow = tblBucket.NewRow()</span><br />
<span style="color: red;"> rowBucket("バケットキー") = strBucketKey</span><br />
<span style="color: red;"> rowBucket("作成日") = dtCreateDate.ToLocalTime.ToString</span><br />
<span style="color: red;"> rowBucket("ポリシーキー") = strPolicyKey</span><br />
<span style="color: red;"> tblBucket.Rows.Add(rowBucket)</span><br />
<br />
<br />
Next<br />
lblStatus.Text = tblBucket.Rows.Count.ToString + "個のバケットが見つかりました。"<br />
<span style="color: red;">gdvBucket.DataSource = New DataView(tblBucket)</span><br />
<span style="color: red;"> gdvBucket.DataBind()</span><br />
<br />
Else<br />
Dim responseString As String = result.Content<br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
lblStatus.Text = "取得に失敗しました。" + vbTab + jsonObj("reason")<br />
<br />
End If<br />
End Sub<br />
End Class<br />
<br />
<h2>
データグリッドに選択列を追加</h2>
デザインビューでデータグリッドを選択し、GridViewタスクから「列の編集」を選択します。<br />
HyperLinkFieldを追加し、<br />
DataNavigateUrlFields に <b><span style="color: blue;">バケットキー</span></b><br />
DataNavigateUrlFormatString に ~/WebForm5.aspx?<b><span style="color: magenta;">BucketKey</span></b>={<b><span style="color: blue;">0</span></b>}<br />
HeaderText に 詳細表示<br />
Text に 選択<br />
<br />
を設定します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8ZRZ_NZvr4ScdHPe_BlogCjLRO1uz9NP-GOmjlR90DHC5RFcYjAZ3e3wQc9FUhpsWgeTFtkFz4DVtCXFeh4ZPLKo_aof08P4asDCDrz2snmS8AsUEYzIciZmRl6SLPsx3k2DP2JW2p6w/s1600/bs00092.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="342" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8ZRZ_NZvr4ScdHPe_BlogCjLRO1uz9NP-GOmjlR90DHC5RFcYjAZ3e3wQc9FUhpsWgeTFtkFz4DVtCXFeh4ZPLKo_aof08P4asDCDrz2snmS8AsUEYzIciZmRl6SLPsx3k2DP2JW2p6w/s400/bs00092.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">選択列の追加</td></tr>
</tbody></table>
バケットを選択したときに、次のページを呼び出すときにGridViewに表示されているデータセットテーブルの 「<b><span style="color: blue;">バケットキー</span></b>」の値を受け渡します。DataNavigateUrlFormatStringには、DataNavigateUrlFieldにカンマ区切りで設定した文字列を、{0} {1}の書式で受け渡すことができます。<br />
<h2>
バケット内オブジェクト一覧</h2>
あらたなWebフォームを追加し、ラベル(lblBucketKey)とGridView(gdvObjects)を追加します。ページが遷移するときのデータの受け渡しは HttpRequestの Request.QueryStringを使います。(サンプルコードの冒頭の部分)<br />
また、バケットの一覧を取得する部分は、バケットキーを使ってURLを作成するだけなので比較的簡単といえるでしょう。<br />
<br />
<h3>
サンプルコード</h3>
Public Class WebForm5<br />
Inherits System.Web.UI.Page<br />
<br />
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load<br />
<br />
<br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"> ' バケットキーを取得</span><br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<br />
Dim strBucketKey As String = Request.QueryString("<span style="color: magenta;"><b>BucketKey</b></span>")<br />
lblBucketkey.Text = strBucketKey<br />
<br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"> ' アクセストークンを取得</span><br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<br />
'アクセストークンを取得す部分はこちらを参照してください。<br />
Dim acToken As String = mdlUtils.GetToken("data:read")<br />
If acToken = "" Then<br />
lblBucketkey.Text = "アクセストークンの取得に失敗しました。"<br />
End If<br />
<br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"> ' バケット内のオブジェクト</span><br />
<span style="color: #6aa84f;"> '**********************************</span><br />
Dim strClient As String = "https://developer.api.autodesk.com"<br />
Dim _client As New RestSharp.RestClient(strClient)<br />
<br />
Dim chkReq As New RestSharp.RestRequest()<br />
With chkReq<br />
.Resource = "oss/v2/buckets/" + strBucketKey + "/objects"<br />
.Method = RestSharp.Method.GET<br />
.AddParameter("Authorization", "Bearer " + acToken, RestSharp.ParameterType.HttpHeader)<br />
.AddParameter("Content-Type", "application/json", RestSharp.ParameterType.HttpHeader)<br />
End With<br />
<br />
Dim result As RestSharp.IRestResponse = _client.Execute(chkReq)<br />
<br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"> ' データグリッドに表示</span><br />
<span style="color: #6aa84f;"> '**********************************</span><br />
If result.StatusCode = Net.HttpStatusCode.OK Then<br />
<span style="color: #6aa84f;"> '成功した場合</span><br />
<span style="color: #6aa84f;"> 'データセットを定義</span><br />
Dim dsObjects As New DataSet("BucketList")<br />
Dim tblObjects As DataTable = dsObjects.Tables.Add("Table1")<br />
tblObjects.Columns.Add("オブジェクトキー", Type.GetType("System.String"))<br />
tblObjects.Columns.Add("オブジェクトID", Type.GetType("System.String"))<br />
tblObjects.Columns.Add("ロケーション", Type.GetType("System.String"))<br />
<br />
Dim responseString As String = result.Content<br />
<span style="color: #6aa84f;"> 'Newtonsont.JsonのJSON解読メソッドを使うと便利</span><br />
<span style="color: #6aa84f;"> 'まず以下の構文でオブジェクトを作成します。</span><br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
'"items"を取得しjArrayオブジェクトとする<br />
Dim itemArray As Newtonsoft.Json.Linq.JArray = jsonObj("items")<br />
<span style="color: #6aa84f;"> '配列を走査する</span><br />
For Each item As Newtonsoft.Json.Linq.JObject In itemArray<br />
<span style="color: #6aa84f;"> 'オブジェクトキー</span><br />
Dim strObjectKey As String = item("objectKey")<br />
<span style="color: #6aa84f;"> 'オブジェクトID</span><br />
Dim strObjectId As String = item("objectId")<br />
<span style="color: #6aa84f;"> 'ロケーション</span><br />
Dim strLoacation As String = item("location")<br />
<span style="color: #6aa84f;"><br /></span>
<span style="color: #6aa84f;"> 'データセット</span><br />
Dim rowObjects As DataRow = tblObjects.NewRow()<br />
rowObjects("オブジェクトキー") = strObjectKey<br />
rowObjects("オブジェクトID") = strObjectId<br />
rowObjects("ロケーション") = strLoacation<br />
tblObjects.Rows.Add(rowObjects)<br />
<br />
<br />
Next<br />
gdvObjects.DataSource = New DataView(tblObjects)<br />
gdvObjects.DataBind()<br />
<br />
End If<br />
<br />
End Sub<br />
<br />
End Class<br />
<br />
GridViewを使うことで、少し見栄えも改善されました。<br />
<br />髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-30604670647018798752017-02-01T23:03:00.001+09:002017-02-01T23:03:37.969+09:00ファイルのアップロード +VB.net<h2>
バケットにファイルをアップロードする</h2>
<br />
作成したバケットにファイルをアップロードします。必要な情報は<br />
<br />
<ul>
<li>アクセストークン data:create または data:write (既存のファイルは上書き)</li>
<li>バケットキー ファイルをアップロードするバケット</li>
</ul>
<br />
です。ここでもRestSharpを使ってファイルをアップロードしてみます。ユーザーインターフェイスは前回のバケット一覧を少し改造して、下の図のようにしてみました。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsACmxZDUsVJwET3ksam3AzpkRYltQ6VoTbxKVMvY1ASrsIT_n3Qr-eCrgpSM0vlOu2ej61JXEKGcRbbygUp3v7qeKJCz0_faaC914rQAwfNBj109hWbL7UqcF_XH1ogf4s0Q_BvK5nl8/s1600/bs00088.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsACmxZDUsVJwET3ksam3AzpkRYltQ6VoTbxKVMvY1ASrsIT_n3Qr-eCrgpSM0vlOu2ej61JXEKGcRbbygUp3v7qeKJCz0_faaC914rQAwfNBj109hWbL7UqcF_XH1ogf4s0Q_BvK5nl8/s400/bs00088.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">WebForm3.aspx</td></tr>
</tbody></table>
[参照]ボタンを押して選択したファイルを、lbxBucketsで選択したバケットに[アップロード]ボタンでアップロードし、そのObjectIDを取得して表示する、というシナリオです。<br />
<br />
<h2>
サンプルコード</h2>
<br />
アップロードボタンのクリックイベントのハンドラを示します。<br />
<br />
Protected Sub btnUpload_Click(sender As Object, e As EventArgs) Handles btnUpload.Click<br />
<br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"> ' アップロードするファイルを取得</span><br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"><br /></span>
<span style="color: #6aa84f;"> 'ファイルが選択されているか?</span><br />
If FileUpload1.HasFile = False Then<br />
MsgBox("ファイルが選択されていません。", MsgBoxStyle.OkOnly)<br />
Exit Sub<br />
End If<br />
<br />
<span style="color: #6aa84f;"> 'バケットにアップロードするファイル</span><br />
<span style="color: #6aa84f;"> 'FileUploadで転送されたファイル</span><br />
Dim fileToUpload As HttpPostedFile = FileUpload1.PostedFile<br />
<br />
<span style="color: #6aa84f;"> 'ファイル名(インターネットエクスプローラはフルパスを返す)</span><br />
Dim strFullPath As String = fileToUpload.FileName<br />
<br />
<span style="color: #6aa84f;"> 'ファイル名だけ取り出す</span><br />
Dim strFileName As String = IO.Path.GetFileName(strFullPath)<br />
<br />
<span style="color: #6aa84f;"> '①ファイル名をURLエンコードする</span><br />
Dim strObjectKey As String = System.Web.HttpUtility.UrlEncode(strFileName)<br />
<br />
<span style="color: #6aa84f;"> 'ファイルの内容を読んでByteの配列とする</span><br />
Dim fileData As Byte() = Nothing<br />
Using binaryReader As New IO.BinaryReader(fileToUpload.InputStream)<br />
fileData = binaryReader.ReadBytes(fileToUpload.ContentLength)<br />
End Using<br />
<br />
<br />
<span style="color: #6aa84f;"> '現在選択しているバケットキーを取得</span><br />
Dim strBucketKey As String = lbxBuckets.SelectedValue<br />
<span style="color: #6aa84f;"><br /></span>
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"> ' アクセストークンを取得</span><br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<br />
Dim acToken As String = mdlUtils.GetToken("data:write")<br />
If acToken = "" Then<br />
Exit Sub<br />
End If<br />
<span style="color: #6aa84f;"><br /></span>
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"> ' ファイルをアップロード</span><br />
<span style="color: #6aa84f;"> '**********************************</span><br />
<span style="color: #6aa84f;"> 'RestSharpでクライアントを作成</span><br />
Dim url As String = "https://developer.api.autodesk.com"<br />
Dim _client As New RestSharp.RestClient(url)<br />
<br />
<span style="color: #6aa84f;"> 'RestSharpでリクエストを作成</span><br />
Dim authReq As New RestSharp.RestRequest()<br />
With authReq<br />
.Resource = "oss/v2/buckets/" + strBucketKey + "/objects/" + strObjectKey<br />
<br />
<span style="color: #6aa84f;"> 'メソッド</span><br />
.Method = RestSharp.Method.PUT<br />
<br />
<span style="color: #6aa84f;"> 'ヘッダー</span><br />
.AddHeader("Authorization", "Bearer " + acToken)<br />
<br />
<span style="color: #6aa84f;"> 'BODY</span><br />
.AddParameter("Content-Type", fileToUpload.ContentType)<br />
.AddParameter("Content-Length", fileToUpload.ContentLength)<br />
<span style="color: #6aa84f;"><br /></span>
<span style="color: #6aa84f;"> '②アップロードするファイルをリクエストボディに追加</span><br />
.AddParameter("requestBody", fileData, RestSharp.ParameterType.RequestBody)<br />
<br />
End With<br />
<br />
<span style="color: #6aa84f;"> 'リクエスト送信</span><br />
Dim result As RestSharp.IRestResponse = _client.Execute(authReq)<br />
<br />
<span style="color: #6aa84f;"> '結果</span><br />
If result.StatusCode = Net.HttpStatusCode.OK Then<br />
<br />
<span style="color: #6aa84f;"> 'ObjectIdを取得する</span><br />
Dim responseString As String = result.Content<br />
<span style="color: #6aa84f;"> 'Newtonsont.JsonのJSON解読メソッドを使うと便利</span><br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
<span style="color: #6aa84f;"> 'objectId</span><br />
lblObjectId.Text = jsonObj("objectId")<br />
<br />
Else<br />
Dim responseString As String = result.Content<br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
lblObjectId.Text = jsonObj("reason")<br />
<br />
End If<br />
<br />
End Sub<br />
<br />
ポイントは①のファイルの名前をエンコードすることを忘れないようにするところと、②のファイルをBODYにテンプルすところです。<br />
<br />
<h2>
大きなサイズのデータを送れるようにする</h2>
<br />
ASP.netのFileUploadコントロールは転送できるファイルサイズが4MB程度に制限されているので、これを300MB(300×1024=307200KB)に緩和します。<br />
<br />
ソリューションエクスプローラで「Web.config」ファイルを開き、17行目あたりにある<br />
<httpRuntime targetFramework="4.6"/><br />
の末尾の/の前をクリックし、maxRequestLength="307200"と追記します。4.6"の後ろにスペースを空けて、maxと打てばインテリセンスが働いて、maxRequestを探すことができます。<br />
<br />
<system.web><br />
<authentication mode="None" /><br />
<compilation debug="true" strict="false" explicit="true" targetFramework="4.6" /><br />
<httpRuntime targetFramework="4.6" <span style="color: red;"><b>maxRequestLength="307200"</b></span> /><br />
<pages><br />
<namespaces><br />
・・・・<br />
<br />
<h2>
実行する</h2>
<br />
デバッグ起動してバケットと、アップロードするファイルを選択して「アップロード」ボタンを押すと、ファイルサイズによっては時間がかかりますが、うまくいけばオブジェクトIDが返ってきます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVvrZ-oEFEyNZN3KD47fbNQ6V6y6me_VnoxxRqYt0BbmLYJy1WqY1ytY074dfVHEu9J7rF2795wHVNbGaJHVGdU5jcxE3Ep6Tati2vx8X6pljGoCqBb8uTKygfNVfO7dG0zja4Dgww5wg/s1600/bs00089.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVvrZ-oEFEyNZN3KD47fbNQ6V6y6me_VnoxxRqYt0BbmLYJy1WqY1ytY074dfVHEu9J7rF2795wHVNbGaJHVGdU5jcxE3Ep6Tati2vx8X6pljGoCqBb8uTKygfNVfO7dG0zja4Dgww5wg/s400/bs00089.png" width="400" /></a></div>
<br />髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-58888101610790479222017-01-24T21:39:00.000+09:002017-01-24T21:39:13.695+09:00バケットの一覧 +VB.net<h2>
現在のバケットの一覧を取得</h2>
バケットの一覧を取得するにはDataManagementAPIの<a href="https://developer.autodesk.com/en/docs/data/v2/reference/http/buckets-GET/" target="_blank">GET Bucket</a>を使います。前回のプロジェクトを利用して、WebFormでバケットの一覧を取得してみます。<br />
<h2>
WebFormの追加</h2>
WebFormを追加して、下の図のようにサーバーコントロールを配置します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijhjpSaWsDCG91waApfqcwrRpdTl616zTDdc5WGAIF9HAOBYCyxmo2yZHU-JhSxji0mPe1Jz_al-KHzH-xxbPCSu0dSHCaUXRFlnNI7Zwc8y_8D6tv_OFX-Pe9VyLB38hx9l4dDbMzgD0/s1600/bs00086.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijhjpSaWsDCG91waApfqcwrRpdTl616zTDdc5WGAIF9HAOBYCyxmo2yZHU-JhSxji0mPe1Jz_al-KHzH-xxbPCSu0dSHCaUXRFlnNI7Zwc8y_8D6tv_OFX-Pe9VyLB38hx9l4dDbMzgD0/s400/bs00086.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">サンプルのWebForm</td></tr>
</tbody></table>
<h2>
サンプルコード</h2>
<br />
以下はバケットの一覧を取得するサンプルコードです。ポイントは「apiの戻り値のJSONの配列を処理する部分です。レスポンスを<b><span style="color: red;">Newtonsoft.Json.Linq.JArray型</span></b>に変換して情報を取り出します。<br />
<br />
Public Class WebForm3<br />
Inherits System.Web.UI.Page<br />
<br />
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load<br />
<br />
<b><span style="color: #6aa84f;"> '**********************************</span></b><br />
<b><span style="color: #6aa84f;"> ' アクセストークンを取得</span></b><br />
<b><span style="color: #6aa84f;"> '**********************************</span></b><br />
<b><span style="color: #6aa84f;"> <a href="http://blacksmithinforge.blogspot.jp/2017/01/vbnet.html" target="_blank">'この部分は前回の記事を参照してください。</a></span></b><br />
<br />
Dim acToken As String = mdlUtils.GetToken("bucket:read")<br />
If acToken = "" Then<br />
Exit Sub<br />
End If<br />
<br />
<b><span style="color: #6aa84f;"> '**********************************</span></b><br />
<b><span style="color: #6aa84f;"> ' バケットを取得</span></b><br />
<b><span style="color: #6aa84f;"> '**********************************</span></b><br />
<b><span style="color: #6aa84f;"><br /></span></b>
<b><span style="color: #6aa84f;"> 'RestSharpでクライアントを作成</span></b><br />
Dim url As String = "https://developer.api.autodesk.com"<br />
Dim _client As New RestSharp.RestClient(url)<br />
<b><span style="color: #6aa84f;"><br /></span></b>
<b><span style="color: #6aa84f;"> 'RestSharpでリクエストを作成</span></b><br />
Dim authReq As New RestSharp.RestRequest()<br />
With authReq<br />
.Resource = "oss/v2/buckets"<br />
<br />
<b><span style="color: #6aa84f;"> 'メソッド</span></b><br />
.Method = RestSharp.Method.GET<br />
<br />
<b><span style="color: #6aa84f;"> 'ヘッダー</span></b><br />
.AddHeader("Authorization", "Bearer " + acToken)<br />
<br />
End With<br />
<br />
<span style="color: #6aa84f;"><b> '送信</b></span><br />
'POSTする<br />
Dim result As RestSharp.IRestResponse = _client.Execute(authReq)<br />
<br />
If result.StatusCode = Net.HttpStatusCode.OK Then<br />
<b><span style="color: #6aa84f;"><br /></span></b>
<b><span style="color: #6aa84f;"> '200OKの場合</span></b><br />
<br />
Dim responseString As String = result.Content<br />
<b><span style="color: #6aa84f;"> 'Newtonsont.JsonのJSON解読メソッドを使うと便利</span></b><br />
<b><span style="color: #6aa84f;"> 'まず以下の構文でオブジェクトを作成します。</span></b><br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
<span style="color: #6aa84f;"><b> '"items"を取得しjArrayオブジェクトとする</b></span><br />
<span style="color: red;"><b> Dim itemArray As Newtonsoft.Json.Linq.JArray = jsonObj("items")</b></span><br />
<span style="color: #6aa84f;"><b> '配列を走査する</b></span><br />
For Each item As Newtonsoft.Json.Linq.JObject In itemArray<br />
<span style="color: #6aa84f;"><b>'バケットキー</b></span><br />
Dim strBucketKey As String = item("bucketKey")<br />
<b><span style="color: #6aa84f;"> '作成した日付(ミリセカンド)</span></b><br />
Dim strCreatedDate As String = item("createdDate")<br />
<b><span style="color: #6aa84f;"> 'ポリシーキー</span></b><br />
Dim strPolicyKey As String = item("policyKey")<br />
<br />
<span style="color: #6aa84f;"><b> 'タイムスタンプから日付へ変換</b></span><br />
Dim intTimeStamp As Int64 = Int64.Parse(strCreatedDate)<br />
Dim dtCreateDate As DateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(intTimeStamp)<br />
<br />
<b><span style="color: #6aa84f;"> 'リストボックスのアイテムを追加する</span></b><br />
lbxBuckets.Items.Add(New ListItem(strBucketKey + " / 作成日時 : " + dtCreateDate.ToLocalTime.ToString + " / ポリシーキー : " + strPolicyKey, strBucketKey))<br />
<br />
Next<br />
lblStatus.Text = itemArray.Count.ToString + "個のバケットが見つかりました。"<br />
Else<br />
Dim responseString As String = result.Content<br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
lblStatus.Text = "取得に失敗しました。" + vbTab + jsonObj("reason")<br />
<br />
<br />
End If<br />
End Sub<br />
End Class<br />
<br />
<h2>
実行する</h2>
実行すると以下のようになります。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyHKXDulQZsmT3tqztXFwTOun1DYMulY_E6dM9XoALEQpotEMlTNsPgXMvZzc7HXrSsDm_4xs_4clAbTlqw0mJ2tB1B3CpqWVTMvegybkfPcaKDIBxgdqq44NsJx7G2qQBkIyBYgL0Ng0/s1600/bs00087.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="147" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyHKXDulQZsmT3tqztXFwTOun1DYMulY_E6dM9XoALEQpotEMlTNsPgXMvZzc7HXrSsDm_4xs_4clAbTlqw0mJ2tB1B3CpqWVTMvegybkfPcaKDIBxgdqq44NsJx7G2qQBkIyBYgL0Ng0/s400/bs00087.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">現在のバケットの一覧</td></tr>
</tbody></table>
髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-5210434621546335552017-01-19T19:44:00.000+09:002017-01-21T09:34:10.652+09:00バケット作成 + VB.net<h2>
バケットを作成する</h2>
バケットを作成するにはまずbucket:createスコープで<span style="color: red;"><b>アクセストークン</b></span>を取得し、<span style="color: red;"><b>ポリシーキー</b></span>(データの保持期間)と<span style="color: red;"><b>バケット名</b></span>(bucketId)を決めてPOSTで取得するという手順でした。これをvb.netで実装してみます。<br />
<h2>
アクセストークン取得モジュール</h2>
アクセストークンは様々な場面で必要なので、モジュールで関数にしておきます。<br />
<br />
プロジェクトにモジュールを追加して「mdlUtils.vb」とします。以下はコードサンプルです。<br />
<br />
Imports System.Net<br />
<br />
<br />
Module mdlUtils<br />
<br />
Public Const CLIENTID As String = "<span style="color: blue;"><b>自分のクライアントID</b></span>"<br />
Public Const CLIENTSECRET As String = "<span style="color: blue;"><b>自分のクライアントシークレット</b></span>"<br />
Private ENDPOINT As String = "https://developer.api.autodesk.com"-<br />
<br />
<span style="color: #6aa84f;"> ''' <summary></span><br />
<span style="color: #6aa84f;"> ''' 目的に応じたアクセストークンを取得する</span><br />
<span style="color: #6aa84f;"> ''' </summary></span><br />
<span style="color: #6aa84f;"> ''' <param name="scopeString">スコープ</param></span><br />
<span style="color: #6aa84f;"> ''' <returns></returns></span><br />
Public Function GetToken(ByVal scopeString As String) As String<br />
<br />
<span style="color: #6aa84f;"> 'RestSharpでクライアントを作成</span><br />
Dim _client As New RestSharp.RestClient(ENDPOINT)<br />
<span style="color: #6aa84f;"> 'RestSharpでリクエストを作成</span><br />
Dim authReq As New RestSharp.RestRequest()<br />
With authReq<br />
.Resource = "authentication/v1/authenticate"<br />
<br />
<span style="color: #6aa84f;"> 'メソッド</span><br />
.Method = RestSharp.Method.POST<br />
<br />
<span style="color: #6aa84f;"> 'ヘッダー</span><br />
.AddHeader("Content-Type", "application/x-www-form-urlencoded")<br />
<br />
<span style="color: #6aa84f;"> 'ボディ</span><br />
.AddParameter("client_id", CLIENTID)<br />
.AddParameter("client_secret", CLIENTSECRET)<br />
.AddParameter("grant_type", "client_credentials")<br />
<br />
<span style="color: #6aa84f;">'スコープ</span><br />
.AddParameter("scope", scopeString)<br />
End With<br />
<br />
<span style="color: #6aa84f;"> 'POSTする</span><br />
Dim result As RestSharp.IRestResponse = _client.Execute(authReq)<br />
<br />
If result.StatusCode = HttpStatusCode.OK Then<br />
<br />
<span style="color: #6aa84f;"> '結果(json形式の結果が文字列で返ってくる)</span><br />
<span style="color: #6aa84f;"> 'このjsonは以下の形式となる</span><br />
<span style="color: #6aa84f;"> '{</span><br />
<span style="color: #6aa84f;"> ' "token_type": "Bearer",</span><br />
<span style="color: #6aa84f;"> ' "expires_in": 1799,</span><br />
<span style="color: #6aa84f;"> ' "access_token": "Ff387cyQXw1elOT3nldiFIKBqDOs"</span><br />
<span style="color: #6aa84f;"> '}</span><br />
<span style="color: #6aa84f;"> </span>Dim responseString As String = result.Content<br />
<span style="color: #6aa84f;"> 'ここからaccess_tokenの値だけを取り出す</span><br />
<span style="color: #6aa84f;"><br /></span>
<span style="color: #6aa84f;"> '文字列を操作しても可能だが、Newtonsont.JsonのJSON解読メソッドを使うと便利です。</span><br />
<span style="color: #6aa84f;"> '使い方はまず以下の構文でオブジェクトを作成します。</span><br />
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)<br />
<br />
<span style="color: #6aa84f;">'アクセストークンをオブジェクトに引数を与えて取得します</span><br />
Dim acToken As String = jsonObj("access_token")<br />
<br />
<span style="color: #6aa84f;"> 'Label1の表示を変更</span><br />
Return acToken<br />
<br />
Else<br />
<span style="color: #6aa84f;">'失敗した場合</span><br />
Return ""<br />
End If<br />
End Function<br />
End Module<br />
<div>
<br /></div>
<h2>
WebFormの追加</h2>
<div>
<br /></div>
<div>
WebFormを一つ追加して、下の図のようにリストボックスとテキストボックス、ラベルを追加します。</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSsZwMBijVsB8J72rQZng7Kln4ako5wRM1o72WzDJuD1FZbij1wV823RNHargNnRQBmKMNGPND7IZAgW61B-4a4beKL0kSsjyayI2vnFOmlquzAkwQLwSUOPuoBTmMaKl0D7pIrGEJLeY/s1600/bs00081.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSsZwMBijVsB8J72rQZng7Kln4ako5wRM1o72WzDJuD1FZbij1wV823RNHargNnRQBmKMNGPND7IZAgW61B-4a4beKL0kSsjyayI2vnFOmlquzAkwQLwSUOPuoBTmMaKl0D7pIrGEJLeY/s400/bs00081.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">WebFormにコントロールを追加</td></tr>
</tbody></table>
<div>
<br /></div>
<h2>
ボタンアクションを追加</h2>
<div>
btnCreateBucketをダブルクリックして、コードを追加すします。RestSharpで送信するデータは今回はJSONです。</div>
<div>
<br /></div>
<div>
<div>
Public Class WebForm2</div>
<div>
Inherits System.Web.UI.Page</div>
<div>
<br /></div>
<div>
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles btnCreateBucket.Click</div>
<div>
<br /></div>
<div>
<b><span style="color: #6aa84f;"> '**********************************</span></b></div>
<div>
<b><span style="color: #6aa84f;"> ' アクセストークンを取得</span></b></div>
<div>
<b><span style="color: #6aa84f;"> '**********************************</span></b></div>
<div>
<br /></div>
<div>
Dim acToken As String = mdlUtils.GetToken("bucket:create")</div>
<div>
If acToken = "" Then</div>
<div>
Exit Sub</div>
<div>
End If</div>
<div>
<br /></div>
<div>
<b><span style="color: #6aa84f;"> '**********************************</span></b></div>
<div>
<b><span style="color: #6aa84f;"> ' バケットを作成</span></b></div>
<div>
<b><span style="color: #6aa84f;"> '**********************************</span></b></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b><span style="color: #6aa84f;"> 'RestSharpでクライアントを作成</span></b></div>
<div>
Dim url As String = "https://developer.api.autodesk.com"</div>
<div>
Dim _client As New RestSharp.RestClient(url)</div>
<div>
<br /></div>
<div>
<span style="color: #6aa84f;"><b>'RestSharpでリクエストを作成</b></span></div>
<div>
Dim authReq As New RestSharp.RestRequest()</div>
<div>
With authReq</div>
<div>
.Resource = "oss/v2/buckets"</div>
<div>
<br /></div>
<div>
<span style="color: #6aa84f;"><b>'メソッド</b></span></div>
<div>
.Method = RestSharp.Method.POST</div>
<div>
<br /></div>
<div>
<span style="color: #6aa84f;"><b>'ヘッダー</b></span></div>
<div>
.AddHeader("Content-Type", "application/json")</div>
<div>
.AddHeader("Authorization", "Bearer " + acToken)</div>
<div>
<br /></div>
<div>
<span style="color: #6aa84f;"><b>'ボディ(JSON形式で送る場合には匿名型を使用します。)</b></span><br />
<span style="color: #6aa84f;"><b> '{</b></span><br />
<span style="color: #6aa84f;"><b> ' </b></span><span style="color: #6aa84f;"><b>"bucketKey":"mybucket",</b></span><br />
<span style="color: #6aa84f;"><b> ' "policyKey":"transient"</b></span><br />
<span style="color: #6aa84f;"><b> '}</b></span></div>
<div>
<span style="color: red;"> .AddJsonBody(New With {</span></div>
<div>
<span style="color: red;"> Key .bucketKey = tbxBucketKey.Text,</span></div>
<div>
<span style="color: red;"> Key .policyKey = lbxPolicy.SelectedValue</span></div>
<div>
<span style="color: red;"> })</span></div>
<div>
End With</div>
<div>
<br /></div>
<div>
<span style="color: #6aa84f;"><b> 'POSTする</b></span></div>
<div>
Dim result As RestSharp.IRestResponse = _client.Execute(authReq)</div>
<div>
<br /></div>
<div>
If result.StatusCode = Net.HttpStatusCode.OK Then</div>
<div>
<br /></div>
<div>
<span style="color: #6aa84f;"><b> '結果(json形式の結果が文字列で返ってくる)</b></span></div>
<div>
<span style="color: #6aa84f;"><b> '{</b></span></div>
<div>
<span style="color: #6aa84f;"><b> ' "bucketKey":"apptestbucket",</b></span></div>
<div>
<span style="color: #6aa84f;"><b> ' "bucketOwner":"RlKfGlAbb7N8VJwLllOvpfonB1Ex52qG",</b></span></div>
<div>
<span style="color: #6aa84f;"><b> ' "createdDate":1463785698600,</b></span></div>
<div>
<span style="color: #6aa84f;"><b> ' "permissions":[</b></span></div>
<div>
<span style="color: #6aa84f;"><b> ' {</b></span></div>
<div>
<span style="color: #6aa84f;"><b> ' "authId":"RlKffonB1Ex52GlAbb7N8VJwLllOvpqG",</b></span></div>
<div>
<span style="color: #6aa84f;"><b> ' "access":"full"</b></span></div>
<div>
<span style="color: #6aa84f;"><b> ' }</b></span></div>
<div>
<span style="color: #6aa84f;"><b> ' ],</b></span></div>
<div>
<span style="color: #6aa84f;"><b> ' "policyKey":"transient"</b></span></div>
<div>
<span style="color: #6aa84f;"><b> '}</b></span></div>
<div>
Dim responseString As String = result.Content</div>
<div>
<span style="color: #6aa84f;"><b>'文字列を操作しても可能だが、Newtonsont.JsonのJSON解読メソッドを使うと便利。</b></span></div>
<div>
<span style="color: #6aa84f;"><b> '使い方はまず以下の構文でオブジェクトを作成します。</b></span></div>
<div>
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)</div>
<div>
<span style="color: #6aa84f;"><b>'バケットキーを取り出す</b></span></div>
<div>
Dim bucketKeyString As String = jsonObj("bucketKey")</div>
<div>
<b><span style="color: #6aa84f;"> 'ステータスに出力</span></b></div>
<div>
lblStatus.Text = bucketKeyString + "の作成に成功しました。"</div>
<div>
<br /></div>
<div>
Else</div>
<div>
<b><span style="color: #6aa84f;"> 'エラーの場合は理由を示すJSONが返ってくる</span></b></div>
<div>
<b><span style="color: #6aa84f;"> ' {</span></b></div>
<div>
<b><span style="color: #6aa84f;"> ' "reason":"Valid field 'bucketKey' must be of the form [-_.a-z0-9]{3,128}"</span></b></div>
<div>
<b><span style="color: #6aa84f;"> '}</span></b></div>
<div>
Dim responseString As String = result.Content</div>
<div>
Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)</div>
<div>
Dim reasonString As String = jsonObj("reason")</div>
<div>
lblStatus.Text = "バケットの作成に失敗しました。理由:" + reasonString</div>
<div>
<br /></div>
<div>
End If</div>
<div>
End Sub</div>
<div>
End Class</div>
</div>
<div>
<br /></div>
<h3>
RestSharpでJSONを送る</h3>
<div>
RestSharpでBODYにJSON形式のデータをセットする場合は、赤字で示した部分のように.AddJsonBodyの引数に匿名型のオブジェクトをセットします。</div>
<div>
<br /></div>
<h2>
実行してみる</h2>
<div>
<br /></div>
<div>
ビルドして実行してみます。</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPy4veIh-rvPiXRDHxNcsGcRs3i_xl1mHG0kP_lytBnklI3yQnVHGe3JxO3q9qzF3_TqhohnYXB4EUPC9hlmCyPTxXgcZOnzrHiWLvtuAfed6Ii52I14YLzBpNJGdWIGsT2MGiqwf_-hk/s1600/bs00082.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPy4veIh-rvPiXRDHxNcsGcRs3i_xl1mHG0kP_lytBnklI3yQnVHGe3JxO3q9qzF3_TqhohnYXB4EUPC9hlmCyPTxXgcZOnzrHiWLvtuAfed6Ii52I14YLzBpNJGdWIGsT2MGiqwf_-hk/s400/bs00082.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ブラウザで実行</td></tr>
</tbody></table>
<div>
データ保存期間とバケットキーを指定して「バケット作成」を押すと</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXTcHn1BS36iBU8JD2H4MDu42MJwUFfazSEub4ahUl6PvEGK63MAVfpqZYWaxfZ5x6aL2m_2-1cguWAFw9KF69gm0DRKi5_2aupYE3Yb6ZqQVaq3OOkm2VEZ3bH2NNHZIrGUBrN1n0IZU/s1600/bs00083.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXTcHn1BS36iBU8JD2H4MDu42MJwUFfazSEub4ahUl6PvEGK63MAVfpqZYWaxfZ5x6aL2m_2-1cguWAFw9KF69gm0DRKi5_2aupYE3Yb6ZqQVaq3OOkm2VEZ3bH2NNHZIrGUBrN1n0IZU/s400/bs00083.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">バケットが作成された</td></tr>
</tbody></table>
<div>
もう一度押すとすでに同じ名前のバケットがあることがわかります。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR1ZSJ0lK4kEB9jhWPS38Hhshcsrsw5E9WpuXEgMQqCCGY0RL0muFxnEXv4oMVjNIZsC_dYmiBvEtQMb_pATRm77xiVAjY9c-92J9YHLsiab2Mcf3LdoJTe3LEQVPBAp81TojnIY9toaQ/s1600/bs00084.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR1ZSJ0lK4kEB9jhWPS38Hhshcsrsw5E9WpuXEgMQqCCGY0RL0muFxnEXv4oMVjNIZsC_dYmiBvEtQMb_pATRm77xiVAjY9c-92J9YHLsiab2Mcf3LdoJTe3LEQVPBAp81TojnIY9toaQ/s400/bs00084.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">同じ名前のバケットは作成できない</td></tr>
</tbody></table>
</div>
<div>
バケットの名前に大文字のアルファベットを使うと、同じくエラーになります。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiukhylXgjxJQQHzmxvJ6_h8u1U3UBauKXnR77Zq08xKKrIhgY0glM1uhi0l_acM7nO9sg2tU22cIlPj06Cml2qGmR8QeYxtw7hmdEPFSYyohh44texEzfg3cIUofyw-AvtG2UiPFIbEws/s1600/bs00085.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiukhylXgjxJQQHzmxvJ6_h8u1U3UBauKXnR77Zq08xKKrIhgY0glM1uhi0l_acM7nO9sg2tU22cIlPj06Cml2qGmR8QeYxtw7hmdEPFSYyohh44texEzfg3cIUofyw-AvtG2UiPFIbEws/s400/bs00085.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">文字の制約のエラー</td></tr>
</tbody></table>
</div>
<div>
<br /></div>
<div>
<br /></div>
髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-37360710236323080392017-01-15T22:10:00.000+09:002017-01-17T23:00:36.605+09:00アクセストークン + VB.net<h2>
サーバーサイドでアクセストークンを取得する</h2>
ここまでで基本的な知識は手に入りました。ここからはASP.NET WebFormを使って、FORGEに取り組んでみます。ビューアのチュートリアルでは、JavaScriptに直接<br />
<br />
<ul>
<li>オブジェクトID</li>
<li>アクセストークン</li>
</ul>
<br />
を書き込んでいました。また、アクセストークンを取得するには<br />
<ul>
<li>クライアントID</li>
<li>クライアントシークレット</li>
</ul>
が必要です。しかし、クライアントサイドのJavaScriptはブラウザーの開発者ツールを使えば「もろばれ」状態なので、大事な情報をクライアントサイドに置くわけにはいきません。<br />
<br />
今回はWebFormを使って、アクセストークンを取得してみます。Webフォームのアクションはサーバーサイドで実行されるので、大事な情報をクライアントサイドに置かなくて済みます。<br />
<br />
まずはVisual Studioで新しいWebFormプロジェクトを作成します。<br />
<h2>
RestSharpを導入する</h2>
アクセストークンを取得するにはRESTを使って、交信を行う必要があることがわかりました。VBでこれを実装するのはなかなか骨が折れそうですが、<a href="http://restsharp.org/" target="_blank">RestSharp</a>を使うことでこの難関を切り抜けることができます。プロジェクトにRestSharpを組み込みます。<br />
<br />
(1) [ツール]-[NuGetパッケージマネージャ]-[パッケージマネージャコンソール]<br />
(2) パッケージマネージャコンソールで<br />
PM> Install-Package RestSharp<br />
<br />
<h2>
WebFormを追加</h2>
<br />
(1) [プロジェクト]-[新しい項目の追加]<br />
(2) [Webフォーム]を選択して[追加]<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzorKE7yMNBsxRmCHxnOfamsUdIb1UIMajtR6ULlk-3WFaAN8zM2C3mne_XroektMZrxd0TFiioRASqW5Jtknl6kB7OmxDd1yOelLJdoAn9stmkiy-OmPOIci9J7FSRerMq6TPokZDF58/s1600/bs00076.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzorKE7yMNBsxRmCHxnOfamsUdIb1UIMajtR6ULlk-3WFaAN8zM2C3mne_XroektMZrxd0TFiioRASqW5Jtknl6kB7OmxDd1yOelLJdoAn9stmkiy-OmPOIci9J7FSRerMq6TPokZDF58/s320/bs00076.PNG" width="320" /></a></div>
(3) 画面左下の[並べて表示]をクリック<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFMxYLzCUbBr11vxJBmzWTtw52l5zyddkJEF9nrR7jzdM3tfNzvDx_inoO36t3JyKjmghci8K-4xffs-Wko-RcKQm0YlHFKR5nGr3SaMDCumL8JWkng94g2taa9yYYhIZJKFPHT6gR2LQ/s1600/bs00077.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="90" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFMxYLzCUbBr11vxJBmzWTtw52l5zyddkJEF9nrR7jzdM3tfNzvDx_inoO36t3JyKjmghci8K-4xffs-Wko-RcKQm0YlHFKR5nGr3SaMDCumL8JWkng94g2taa9yYYhIZJKFPHT6gR2LQ/s320/bs00077.png" width="320" /></a></div>
(4) ボタンとラベルを追加<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4WaUBAbbAUsh3ohLufDIidjIx8u8uRz624ixmtNZEh6Hz00zjJnKOOG4HXHe0CrVVGR9xusOZI9byXekOmKEMcAPzTtZLa-qSMsbnyJ1GyEwv0-S1pt2c3lhXiS26v79gZFif6OBgvws/s1600/bs00078.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4WaUBAbbAUsh3ohLufDIidjIx8u8uRz624ixmtNZEh6Hz00zjJnKOOG4HXHe0CrVVGR9xusOZI9byXekOmKEMcAPzTtZLa-qSMsbnyJ1GyEwv0-S1pt2c3lhXiS26v79gZFif6OBgvws/s320/bs00078.png" width="320" /></a></div>
<br />
<h2>
ボタンのアクションを追加</h2>
(1) 追加したボタンをダブルクリックして、コードを表示する<br />
(2) コードは以下のようになります。<br />
<br />
<span style="color: red;">Imports System.Net</span><br />
<br />
Public Class WebForm1<br />
Inherits System.Web.UI.Page<br />
<br />
<br />
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click<br />
<br />
<span style="color: #6aa84f;"> <b>'ラベルをクリア</b></span><br />
Label1.Text = ""<br />
<br />
'<span style="color: #6aa84f;"><b>クライアントIDとクライアントシークレット</b></span><br />
Dim client_id As String = "<span style="color: blue;">自分のクライアントIDで置き換え</span>"<br />
Dim client_secret As String = "<span style="color: blue;">自分のクラインとシークレットで置き換え</span>"<br />
<br />
<span style="color: #6aa84f;"><b> 'URL</b></span><br />
Dim strClient As String = "https://developer.api.autodesk.com"<br />
<br />
<b><span style="color: #6aa84f;">'RestSharpでクライアントを作成</span></b><br />
<span style="color: red;">Dim _client As New RestSharp.RestClient(strClient)</span><br />
<b><span style="color: #6aa84f;">'RestSharpでリクエストを作成</span></b><br />
Dim authReq As New RestSharp.RestRequest()<br />
<span style="color: red;">With authReq</span><br />
<span style="color: red;"> .Resource = "authentication/v1/authenticate"</span><br />
<br />
<b><span style="color: #6aa84f;"> 'メソッド</span></b><br />
.<span style="color: red;">Method = RestSharp.Method.POST</span><br />
<br />
<span style="color: #6aa84f;"><b>'ヘッダー</b></span><br />
<span style="color: red;">.AddHeader("Content-Type", "application/x-www-form-urlencoded")</span><br />
<br />
<b><span style="color: #6aa84f;"> 'ボディ</span></b><br />
<span style="color: red;">.AddParameter("client_id", client_id)</span><br />
<span style="color: red;"> .AddParameter("client_secret", client_secret)</span><br />
<span style="color: red;"> .AddParameter("grant_type", "client_credentials")</span><br />
<br />
<span style="color: #6aa84f;"><b> 'スコープはとりあえずdata:read</b></span><br />
<span style="color: red;"> .AddParameter("scope", "data:read")</span><br />
<span style="color: red;"> End With</span><br />
<br />
<b><span style="color: #6aa84f;">'リクエストを送信</span></b><br />
Dim result As RestSharp.IRestResponse = _client.Execute(authReq)<br />
<br />
If result.StatusCode = HttpStatusCode.OK Then<br />
<b><span style="color: #6aa84f;"><br /></span></b>
<b><span style="color: #6aa84f;"> '結果(json形式の結果が文字列で返ってくる)</span></b><br />
<b><span style="color: #6aa84f;"> 'このjsonは以下の形式となる</span></b><br />
<b><span style="color: #6aa84f;"> '{</span></b><br />
<b><span style="color: #6aa84f;"> ' "token_type": "Bearer",</span></b><br />
<b><span style="color: #6aa84f;"> ' "expires_in": 1799,</span></b><br />
<b><span style="color: #6aa84f;"> ' "access_token": "Ff387cyQXw1elOT3nldiFIKBqDOs"</span></b><br />
<b><span style="color: #6aa84f;"> '}</span></b><br />
Dim responseString As String = result.Content<br />
<b><span style="color: #6aa84f;"> 'ここからaccess_tokenの値だけを取り出す</span></b><br />
<span style="color: #6aa84f;"><b><br /></b></span>
<span style="color: #6aa84f;"><b> '文字列を操作しても可能だが、Newtonsont.Jsonの解読メソッドを使うと便利です。</b></span><br />
<span style="color: #6aa84f;"><b> '使い方はまず以下の構文でオブジェクトを作成します。</b></span><br />
<span style="color: red;">Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString)</span><br />
<br />
<b><span style="color: #6aa84f;"> 'アクセストークンをオブジェクトに引数を与えて取得します</span></b><br />
<span style="color: red;">Dim acToken As String = jsonObj("access_token")</span><br />
<br />
<b><span style="color: #6aa84f;"> 'Label1の表示を変更</span></b><br />
Label1.Text = acToken<br />
<br />
Else<br />
<span style="color: #6aa84f;"><b> '失敗した場合</b></span><br />
Label1.Text = "アクセストークンを取得できませんでした。"<br />
<br />
End If<br />
<br />
End Sub<br />
End Class<br />
<br />
ポイントはRestSharpのリクエストの作り方と、戻り値のJSONからaccess_tokenの値と取り出す部分です。Newtonsoft.Jsonは規定でASP.netに組み込まれているので、特に参照を操作する必要はありません。<br />
<br />
<h2>
実行してみる</h2>
<br />
ビルドして実行してみます。最初の画面はこうです。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRBfwN8EssqRi6ogCCQBZkimPjg1Wd8jg__Unae-akIu2HP-IcqWeL9pFnw7KjJlUEQQBPUbXVE3M_C0M8DlKc3M8GoVxBKyoH3YKVTdj9J7gCMR9n__YCe-0jIGqrM-g1pNJm_Pcgdv0/s1600/bs00079.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRBfwN8EssqRi6ogCCQBZkimPjg1Wd8jg__Unae-akIu2HP-IcqWeL9pFnw7KjJlUEQQBPUbXVE3M_C0M8DlKc3M8GoVxBKyoH3YKVTdj9J7gCMR9n__YCe-0jIGqrM-g1pNJm_Pcgdv0/s320/bs00079.PNG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ボタンを押してみましょう</td></tr>
</tbody></table>
ボタンを押すと<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJGmMx3vu4EKyKM0VnqW55fc0xeT6pcMLYlz401CmQTO7Czy7mih4YPporwr6WZ4mPiUGllJArQn_WxqYRvkSvCoBPwKe9v00oyNI93ABFl-DkQuvBIqbDPlSSUu2OPKT5imHXFrO6DOk/s1600/bs00080.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJGmMx3vu4EKyKM0VnqW55fc0xeT6pcMLYlz401CmQTO7Czy7mih4YPporwr6WZ4mPiUGllJArQn_WxqYRvkSvCoBPwKe9v00oyNI93ABFl-DkQuvBIqbDPlSSUu2OPKT5imHXFrO6DOk/s320/bs00080.PNG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">アクセストークンが取得できた!</td></tr>
</tbody></table>
アクセストークンが取得できました。<br />
結構少ないコードで、安全にアクセストークンを取得できることがわかりました。<br />
<br />髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-68137073161884823782017-01-06T22:43:00.001+09:002017-02-04T18:39:17.850+09:00ビューアで表示する(2)~表示ビューの変更<h2>
3Dビューが表示されたのは偶然だった?</h2>
前回無事ビューアで表示できたので、今回はチュートリアルのStep3を解明してみます。考えてみれば、Revitのデータをアップロードして、2dと3dのビューを表示用に変換するように、命令をしたわけですから、前回のビューアで表示するように指定したビューには複数のビューがあったはずです。にもかかわらず、3Dビューが表示されたのは「単なる偶然」だったのですね。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjPht7G_h8ppgL0iW7QfQWtuf0hRCIKr4ic0E5py5tgdHxz4_H40vxNnDZGw3-6Uh2x2I7YvDeDV3uBqFiZixit1v99bR24pxDFRRfQv2Aj7CbaUINZPa-QZoFmCkiXdZsZactWLcSb1Q/s1600/bs00069.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjPht7G_h8ppgL0iW7QfQWtuf0hRCIKr4ic0E5py5tgdHxz4_H40vxNnDZGw3-6Uh2x2I7YvDeDV3uBqFiZixit1v99bR24pxDFRRfQv2Aj7CbaUINZPa-QZoFmCkiXdZsZactWLcSb1Q/s400/bs00069.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">運よく?表示された3Dビュー</td></tr>
</tbody></table>
Step3では画面上部に「Nextボタン」を表示して、クリックするごとに表示可能ビューを入れ変えるようにしてみます。<br />
<br />
<h2>
<a href="https://developer.autodesk.com/en/docs/viewer/v2/tutorials/basic-viewer/">Step3 をフォローする</a></h2>
<h3>
ボタンをつくる</h3>
まずビューアの上にボタンを作成します。これはHTMLファイルの<div>で区切られたビューアの<br />
<pre style="background: rgb(252, 252, 252); border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #333333; font-family: monospace, serif; font-size: 14px; line-height: 1.42857; overflow: auto; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"><span class="p" style="box-sizing: border-box;"><</span><span class="nt" style="box-sizing: border-box; color: navy;">div</span> <span class="na" style="box-sizing: border-box; color: teal;">id</span><span class="o" style="box-sizing: border-box; font-weight: bold;">=</span><span class="s" style="box-sizing: border-box; color: #dd1144;">"MyViewerDiv"</span><span class="p" style="box-sizing: border-box;">></</span><span class="nt" style="box-sizing: border-box; color: navy;">div</span><span class="p" style="box-sizing: border-box;">></span></pre>
の行の直後に<br />
<pre style="background: rgb(252, 252, 252); border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #333333; font-family: monospace, serif; font-size: 14px; line-height: 1.42857; overflow: auto; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"><span class="p" style="box-sizing: border-box;"><</span><span class="nt" style="box-sizing: border-box; color: navy;">button</span> <span class="na" style="box-sizing: border-box; color: teal;">id</span><span class="o" style="box-sizing: border-box; font-weight: bold;">=</span><span class="s" style="box-sizing: border-box; color: #dd1144;">"MyNextButton"</span> <span class="na" style="box-sizing: border-box; color: teal;">onClick</span><span class="o" style="box-sizing: border-box; font-weight: bold;">=</span><span class="s" style="box-sizing: border-box; color: #dd1144;">"loadNextModel()"</span><span class="p" style="box-sizing: border-box;">></span>Next!<span class="p" style="box-sizing: border-box;"></</span><span class="nt" style="box-sizing: border-box; color: navy;">button</span><span class="p" style="box-sizing: border-box;">></span></pre>
とボタンタグを加えます。<br />
ボタンのIDはMyNextButtonで、onClickイベントにloadNextModel()関数を指定しています。<br />
次にボタンのスタイルを指定するために、<head>~</head>内の<style>~</style>タグのなかに<br />
<pre style="background: rgb(252, 252, 252); border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #333333; font-family: monospace, serif; font-size: 14px; line-height: 1.42857; overflow: auto; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"><span class="nn" style="box-sizing: border-box; color: #555555;">#MyNextButton</span> <span class="p" style="box-sizing: border-box;">{</span>
<span class="nb" style="box-sizing: border-box; color: #0086b3;">position</span><span class="o" style="box-sizing: border-box; font-weight: bold;">:</span> <span class="nb" style="box-sizing: border-box; color: #0086b3;">absolute</span><span class="p" style="box-sizing: border-box;">;</span>
<span class="nb" style="box-sizing: border-box; color: #0086b3;">top</span><span class="o" style="box-sizing: border-box; font-weight: bold;">:</span> <span class="m" style="box-sizing: border-box; color: #009999;">5px</span><span class="p" style="box-sizing: border-box;">;</span>
<span class="nb" style="box-sizing: border-box; color: #0086b3;">left</span><span class="o" style="box-sizing: border-box; font-weight: bold;">:</span> <span class="m" style="box-sizing: border-box; color: #009999;">5px</span><span class="p" style="box-sizing: border-box;">;</span>
<span class="nb" style="box-sizing: border-box; color: #0086b3;">z-index</span><span class="o" style="box-sizing: border-box; font-weight: bold;">:</span> <span class="m" style="box-sizing: border-box; color: #009999;">1</span><span class="p" style="box-sizing: border-box;">;</span>
<span class="nb" style="box-sizing: border-box; color: #0086b3;">font-size</span><span class="o" style="box-sizing: border-box; font-weight: bold;">:</span> <span class="m" style="box-sizing: border-box; color: #009999;">40px</span><span class="p" style="box-sizing: border-box;">;</span>
<span class="nb" style="box-sizing: border-box; color: #0086b3;">cursor</span><span class="o" style="box-sizing: border-box; font-weight: bold;">:</span> <span class="nb" style="box-sizing: border-box; color: #0086b3;">pointer</span><span class="p" style="box-sizing: border-box;">;</span>
<span class="p" style="box-sizing: border-box;">}</span></pre>
と付け加えます。従いまして、Visual Studioとしては下の図のようになります。<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyMOVlJp78SjT3etY7SBGmQumLHj8dhCRAhLY1fobkAwi1xJPu8LQLks96AgR9DqNUi4tZcD0Y8-5BmXLaUa0ckfWfMr-SxseR-Mvcajo08pQekmUi_jWhFk-yZmdxpP9V8VIazzV3UVU/s1600/bs00071.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyMOVlJp78SjT3etY7SBGmQumLHj8dhCRAhLY1fobkAwi1xJPu8LQLks96AgR9DqNUi4tZcD0Y8-5BmXLaUa0ckfWfMr-SxseR-Mvcajo08pQekmUi_jWhFk-yZmdxpP9V8VIazzV3UVU/s400/bs00071.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ボタンのスタイルとタグを追加</td></tr>
</tbody></table>
<h3>
onClickイベント関数の追加</h3>
ボタンをクリックしたときに処理される関数を記述します。とりあえず<br />
<pre style="background: rgb(252, 252, 252); border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #333333; font-family: monospace, serif; font-size: 14px; line-height: 1.42857; overflow: auto; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"><span class="kd" style="box-sizing: border-box; font-weight: bold;">function</span> <span class="nx" style="box-sizing: border-box;">loadNextModel</span><span class="p" style="box-sizing: border-box;">()</span> <span class="p" style="box-sizing: border-box;">{</span>
<span class="nx" style="box-sizing: border-box;">console</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">log</span><span class="p" style="box-sizing: border-box;">(</span><span class="s1" style="box-sizing: border-box; color: #dd1144;">'TODO: Load Next Model'</span><span class="p" style="box-sizing: border-box;">);</span>
<span class="p" style="box-sizing: border-box;">}</span></pre>
を追加するのですが、問題はどこに追加するのか?ということです。HTMLファイルにJavaScriptを記述する場合、<script>~</script>タグの間に記述するので、とりあえず、下のほうの</script>の直上に入れておきます。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2CcB8K5nufn0GOuvD9QmAAO12nkIuOj1YzOEQ_nn9m4aRxJQnfGbLHirKolU_ybcE4371Cqwy1MT8QUzxSfKMASB3NjxMyvxOI_4VAUrp30d0mDPlzGdVbI2NAAWPEGVRTrxNrHruJqU/s1600/bs00072.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2CcB8K5nufn0GOuvD9QmAAO12nkIuOj1YzOEQ_nn9m4aRxJQnfGbLHirKolU_ybcE4371Cqwy1MT8QUzxSfKMASB3NjxMyvxOI_4VAUrp30d0mDPlzGdVbI2NAAWPEGVRTrxNrHruJqU/s400/bs00072.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"></script>の直上にいれる</td></tr>
</tbody></table>
<h3>
グローバル変数の追加</h3>
すでに<script>タグの直後に var viewer; というグローバル変数が宣言されていますが、これにあと三つのグローバル変数を追加します。<br />
<br />
var lmvDoc;<br />
var viewables;<br />
var indexViewable;<br />
<br />
したがって、以下の図の位置に入ります。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKG5xeLGeeIEBJs5NItLN2b_t69cGj-x-kzaNPEjwrtrEaKdj9o4UTgOWpgU7oJEuGnjWEepJmRHlyusmBdO25tSnqBuZKVPaJjXGpJQ3G0CzAdCmDS-mk6-tsbiKGLQVOUktjAlMnLEg/s1600/bs00073.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKG5xeLGeeIEBJs5NItLN2b_t69cGj-x-kzaNPEjwrtrEaKdj9o4UTgOWpgU7oJEuGnjWEepJmRHlyusmBdO25tSnqBuZKVPaJjXGpJQ3G0CzAdCmDS-mk6-tsbiKGLQVOUktjAlMnLEg/s400/bs00073.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">グローバル変数を追加</td></tr>
</tbody></table>
<h3>
ロード成功時の関数(<span style="color: red;">onDocumentLoadSuccess</span>)の変更</h3>
既存のonDocumentLoadSuccess()を以下の内容で書き換えます。<br />
<div class="highlight-javascript" style="box-sizing: border-box; font-family: "Artifakt Element", "Open Sans", Helvetica, Arial, sans-serif; font-size: 14px;">
<div class="highlight json-block-collapsible jcb-fullSize" style="box-sizing: border-box; position: relative;">
<pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; font-family: monospace, serif; line-height: 1.42857; max-height: initial; overflow: hidden; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"><span style="background-color: #fcfcfc;"><span class="kd" style="box-sizing: border-box; color: #333333; font-weight: bold;">function</span><span style="color: #333333;"> </span><span class="nx" style="box-sizing: border-box; color: #333333;">onDocumentLoadSuccess</span><span class="p" style="box-sizing: border-box; color: #333333;">(</span><span class="nx" style="box-sizing: border-box; color: #333333;">doc</span><span class="p" style="box-sizing: border-box; color: #333333;">)</span><span style="color: #333333;"> </span><span class="p" style="box-sizing: border-box; color: #333333;">{</span><span style="color: #333333;">
</span><span class="c1" style="box-sizing: border-box; font-style: italic;"><span style="color: #6aa84f;">// docにある2Dおよび3Dの表示可能なビューの配列をグローバル変数viewablesに格納</span></span><span style="color: #333333;">
</span><span class="nx" style="box-sizing: border-box; color: #333333;">viewables</span><span style="color: #333333;"> </span><span class="o" style="box-sizing: border-box; color: #333333; font-weight: bold;">=</span><span style="color: #333333;"> </span><span class="nx" style="box-sizing: border-box; color: #333333;">Autodesk</span><span class="p" style="box-sizing: border-box; color: #333333;">.</span><span class="nx" style="box-sizing: border-box; color: #333333;">Viewing</span><span class="p" style="box-sizing: border-box; color: #333333;">.</span><span class="nx" style="box-sizing: border-box; color: #333333;">Document</span><span class="p" style="box-sizing: border-box; color: #333333;">.</span><span class="nx" style="box-sizing: border-box; color: #333333;">getSubItemsWithProperties</span><span class="p" style="box-sizing: border-box; color: #333333;">(</span><span class="nx" style="box-sizing: border-box; color: #333333;">doc</span><span class="p" style="box-sizing: border-box; color: #333333;">.</span><span class="nx" style="box-sizing: border-box; color: #333333;">getRootItem</span><span class="p" style="box-sizing: border-box; color: #333333;">(),</span><span style="color: #333333;"> </span><span class="p" style="box-sizing: border-box; color: #333333;">{</span><span class="s1" style="box-sizing: border-box; color: #dd1144;">'type'</span><span class="o" style="box-sizing: border-box; color: #333333; font-weight: bold;">:</span><span class="s1" style="box-sizing: border-box; color: #dd1144;">'geometry'</span><span class="p" style="box-sizing: border-box; color: #333333;">},</span><span style="color: #333333;"> </span><span class="kc" style="box-sizing: border-box; color: #333333; font-weight: bold;">true</span><span class="p" style="box-sizing: border-box; color: #333333;">);
</span><span style="color: #333333;"> </span></span><i style="background-color: white;"><span style="color: #6aa84f;">// 表示可能なビューがなければ終了</span></i><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="k" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">if</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">(</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">viewables</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">.</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">length</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="o" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">===</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="mi" style="background-color: #fcfcfc; box-sizing: border-box; color: #009999;">0</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">)</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">{</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">console</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">.</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">error</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">(</span><span class="s1" style="background-color: #fcfcfc; box-sizing: border-box; color: #dd1144;">'Document contains no viewables.'</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">);</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="k" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">return</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">;</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">}</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="c1" style="background-color: #fcfcfc; box-sizing: border-box; font-style: italic;"><span style="color: #6aa84f;">// ビューアを<div id=MyViewerDiv>に作成しグローバル変数viewerに格納</span></span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="kd" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">var</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">viewerDiv</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="o" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">=</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="nb" style="background-color: #fcfcfc; box-sizing: border-box; color: #0086b3;">document</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">.</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">getElementById</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">(</span><span class="s1" style="background-color: #fcfcfc; box-sizing: border-box; color: #dd1144;">'MyViewerDiv'</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">);</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">viewer</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="o" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">=</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="k" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">new</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">Autodesk</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">.</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">Viewing</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">.</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">Private</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">.</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">GuiViewer3D</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">(</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">viewerDiv</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">);</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="kd" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">var</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">errorCode</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="o" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">=</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">viewer</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">.</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">start</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">();</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="c1" style="background-color: #fcfcfc; box-sizing: border-box; font-style: italic;"><span style="color: #6aa84f;">// ビューアの初期化時のエラーを確認する</span></span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="k" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">if</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">(</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">errorCode</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">)</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">{</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">console</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">.</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">error</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">(</span><span class="s1" style="background-color: #fcfcfc; box-sizing: border-box; color: #dd1144;">'viewer.start() error - errorCode:'</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="o" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">+</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">errorCode</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">);</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="k" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">return</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">;</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">}</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="c1" style="background-color: #fcfcfc; box-sizing: border-box; font-style: italic;"><span style="color: #6aa84f;">// グローバル変数indexViewableを0に初期化し、グローバル偏すlmvDocにdocを格納</span></span><span class="c1" style="background-color: #fcfcfc; box-sizing: border-box; color: #999988; font-style: italic;">.</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">indexViewable</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="o" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">=</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="mi" style="background-color: #fcfcfc; box-sizing: border-box; color: #009999;">0</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">;</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">lmvDoc</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="o" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333; font-weight: bold;">=</span><span style="background-color: #fcfcfc; color: #333333;"> </span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">doc</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">;</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="c1" style="background-color: #fcfcfc; box-sizing: border-box; font-style: italic;"><span style="color: #6aa84f;">// loadModel関数を呼び出して、ビューアにモデルをロードする</span></span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="nx" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">loadModel</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">();</span><span style="background-color: #fcfcfc; color: #333333;">
</span><span class="p" style="background-color: #fcfcfc; box-sizing: border-box; color: #333333;">}</span><span style="background-color: #fcfcfc; color: #333333;">
</span></pre>
<div class="expand-overlay" style="background: linear-gradient(0deg, rgb(252, 252, 252), rgba(252, 252, 252, 0)); bottom: 1px; box-sizing: border-box; color: #666666; height: 40px; left: 1px; position: absolute; right: 1px;">
<br />
<div>
<br /></div>
</div>
</div>
</div>
働きはコメントをつけておきましたが、そもそもなぜonDocumentLoadSuccessに引数(doc)があるのかがわかりませんね。この関数自体は、Document.Load関数の第二引数の「onSuccessCallback」なのですが、これが引数をとるなどという記述は、HELPにはどこにもないですから。<br />
<br />
これらの謎は後日調べて報告します。<br />
<br />
さて、この関数の最後にあるloadModel()を、onDocumentLoadSuccess関数の後に記入します。<br />
<pre style="background: rgb(252, 252, 252); border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #333333; font-family: monospace, serif; font-size: 14px; line-height: 1.42857; overflow: auto; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"><span class="kd" style="box-sizing: border-box; font-weight: bold;">function</span> <span class="nx" style="box-sizing: border-box;">loadModel</span><span class="p" style="box-sizing: border-box;">()</span> <span class="p" style="box-sizing: border-box;">{
</span> <span class="kd" style="box-sizing: border-box; font-weight: bold;">var</span> <span class="nx" style="box-sizing: border-box;">initialViewable</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="nx" style="box-sizing: border-box;">viewables</span><span class="p" style="box-sizing: border-box;">[</span><span class="nx" style="box-sizing: border-box;">indexViewable</span><span class="p" style="box-sizing: border-box;">];
</span> <span class="kd" style="box-sizing: border-box; font-weight: bold;">var</span> <span class="nx" style="box-sizing: border-box;">svfUrl</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="nx" style="box-sizing: border-box;">lmvDoc</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">getViewablePath</span><span class="p" style="box-sizing: border-box;">(</span><span class="nx" style="box-sizing: border-box;">initialViewable</span><span class="p" style="box-sizing: border-box;">);</span>
<span class="kd" style="box-sizing: border-box; font-weight: bold;">var</span> <span class="nx" style="box-sizing: border-box;">modelOptions</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="p" style="box-sizing: border-box;">{</span>
<span class="nx" style="box-sizing: border-box;">sharedPropertyDbPath</span><span class="o" style="box-sizing: border-box; font-weight: bold;">:</span> <span class="nx" style="box-sizing: border-box;">lmvDoc</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">getPropertyDbPath</span><span class="p" style="box-sizing: border-box;">()</span>
<span class="p" style="box-sizing: border-box;">};</span>
<span class="nx" style="box-sizing: border-box;">viewer</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">loadModel</span><span class="p" style="box-sizing: border-box;">(</span><span class="nx" style="box-sizing: border-box;">svfUrl</span><span class="p" style="box-sizing: border-box;">,</span> <span class="nx" style="box-sizing: border-box;">modelOptions</span><span class="p" style="box-sizing: border-box;">,</span> <span class="nx" style="box-sizing: border-box;">onLoadModelSuccess</span><span class="p" style="box-sizing: border-box;">,</span> <span class="nx" style="box-sizing: border-box;">onLoadModelError</span><span class="p" style="box-sizing: border-box;">);</span>
<span class="p" style="box-sizing: border-box;">}</span></pre>
<br />
そして最後に、onClickイベント関数 loadModel を次の関数で置き換えます。<br />
<pre style="background: rgb(252, 252, 252); border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #333333; font-family: monospace, serif; font-size: 14px; line-height: 1.42857; overflow: auto; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"><span class="kd" style="box-sizing: border-box; font-weight: bold;">function</span> <span class="nx" style="box-sizing: border-box;">loadNextModel</span><span class="p" style="box-sizing: border-box;">()</span> <span class="p" style="box-sizing: border-box;">{</span>
<span class="nx" style="box-sizing: border-box;">viewer</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">tearDown</span><span class="p" style="box-sizing: border-box;">();</span>
<span class="nx" style="box-sizing: border-box;">viewer</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">setUp</span><span class="p" style="box-sizing: border-box;">(</span><span class="nx" style="box-sizing: border-box;">viewer</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">config</span><span class="p" style="box-sizing: border-box;">);</span>
<span class="c1" style="box-sizing: border-box; color: #999988; font-style: italic;">// インデックスを+1して次のビューをロード。最後まで行ったら0に戻る</span>
<span class="nx" style="box-sizing: border-box;">indexViewable</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="p" style="box-sizing: border-box;">(</span><span class="nx" style="box-sizing: border-box;">indexViewable</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">+</span> <span class="mi" style="box-sizing: border-box; color: #009999;">1</span><span class="p" style="box-sizing: border-box;">)</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">%</span> <span class="nx" style="box-sizing: border-box;">viewables</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">length</span><span class="p" style="box-sizing: border-box;">;</span>
<span class="nx" style="box-sizing: border-box;">loadModel</span><span class="p" style="box-sizing: border-box;">();</span>
<span class="p" style="box-sizing: border-box;">}</span></pre>
<br />
これで実行してみると、まず下の図のように3Dビューが表示されます。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGbeoB7mmZmKtw8zAYIhNkgborVz3lOevhircdFAh-cUx8EBBUIbKIHEFUzd2cTalzZbRZ1bbWpi7Zg7OEsBEMS_vVqZzttOsbZXhiRFFtkMTEoqBZk7PvmnpQpTSb_g1E7rwrWsD0wVQ/s1600/bs00074.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGbeoB7mmZmKtw8zAYIhNkgborVz3lOevhircdFAh-cUx8EBBUIbKIHEFUzd2cTalzZbRZ1bbWpi7Zg7OEsBEMS_vVqZzttOsbZXhiRFFtkMTEoqBZk7PvmnpQpTSb_g1E7rwrWsD0wVQ/s400/bs00074.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">左上のNEXTボタンを押す</td></tr>
</tbody></table>
が、左上に表示された[Next!]ボタンをクリックすると<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyC_LlT8mqn7JMptINemd6p8BaP0qCvTqplu_cBgIRgOQi02_FOGzuL3k1JOh_bWEZr9wCFouYamRmvMVCmALQqhlTJD6doFa5Ie5n6tdQ-WHJbyJvn3Scjayn9KF2uP0eqIG6AltXVec/s1600/bs00075.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyC_LlT8mqn7JMptINemd6p8BaP0qCvTqplu_cBgIRgOQi02_FOGzuL3k1JOh_bWEZr9wCFouYamRmvMVCmALQqhlTJD6doFa5Ie5n6tdQ-WHJbyJvn3Scjayn9KF2uP0eqIG6AltXVec/s400/bs00075.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">2D図面が表示される</td></tr>
</tbody></table>
2D図面が表示されます。押し続けると次々と図面が表示されて、また最初の3Dビューに戻ります。<br />
<br />
さて、関数とAPI Referenceと見比べてみますと、<span style="background-color: #fcfcfc; color: #333333; font-family: monospace , serif; font-size: 14px; white-space: pre-wrap;">onDocumentLoadSuccess関数のviewerのインスタンスを作成する「</span><span style="color: #333333; font-family: monospace , serif;"><span style="font-size: 14px; white-space: pre-wrap;">Autodesk.Viewing.Private.GuiViewer3D(viewerDiv);</span></span><span style="background-color: #fcfcfc; color: #333333; font-family: monospace , serif; font-size: 14px; white-space: pre-wrap;">」は、リファレンスには見当たりません。代わりに</span><br />
<span style="background-color: #fcfcfc; color: #333333; font-family: monospace , serif; font-size: 14px; white-space: pre-wrap;"><br /></span>
<span style="background-color: #fcfcfc; color: #333333; font-family: monospace , serif; font-size: 14px; white-space: pre-wrap;">というnew関数がありますので、この部分を</span><br />
<h4>
<span style="background-color: #fcfcfc; font-size: 14px; white-space: pre-wrap;"><span style="color: #333333; font-family: monospace , serif;">viewer = new Autodesk.Viewing.Viewer3D(viewerDiv);</span></span></h4>
<span style="background-color: #fcfcfc; color: #333333; font-family: monospace , serif; font-size: 14px; white-space: pre-wrap;">と書き換えて実行してみます。実行後は[F5]などで、キャッシュを除去してください。これでも問題なく動くはずです。</span><br />
<span style="background-color: #fcfcfc; color: #333333; font-family: monospace , serif; font-size: 14px; white-space: pre-wrap;"><br /></span>
<br />
<h2>
What's next?</h2>
<br />
おお!無事に表示されたぞ。と喜んでいると一番下のWhat's next?の段落に<br />
<div>
<br /></div>
<div>
「<span style="background-color: white; color: #212121; font-family: inherit; font-size: 16px; white-space: pre-wrap;">ここに紹介されているコードの多くは、物事を稼働させるために必要な定型文です。 ViewingApplicationオブジェクトを使用すると、その一部を簡略化できます。</span>」</div>
<div>
<br /></div>
<div>
とあります。ここにあるのはbioplate(定型文・決まり文句)なので、次のチュートリアルをやってみましょう、と言っております。</div>
<div>
<br /></div>
<div>
さてさて、「ViewingApplication」とはどのようなものなのでしょうか?<br />
<br />
でも、ここらでチュートリアルで習ったことを使って、自分でWebアプリケーションを作ってみようではないですか!</div>
<div>
<br /></div>
髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-39200596366566606802016-12-23T21:02:00.000+09:002016-12-24T07:41:06.456+09:00ビューアで表示する変換したデータをFORGEビューアで表示してみます。今まではDHCを使って直接RESTを送受信していましたが、ビューアですからいよいよWebページが必要です。うーむ、これは未知の世界だ。Visual Studioでやるんだから当然.ASP.NETですね。<br />
<div>
<br /></div>
<div>
<h2>
Visual Studio でFORGEを攻略</h2>
</div>
<div>
<br /></div>
<div>
(1) Visual Studio を起動し[新しいプロジェクト]を選択<br />
(2) 新しいプロジェクトダイアログボックスで[Web]-[ASP.NET Webアプリケーション]を選択。プロジェクト名は「TryForgeViewer」としてみました。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvdwbC3yO3HLd9mcn3lYcuFD_OOhgVYmvk2-9wb0z84EfvlQ0u3Iczo8XmgUOWXgS2Ivrt2t9eqfHd3u_v0aJEZDmU6eexydpyk5598WuTjxlkPHdeWfpeh82eFRfza01UXGEe4FqvPH0/s1600/bs00065.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvdwbC3yO3HLd9mcn3lYcuFD_OOhgVYmvk2-9wb0z84EfvlQ0u3Iczo8XmgUOWXgS2Ivrt2t9eqfHd3u_v0aJEZDmU6eexydpyk5598WuTjxlkPHdeWfpeh82eFRfza01UXGEe4FqvPH0/s400/bs00065.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">やっぱ、ASP.NETでしょう</td></tr>
</tbody></table>
(3) 新しいASP.NETプロジェクトでは、ノーマル?にWeb Formを選びました。Web Formには様々な異論があるようですが、詳細を知らないことをいいことにこれを選択します。だって、デスクトッププログラマとしては慣れたイベントドリブン方式が便利ですからね。<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNesnq-umnWJK_6EWZ1PIww1oSRGl4Y_mdlgnzpKBac8OruEEYuwu3SNpZmye4pM8uv3GNH4ruJaPyeEJlGIcXjb6kciUF3arkTzhBKyROV9VNMzLV_G-2dVhKrpiLqcfNTzIsai_VaA/s1600/bs00064.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNesnq-umnWJK_6EWZ1PIww1oSRGl4Y_mdlgnzpKBac8OruEEYuwu3SNpZmye4pM8uv3GNH4ruJaPyeEJlGIcXjb6kciUF3arkTzhBKyROV9VNMzLV_G-2dVhKrpiLqcfNTzIsai_VaA/s400/bs00064.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">もう、断然Web Formですよねー。</td></tr>
</tbody></table>
(4) [プロジェクト]-[新しい項目の追加]で「HTMLページ」を選択し、名前(私はForgeViewer.html)をつけて[追加]します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC7m7zECG98QH5G4veFtvjxzm84_N1A6HpPitp351fKQFhEpOpB6HpFQss0U_KLmLUxCDBV7Qodmj4P6TeHp4KICO780WPYDudShcLwipmXLPO3RwUjVJY6hjvJNsGXXDu0GWNP-fV-kg/s1600/bs00066.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC7m7zECG98QH5G4veFtvjxzm84_N1A6HpPitp351fKQFhEpOpB6HpFQss0U_KLmLUxCDBV7Qodmj4P6TeHp4KICO780WPYDudShcLwipmXLPO3RwUjVJY6hjvJNsGXXDu0GWNP-fV-kg/s400/bs00066.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">HTMLページを追加</td></tr>
</tbody></table>
さあ、準備はできました。<br />
<h2>
Basic Viewerチュートリアルをフォローしてみる</h2>
<a href="https://developer.autodesk.com/en/docs/viewer/v2/tutorials/basic-viewer/">ビューアを使用するチュートリアル</a>がありますので、これをフォローしてみます。<br />
<h3>
始める前に!</h3>
まず、表示したいデータのurnを取得します。これは前回表示用にSVF形式に変換しましたが、このとき返されたURNを使用します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9oMBRMvEr2bKlMFi7an-oYIMmjLQj2Hky7BeSujnqcAk3t41unUhxPe_SmyyQYSs5axOJwI61MBq9QD5pFb02MdvtQwSris94bRzmaD917WNpcGRrjznHZ0RVNs4M7XGEnG7zZCWxmDE/s1600/bs00067.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9oMBRMvEr2bKlMFi7an-oYIMmjLQj2Hky7BeSujnqcAk3t41unUhxPe_SmyyQYSs5axOJwI61MBq9QD5pFb02MdvtQwSris94bRzmaD917WNpcGRrjznHZ0RVNs4M7XGEnG7zZCWxmDE/s400/bs00067.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">URNは変換時のものを使う</td></tr>
</tbody></table>
<br />
また<span style="background-color: yellow; color: blue;">アクセストークンを「<b>data:read</b>」で取得</span>する必要があります。<br />
<br />
<h3>
Step1:HTMLファイルを準備しよう!</h3>
<br />
次の内容を先ほど準備したHTMLファイルにコピーしてください<br />
<br />
<br />
<head><br />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=no" /><br />
<meta charset="utf-8"><br />
<br />
<!-- The Viewer CSS --><br />
<link rel="stylesheet" href="https://developer.api.autodesk.com/viewingservice/v1/viewers/style.min.css" type="text/css"><br />
<br />
<!-- Developer CSS --><br />
<style><br />
body {<br />
margin: 0;<br />
}<br />
#MyViewerDiv {<br />
width: 100%;<br />
height: 100%;<br />
margin: 0;<br />
background-color: #F0F8FF;<br />
}<br />
</style><br />
</head><br />
<body><br />
<br />
<!-- The Viewer will be instantiated here --><br />
<div id="MyViewerDiv"></div><br />
<br />
<!-- The Viewer JS --><br />
<script src="https://developer.api.autodesk.com/viewingservice/v1/viewers/three.min.js"></script><br />
<script src="https://developer.api.autodesk.com/viewingservice/v1/viewers/viewer3D.min.js"></script><br />
<br />
<!-- Developer JS --><br />
<script><br />
var viewer;<br />
var options = {<br />
env: 'AutodeskProduction',<br />
accessToken: '<span style="background-color: yellow;"><span style="color: blue;"><b><YOUR_APPLICATION_TOKEN></b></span></span>'<br />
};<br />
var documentId = 'urn:<b><span style="background-color: yellow; color: blue;"><YOUR_URN_ID></span></b>';<br />
<span style="background-color: #cfe2f3;">Autodesk.Viewing.Initializer</span>(options, function onInitialized(){<br />
Autodesk.Viewing.Document.load(documentId,<span style="background-color: #f4cccc;"> onDocumentLoadSuccess</span>, <span style="background-color: #b6d7a8;">onDocumentLoadFailure</span>);<br />
});<br />
<br />
/**<br />
* Autodesk.Viewing.Document.load() success callback.<br />
* Proceeds with model initialization.<br />
*/<br />
<span style="background-color: #f4cccc;">function onDocumentLoadSuccess(doc) {</span><br />
<span style="background-color: #f4cccc;"> // A document contains references to 3D and 2D viewables.</span><br />
<span style="background-color: #f4cccc;"> var viewables = </span><span style="background-color: #ea9999;">Autodesk.Viewing.Document.getSubItemsWithProperties(doc.getRootItem(), {'type':'geometry'}, true);</span><br />
<span style="background-color: #f4cccc;"> if (viewables.length === 0) {</span><br />
<span style="background-color: #f4cccc;"> console.error('Document contains no viewables.');</span><br />
<span style="background-color: #f4cccc;"> return;</span><br />
<span style="background-color: #f4cccc;"> }</span><br />
<span style="background-color: #f4cccc;"> // Choose any of the avialble viewables</span><br />
<span style="background-color: #f4cccc;"> var initialViewable = viewables[0];</span><br />
<span style="background-color: #f4cccc;"> var svfUrl = doc.getViewablePath(initialViewable);</span><br />
<span style="background-color: #f4cccc;"> var modelOptions = {</span><br />
<span style="background-color: #f4cccc;"> sharedPropertyDbPath: doc.getPropertyDbPath()</span><br />
<span style="background-color: #f4cccc;"> };</span><br />
<span style="background-color: #f4cccc;"> var viewerDiv = document.getElementById('MyViewerDiv');</span><br />
<span style="background-color: #f4cccc;"> viewer = new Autodesk.Viewing.Private.GuiViewer3D(viewerDiv);</span><br />
<span style="background-color: #f4cccc;"> viewer.start(svfUrl, modelOptions, onLoadModelSuccess, onLoadModelError);</span><br />
<span style="background-color: #f4cccc;"> }</span><br />
<br />
/**<br />
* Autodesk.Viewing.Document.load() failuire callback.<br />
*/<br />
<span style="background-color: #b6d7a8;">function onDocumentLoadFailure(viewerErrorCode) {</span><br />
<span style="background-color: #b6d7a8;"> console.error('onDocumentLoadFailure() - errorCode:' + viewerErrorCode);</span><br />
<span style="background-color: #b6d7a8;"> }</span><br />
<br />
/**<br />
* viewer.loadModel() success callback.<br />
* Invoked after the model's SVF has been initially loaded.<br />
* It may trigger before any geometry has been downloaded and displayed on-screen.<br />
*/<br />
function onLoadModelSuccess(model) {<br />
console.log('onLoadModelSuccess()!');<br />
console.log('Validate model loaded: ' + (viewer.model === model));<br />
console.log(model);<br />
}<br />
<br />
/**<br />
* viewer.loadModel() failure callback.<br />
* Invoked when there's an error fetching the SVF file.<br />
*/<br />
function onLoadModelError(viewerErrorCode) {<br />
console.error('onLoadModelError() - errorCode:' + viewerErrorCode);<br />
}<br />
<br />
</script><br />
</body><br />
<br />
<br />
追加したHTMLファイルのVisual Studioが作成した既存の内容を削除して、単純にこの文字列を上書きします。いろいろ書いていますが、とりあえず気にしないで、36行目と38行目にある<YOUR_APPLICATION_TOKEN>と<YOUR_URN_ID>をアクセストークンとdata:readで取得したアクセストークンで置き換えます。「<」「>」も含めて置き換えます。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgJvpQ4IEqmygk8wFqYeezwVTdoC9RNErLmtquGMrKAVRNvyFaTOvzLhM7S7Osmg5E40h70OAB_0gTaag9zPxwgFF3RPrz-YncwtqFgSTMz7JEf2RL71v69lqY5k0ge_SNYcue_IkKE-M/s1600/bs00068.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgJvpQ4IEqmygk8wFqYeezwVTdoC9RNErLmtquGMrKAVRNvyFaTOvzLhM7S7Osmg5E40h70OAB_0gTaag9zPxwgFF3RPrz-YncwtqFgSTMz7JEf2RL71v69lqY5k0ge_SNYcue_IkKE-M/s640/bs00068.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><>を置き換える</td></tr>
</tbody></table>
この後にError Codes とか Step 2がありますが、いまのところこれは無視!早速グーグルクロームで実行してみましょう。アクセストークンの期限が切れていなければ、もうデータを見ることができるはずです。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSwu4rr_JtECtsvIoe7iZTsVFIW_LWiHIL3pFOU6iKlORYC_Xm7DQbN3bq9WKor7PdRyyGKNZ2iv96tLQQNkoTkaep4u5hJhYLZr5m5Jg0UTwZ_asv-DbCLEP2MRO4nOhY2WeCgkL3jUs/s1600/bs00069.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="468" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSwu4rr_JtECtsvIoe7iZTsVFIW_LWiHIL3pFOU6iKlORYC_Xm7DQbN3bq9WKor7PdRyyGKNZ2iv96tLQQNkoTkaep4u5hJhYLZr5m5Jg0UTwZ_asv-DbCLEP2MRO4nOhY2WeCgkL3jUs/s640/bs00069.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">見えた―!!!!(^◇^)</td></tr>
</tbody></table>
おお!こりゃあすごい!なんと安直な!いったいどんな理屈なんでしょうねぇ。ちょっと<script>セクションの中を見てみますか。<br />
<br />
<h2>
スクリプトは何を言っているのか?</h2>
<br />
JavaScriptは基本的に「上から順番に読み込んで実行する」というお約束なので、<script>セクションを上からチェックしてみます。<br />
<br />
<pre style="background: rgb(252, 252, 252); border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #333333; font-family: monospace, serif; font-size: 14px; line-height: 1.42857; max-height: initial; overflow: hidden; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"> <span class="kd" style="box-sizing: border-box; font-weight: bold;">var</span> <span class="nx" style="box-sizing: border-box;">viewer</span><span class="p" style="box-sizing: border-box;">;</span>
<span class="kd" style="box-sizing: border-box; font-weight: bold;">var</span> <span class="nx" style="box-sizing: border-box;">options</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="p" style="box-sizing: border-box;">{</span>
<span class="nx" style="box-sizing: border-box;">env</span><span class="o" style="box-sizing: border-box; font-weight: bold;">:</span> <span class="s1" style="box-sizing: border-box; color: #dd1144;">'AutodeskProduction'</span><span class="p" style="box-sizing: border-box;">,</span>
<span class="nx" style="box-sizing: border-box;">accessToken</span><span class="o" style="box-sizing: border-box; font-weight: bold;">:</span> <span class="s1" style="box-sizing: border-box; color: #dd1144;">'<YOUR_APPLICATION_TOKEN>'</span>
<span class="p" style="box-sizing: border-box;">};</span>
<span class="kd" style="box-sizing: border-box; font-weight: bold;">var</span> <span class="nx" style="box-sizing: border-box;">documentId</span> <span class="o" style="box-sizing: border-box; font-weight: bold;">=</span> <span class="s1" style="box-sizing: border-box; color: #dd1144;">'urn:<YOUR_URN_ID>'</span><span class="p" style="box-sizing: border-box;">;</span></pre>
<br />
これは「viewer」「option」「documentid」の変数を宣言しているだけのようですね。問題は次の一文です。<br />
<br />
<pre style="background: rgb(252, 252, 252); border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #333333; font-family: monospace, serif; font-size: 14px; line-height: 1.42857; max-height: initial; overflow: hidden; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;"> <span class="nx" style="box-sizing: border-box;">Autodesk</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">Viewing</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">Initializer</span><span class="p" style="box-sizing: border-box;">(</span><span class="nx" style="box-sizing: border-box;">options</span><span class="p" style="box-sizing: border-box;">,</span> <span class="kd" style="box-sizing: border-box; font-weight: bold;">function</span> <span class="nx" style="box-sizing: border-box;">onInitialized</span><span class="p" style="box-sizing: border-box;">(){</span>
<span class="nx" style="box-sizing: border-box;">Autodesk</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">Viewing</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">Document</span><span class="p" style="box-sizing: border-box;">.</span><span class="nx" style="box-sizing: border-box;">load</span><span class="p" style="box-sizing: border-box;">(</span><span class="nx" style="box-sizing: border-box;">documentId</span><span class="p" style="box-sizing: border-box;">,</span> <span class="nx" style="box-sizing: border-box;">onDocumentLoadSuccess</span><span class="p" style="box-sizing: border-box;">,</span> <span class="nx" style="box-sizing: border-box;">onDocumentLoadFailure</span><span class="p" style="box-sizing: border-box;">);</span>
<span class="p" style="box-sizing: border-box;">});</span></pre>
<br />
次の行がFORGEビューアの初期化を行っています。この<b><span style="color: blue;"><a href="https://developer.autodesk.com/en/docs/viewer/v2/reference/javascript/initializer/">Autodesk.Viewing.Initializerのヘルプ</a></span></b>を見てみると<br />
<br />
<h4>
<span style="color: blue; font-size: large;"><a href="https://developer.autodesk.com/en/docs/viewer/v2/reference/javascript/initializer/">Autodesk.Viewing.Initializer (options, callback)</a></span></h4>
<br />
となっています。これは「optionsの条件でFORGEビューアを初期化して、それが終わったらcallbackに定義された関数を呼び出せ!」と言っているのです。<br />
<br />
<h3>
<u>options ~ 初期化条件設定</u></h3>
<h4>
env (string)</h4>
<b>Development</b> <b>Staging</b> <b>Production</b> の三つから選択するのですが、ふつうはProductionです。一般ユーザーの我々は、一番安定している Productionを選ぶか、何も指定しないのがよいです。チュートリアルで指定しているAutodesk Production はもう過去の遺物なので、この行は削除していいです。<br />
<h4>
getAccessToken (function)</h4>
アクセストークンには有効時間があります。アクセストークンを非同期的に取得する関数をつくってここに指定しておけば、指定した時間が来ればこの関数を呼び出してアクセストークンを取り直す。この内容はチュートリアルのStep2に書かれているのですが、じゃあどういう関数を書けばいいのか?ということについては何も記述されていない。そんなことは自分で考えなさい、ということですかね。というわけで、今はパス。<br />
<h4>
accessToken (string)</h4>
アクセストークンを文字列で指定。<br />
<h3>
language (string)</h3>
言語。日本語はjaなので、ちょっと改造して language: 'ja' をoptionsに加えてみてもいいでしょうが特に記述しなくても勝手に日本語になるみたいです。<br />
<br />
<h3>
<u>callback ~ 初期化に成功したらこの関数を実行しなさい!</u></h3>
チュートリアルの場合はこの引数に<br />
<br />
function onInitialized(){<br />
Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);<br />
<br />
という、関数リテラルを指定しています。関数がどこでも定義できてしまうのもjavascriptの良いところ?なんでしょうかねぇ。なんかバラバラしてどこに何があるんだかわかりゃしないよ。<br />
<br />
このコールバック関数はさらにAutodesk.Viewing.Documentloadを呼び出しています。<br />
<br />
<h4>
<span style="color: blue; font-size: large;"><a href="https://developer.autodesk.com/en/docs/viewer/v2/reference/javascript/document/">Autodesk.Viewing.Document.load</a>(documentId,<br /> onSuccessCallback,<br /> onErrorCallback,<br /> accessControlProperties)</span></h4>
ビューアにデータをロードする関数です。引数の内容は<a href="https://developer.autodesk.com/en/docs/viewer/v2/reference/javascript/document/">ヘルプ</a>の下のほうに書いていますが、大体の内容は以下のようになります。<br />
<h3>
documentid</h3>
これは例のurnを指定します。<br />
<h3>
onSuccessCallback</h3>
成功した時はこれを実行しなさい、という関数。このチュートリアルでは<span style="background-color: #f4cccc;">onDocumentLoadSuccess</span>という関数。<script>セクションで定義されています。ざっくりいうと、アップロードしたファイルに表示可能なビューが一つ以上ある場合、その中から最初のビューを取り出してそれをビューアに表示しましょう!という内容です。これはStep3で詳しく見てみます。<br />
<h3>
onErrorCallback</h3>
失敗した時はこれを実行しなさい、という関数。このチュートリアルでは<span style="background-color: #b6d7a8;">onDocumentLoadFailure</span>という関数。実際の定義(上の緑の部分)を見てみると、エラー情報をブラウザのコンソールに情報を出力するという簡単な内容になっています。<br />
<h3>
accessControlProperties</h3>
これはよくわかりませんねー。Descriptionにもoptionalとなっているし、チュートリアルでも指定していません。わかり次第追記しますので、今回はパス。<br />
<br />
<br />
<br />
何と意外に簡単にビューアに表示できるではないですか。この調子でもう少しチュートリアルを掘り下げてみれば、主要な関数は理解できそうな気がします。<br />
<br />
<br /></div>
髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-87240741801705628812016-12-21T15:44:00.002+09:002016-12-23T20:53:44.482+09:00ビューア用に変換する<h2>
アップロードしたファイルの変換</h2>
FORGEビューアで見ることができるファイルフォーマットは多数ありますが、それはそのファイルを直接見ているのではなく、ビューア用に変換する必要があります。その拡張子はどうやら「svf」という形式のようで、この変換は<br />
<h4>
Model Derivative API</h4>
で行います。デリバティブってなんか危なっかしい響きがありますが、大丈夫なんですかね。その方法を説明したチュートリアルがあります。<br />
<h1 style="background: rgb(255, 255, 255); box-sizing: border-box; color: #333333; font-family: "Artifakt Legend", "Open Sans", Helvetica, Arial, sans-serif; font-size: 24px; font-weight: normal; line-height: 30px; margin: 7px 0px 0px; padding: 20px 0px; word-wrap: break-word;">
<a href="https://developer.autodesk.com/en/docs/model-derivative/v2/tutorials/prepare-file-for-viewer/" target="_blank">Prepare a File for the Viewer</a></h1>
その前に!(Before you begin)やるべきことがあります。<br />
<ul class="simple" style="background-color: white; box-sizing: border-box; color: #666666; font-family: "Artifakt Element", "Open Sans", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box; line-height: 21px; list-style: disc;">Successfully <a class="reference external" href="https://developer.autodesk.com/en/docs/oauth/v2/tutorials/get-2-legged-token/" style="background: 0px 0px; box-sizing: border-box; color: #0696d7; text-decoration: none;">acquire an OAuth token</a> with the <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box;">data:write</span></code> and <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box;">data:read</span></code> scopes. </li>
<li style="box-sizing: border-box; line-height: 21px; list-style: disc;">Upload a source file, as described in the <a class="reference external" href="https://developer.autodesk.com/en/docs/data/v2/tutorials/app-managed-bucket" style="background: 0px 0px; box-sizing: border-box; color: #0696d7; text-decoration: none;">Create an App-Managed Bucket and Upload a File</a> tutorial, and note the source URN (<code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box;">objectId</span></code>).</li>
</ul>
<div>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">(1) アクセストークンを「data:write」と「data:read」で取得しましょう。</span></span></div>
<div>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">(2) ファイルをアップロードして(前回やりました) objectIdのURNをメモしておいてください。</span></span></div>
<div>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span></div>
<div>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">だそうです。(1)はもう慣れたと思いますが、ポイントはスコープを二つ使うということです。DHCを起動しましょう。</span></span></div>
<div>
<br />
<h2>
変換用のアクセストークンの取得</h2>
</div>
<div>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><span style="color: #666666;">いちいち</span><b style="background-color: yellow;"><span style="color: blue;">アクセストークンを適切なスコープで取得することが重要なポイント</span></b><span style="color: #666666;">となります。</span><a href="https://developer.autodesk.com/en/docs/oauth/v2/reference/http/authenticate-POST/" style="color: #666666;" target="_blank">ヘルプにはこのように書いてあり</a><span style="color: #666666;">ます。</span></span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">DHCの設定は次の図のようになりますが、</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXPDFRgnr-Cs5c4x6_Eu6d12lSo6hs70a3fkhWj4dvBKdHCJtK2RyeZecs40wo4OLXhKLk4bxtXu0B6JWIemKwQsgtB8l1YOaaExIEiOF9H561qIIBU6mLhpAS9HrsjISJPXvg6aj8P1E/s1600/bs00055.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="83" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXPDFRgnr-Cs5c4x6_Eu6d12lSo6hs70a3fkhWj4dvBKdHCJtK2RyeZecs40wo4OLXhKLk4bxtXu0B6JWIemKwQsgtB8l1YOaaExIEiOF9H561qIIBU6mLhpAS9HrsjISJPXvg6aj8P1E/s400/bs00055.PNG" width="400" /></a></div>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">ポイントはSCOPEのところに</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">data:write data:read</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">と半角スペースでつないで二つのスコープを入れることです。<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKBJOkx0UK7E60QvlAKDDPB2MwMApf-7XHGSy9CwRyJTxoZAxnCv-6tdNFiUQxq0IIVI6_8mdqB71kGT6dqzJKVPDRKfxmLsltmjh4QkwK21fF2832Oi14Nvvcrme3J33mSrvIlrLjI0I/s1600/bs00056.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKBJOkx0UK7E60QvlAKDDPB2MwMApf-7XHGSy9CwRyJTxoZAxnCv-6tdNFiUQxq0IIVI6_8mdqB71kGT6dqzJKVPDRKfxmLsltmjh4QkwK21fF2832Oi14Nvvcrme3J33mSrvIlrLjI0I/s400/bs00056.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">scopeをdata:write data:read の二つを設定</td></tr>
</tbody></table>
</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">これで、SENDボタンを押すと、いつものようにアクセストークンが返ってきます。</span></span><br />
<div class="line" id="gwt-uid-727" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 7px; white-space: nowrap;">
<span class="os" style="color: orange;">{</span></div>
</div>
<div class="line" id="gwt-uid-728" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>access_token<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""LBBv4IgAg4qhe7P1zaRJcff6f3VK"">"LBBv4IgAg4qhe7P1zaRJcff6f3VK"</span>,</div>
</div>
<div class="line" id="gwt-uid-729" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>token_type<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""Bearer"">"Bearer"</span>,</div>
</div>
<div class="line" id="gwt-uid-730" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>expires_in<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="number" style="color: #880000;">86399</span></div>
</div>
<div class="line" id="gwt-uid-731" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 7px; white-space: nowrap;">
<span class="oe" style="color: orange;">}</span></div>
</div>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span>
<br />
<h2>
変換命令を送る(Model Derivative API)</h2>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">アクセストークンを取得できたら、前回アップロードしたファイルをSVF形式に変換します。この掟は<a href="https://developer.autodesk.com/en/docs/model-derivative/v2/reference/http/job-POST/" target="_blank">ヘルプ</a>に書いてあります。まずはRequestですが</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"></span></span><br />
<table border="1" class="docutils" style="background-color: white; border-collapse: collapse; border-radius: 0px; border-spacing: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #666666; font-family: "Artifakt Element", "Open Sans", Helvetica, Arial, sans-serif; font-size: 14px; margin: 30px 30px 30px 0px; width: 848px;"><tbody style="box-sizing: border-box;" valign="top">
<tr class="row-odd" style="box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Method and URI</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">POST <span class="break-word" style="box-sizing: border-box; word-break: break-word;">https://developer.api.autodesk.com/modelderivative/v2/designdata/job</span></td></tr>
</tbody></table>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">これは単純に送信先にPOSTするということですから、DHCとしては</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9X3X4ztkGMQsDrqCuFQbuJCGiS2DLYqB5u6Pf_8xcRHKsSeqMW8BiwpRz4I0VQG7fWkEmavIdaQxHldIjiLivYNbnqoSq51mXUaWQfY9pLYz4Yl6g6lEKfp374UjohOcCD-vogUTFE5I/s1600/bs00057.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="34" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9X3X4ztkGMQsDrqCuFQbuJCGiS2DLYqB5u6Pf_8xcRHKsSeqMW8BiwpRz4I0VQG7fWkEmavIdaQxHldIjiLivYNbnqoSq51mXUaWQfY9pLYz4Yl6g6lEKfp374UjohOcCD-vogUTFE5I/s640/bs00057.PNG" width="640" /></a></div>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">次にヘッダーです。</span></span><br />
<table border="1" class="docutils" style="background-color: white; border-collapse: collapse; border-radius: 0px; border-spacing: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #666666; font-family: "Artifakt Element", "Open Sans", Helvetica, Arial, sans-serif; font-size: 14px; margin: 30px 30px 30px 0px; width: 540px;"><tbody style="box-sizing: border-box;" valign="top">
<tr class="row-even" style="box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Authorization</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">yes</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">string</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Must be <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">Bearer</span> <span class="pre" style="box-sizing: border-box; word-wrap: break-word;"><token></span></code>, where <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;"><token></span></code> is obtained via <a class="reference external" href="https://developer.autodesk.com/en/docs/oauth/v2/reference/http/authenticate-POST" style="background: 0px 0px; box-sizing: border-box; color: #0696d7; text-decoration: none;">OAuth</a></td></tr>
<tr class="row-odd" style="background: rgb(252, 252, 252); box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Content-Type</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">yes</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">string</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Must be <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">application/json</span></code></td></tr>
</tbody></table>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><token>は先ほど取得したアクセストークンを使います。ですから、DHCのヘッダーは<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibaPxW1Le_oDYbHkykt50X24zGWMi3XcqyAHXe5ub9vyv9VboURK9O4iXmfoW3bodNk2mejBk8OT5-WwhrXAFErQIn239dFkGxhoyJOhEIkaKGT9hjaytuhzb_i1NpxOMs3ZQQjcl1vsc/s1600/bs00058.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="133" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibaPxW1Le_oDYbHkykt50X24zGWMi3XcqyAHXe5ub9vyv9VboURK9O4iXmfoW3bodNk2mejBk8OT5-WwhrXAFErQIn239dFkGxhoyJOhEIkaKGT9hjaytuhzb_i1NpxOMs3ZQQjcl1vsc/s400/bs00058.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ヘッダーの設定</td></tr>
</tbody></table>
</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">となります。</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">問題はBODYセクションですが、なんだかこむつかしいことが書かれています。</span></span><br />
<table border="1" class="docutils" style="background-color: white; border-collapse: collapse; border-radius: 0px; border-spacing: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #666666; font-family: "Artifakt Element", "Open Sans", Helvetica, Arial, sans-serif; font-size: 14px; margin: 30px 30px 30px 0px; width: 725px;"><tbody style="box-sizing: border-box;" valign="top">
<tr class="row-even" style="box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">input</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">yes</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">object</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Group of inputs</td></tr>
<tr class="row-odd" style="background: rgb(252, 252, 252); box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;"><em style="box-sizing: border-box;">input</em>.urn</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">yes</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">string</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">The design URN; returned when uploading the file to Forge The URN needs to be <a href="https://developer.autodesk.com/en/docs/model-derivative/v2/reference/http/job-POST/#id3" style="background: 0px 0px; box-sizing: border-box; color: #0696d7; text-decoration: none;"><span class="problematic" id="id4" style="box-sizing: border-box;">`Base64 (URL Safe) encoded`_span></span></a>.</td></tr>
<tr class="row-even" style="box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;"><br /></td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;"><br /></td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;"><br /></td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;"><br /></td></tr>
<tr class="row-even" style="box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">output</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">yes</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">string</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Group of outputs</td></tr>
<tr class="row-odd" style="background: rgb(252, 252, 252); box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;"><em style="box-sizing: border-box;">output</em>.formats</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">yes</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">array: object</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Group of requested formats/types. User can request multiple formats.</td></tr>
<tr class="row-even" style="box-sizing: border-box;"><td style="border-left: none; border-radius: 0px; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;"><em style="box-sizing: border-box;">formats</em>.type</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">yes</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">string</td><td style="border-left: 1px solid rgb(238, 238, 238); border-radius: 0px; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">The requested output types. Possible values: <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">DWG</span></code>, <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">FBX</span></code>, <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">IFC</span></code>, <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">IGES</span></code>, <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">OBJ</span></code>, <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">STEP</span></code>, <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">STL</span></code>, <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">SVF</span></code>, <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">thumbnail</span></code>. For a list of supported types, call the <a class="reference external" href="https://developer.autodesk.com/en/docs/model-derivative/v2/reference/http/formats-GET" style="background: 0px 0px; box-sizing: border-box; color: #0696d7; text-decoration: none;">GET formats</a> endpoint.</td></tr>
</tbody></table>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">必ず必要なところだけ取り出してみました。JSON形式で書けばいいのですが、なんだかよくわかりませんねぇ。どうやらinputというセクションの中にurnというセクションを入れ子にして作りなさい、という意味らいいです。</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">従いまして</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">{</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> "input" : {</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> "urn" : Base64でエンコードされたオブジェクト(アップロードしたファイルのobjectid)のurn</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> },</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">というように書きます。これは<a href="http://www.freeformatter.com/base64-encoder.html" target="_blank">このサイト</a>を使って、前回取得したurnをエンコードします。</span></span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTe-1vAv6jjefxvu9M1tN0HGNQddeSC_TpfACGzJnmdu00DCQVaeyDpY9EWf2NxFLfMdb98qEhHkgRrwKqkraUkjQHKjEUa_2fgr5c9zuMu7hL_zISqkzkE3LCyjI_JCD8iaA_BlbCE7Y/s1600/bs00059.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTe-1vAv6jjefxvu9M1tN0HGNQddeSC_TpfACGzJnmdu00DCQVaeyDpY9EWf2NxFLfMdb98qEhHkgRrwKqkraUkjQHKjEUa_2fgr5c9zuMu7hL_zISqkzkE3LCyjI_JCD8iaA_BlbCE7Y/s400/bs00059.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">urn:の文字も含んでENCODEボタンで変換する。</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX94n6ihlI1W1IUVBaQiQuTvIgVkpyxBE8dzBeytTCqoG2MLEEjZpLCqc7sJ5s2lNSOeoJ_7cKRRj-Nsr-Mtsm9bmQpmxjF-Jt4fPZzEmuXAq8A9rXGzxbNYIROz_1BxfhgpU4lBkBuY4/s1600/bs00060.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="88" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX94n6ihlI1W1IUVBaQiQuTvIgVkpyxBE8dzBeytTCqoG2MLEEjZpLCqc7sJ5s2lNSOeoJ_7cKRRj-Nsr-Mtsm9bmQpmxjF-Jt4fPZzEmuXAq8A9rXGzxbNYIROz_1BxfhgpU4lBkBuY4/s400/bs00060.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">謎の文字列が表示される</td></tr>
</tbody></table>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">エンコード後の文字はなんだか意味不明ですが、この文字列でオブジェクト(アップロードしたファイル)を指定します。</span></span><br />
<br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">またoutput.formatsですが、「どんな形式に変換したいのか?」の情報を記入します。これはいろいろなフォーマットを指定できますが、SVFの場合はさらにどんなビューを変換するのかを指定します。</span></span><br />
<table border="1" class="docutils" style="background-color: white; border-collapse: collapse; border-radius: 0px; border-spacing: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #666666; font-family: "Artifakt Element", "Open Sans", Helvetica, Arial, sans-serif; font-size: 14px; margin: 30px 30px 30px 0px; width: 725px;"><tbody style="box-sizing: border-box;" valign="top">
<tr class="row-even" style="box-sizing: border-box;"><td style="border-left: none; border-radius: 0px; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Views</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">yes</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">array: string</td><td style="border-left: 1px solid rgb(238, 238, 238); border-radius: 0px; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;"><em style="box-sizing: border-box;">Required options for SVF type</em>. Possible values: <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">2d</span></code>, <code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">3d</span></code></td></tr>
</tbody></table>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">指定できるのは2dと3dだけですが、これらを[ ]でくくって指定できます。従いまして、Bodyの部分は例えば以下のようになります。</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">{</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> "input" : {</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> "urn" : ”dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6YmxhY2tzbWl0aGJ1Y2tldDEyMDMvc2FtcGxlcHJvamVjdDAxLnJ2"</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> },</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> "output" : {</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> "formats" : [</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> {</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> "type" : "svf",</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> "views" : ["2d", "3d"]</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> }</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> ]</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"> }</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">}</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">"output" : [{"type":"svf", "view":["2d","3d"]}]</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">の指定がちょっと特徴的ですが、JSON形式なので、]や}がチャンと対になっているように気を付けてください。DHCの画面は次のようになります。</span></span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc5Q7n5Z4Dn1BFEDenT7KeClmBizcajZXmd81599Y5f-fK6vFcIk-ACVZpZGEXjhFcOIc8ZyCh4uvaJwbG7ckOhIXe4pCUgHlCZdjYWUf_GLUATqO46-5VAJ7YKbLfqLGy7P-EF99TQDY/s1600/bs00061.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc5Q7n5Z4Dn1BFEDenT7KeClmBizcajZXmd81599Y5f-fK6vFcIk-ACVZpZGEXjhFcOIc8ZyCh4uvaJwbG7ckOhIXe4pCUgHlCZdjYWUf_GLUATqO46-5VAJ7YKbLfqLGy7P-EF99TQDY/s640/bs00061.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">: { [を間違えないように</td></tr>
</tbody></table>
これでSendを押すと200OKの値が返ってくるはずです。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj4nhuO9lOjATljjiNDOBznQCiz1VS392RWrk5FJqxi59DZXC7PgqDE5jsLV805pjLF3S6qrHG0agCOe7FvpMDhQ7qOBOI2PyrwbzgZ9h12aKjhjYtyWFUsrA8yD0ZyqThmlK0WxooNcY/s1600/bs00062.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj4nhuO9lOjATljjiNDOBznQCiz1VS392RWrk5FJqxi59DZXC7PgqDE5jsLV805pjLF3S6qrHG0agCOe7FvpMDhQ7qOBOI2PyrwbzgZ9h12aKjhjYtyWFUsrA8yD0ZyqThmlK0WxooNcY/s640/bs00062.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">200OK (゜-゜)気持ちいい!</td></tr>
</tbody></table>
変換命令が受けつけられました。<br />
<br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span>
<br />
<h2>
今どんな感じ?</h2>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif; font-size: 14px;">変換が開始されましたが、それには時間がかかります。お仕事の進行状況を問い合わせて、データが準備できたかどうか確認してみましょう。</span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><a href="https://developer.autodesk.com/en/docs/model-derivative/v2/reference/http/urn-manifest-GET/" target="_blank">ヘルプはこちら</a>。</span></span><br />
<br /></div>
<div>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">こちらは現在のオブジェクトの状態を問い合わせるAPIです。使い方はとても単純で</span></span><br />
<table border="1" class="docutils" style="background-color: white; border-collapse: collapse; border-radius: 0px; border-spacing: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #666666; font-family: "Artifakt Element", "Open Sans", Helvetica, Arial, sans-serif; font-size: 14px; margin: 30px 30px 30px 0px; width: 856px;"><tbody style="box-sizing: border-box;" valign="top">
<tr class="row-odd" style="box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Method and URI</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">GET <span class="break-word" style="box-sizing: border-box; word-break: break-word;">https://developer.api.autodesk.com/modelderivative/v2/designdata/:urn/manifest</span></td></tr>
<tr class="row-even" style="background: rgb(252, 252, 252); box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Authentication Context</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">app only</td></tr>
<tr class="row-odd" style="box-sizing: border-box;"><td style="border-left: none; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Required OAuth Scopes</td><td style="border-left: 1px solid rgb(238, 238, 238); border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;"><code class="docutils literal" style="background-color: #f9f2f4; border-radius: 0px; border: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #c7254e; font-family: monospace, serif; font-size: 1em; padding: 2px 4px; word-break: break-word;"><span class="pre" style="box-sizing: border-box; word-wrap: break-word;">data:read</span></code></td></tr>
<tr class="row-even" style="background: rgb(252, 252, 252); box-sizing: border-box;"><td style="border-left: none; border-radius: 0px; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">Data Format</td><td style="border-left: 1px solid rgb(238, 238, 238); border-radius: 0px; border-top: 1px solid rgb(238, 238, 238); box-sizing: border-box; padding: 10px;">JSON</td></tr>
</tbody></table>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">これは単純に、URIの「</span></span><span style="background-color: white; color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif; font-size: 14px;">:urn」の部分を、上記のurnに入れ替えて、data:readのアクセストークンを使ってGETするだけです。以下はDHCの設定です。ヘッダーには</span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">Authorizationに「Bearer アクセストークン」のいつものパターンですね。</span></span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1CcgPylUSt5-eQggx5lngjMNn0IGCjfI5Sst9xaj9W-aUkIhFvoJi-yYuUXY3I6RJ1qXkYMvPHZV-dMt7e1XdtskssHWVmgOLFn9tzHycANPTgVVBr3-IPtnljysvPWtHq1b3VjhZS2A/s1600/bs00063.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="68" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1CcgPylUSt5-eQggx5lngjMNn0IGCjfI5Sst9xaj9W-aUkIhFvoJi-yYuUXY3I6RJ1qXkYMvPHZV-dMt7e1XdtskssHWVmgOLFn9tzHycANPTgVVBr3-IPtnljysvPWtHq1b3VjhZS2A/s640/bs00063.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">長ーいendpoint</td></tr>
</tbody></table>
<span style="background-color: white; color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif; font-size: 14px;">やたらと長いendpointになりますねー。この例では</span><br />
<span style="background-color: white; font-size: 14px;"><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;">developer.api.autodesk.com/modelderivative/v2/designdata/dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6YmxhY2tzbWl0aGJ1Y2tldDEyMDMvc2FtcGxlcHJvamVjdDAxLnJ2dA/manifest</span></span><br />
<span style="background-color: white; font-size: 14px;"><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><br /></span></span>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;">となりました。レスポンスは</span></span><br />
<div class="line" id="gwt-uid-2148" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 7px; white-space: nowrap;">
<span class="os" style="color: orange;">{</span></div>
</div>
<div class="line" id="gwt-uid-2149" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>type<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""manifest"">"manifest"</span>,</div>
</div>
<div class="line" id="gwt-uid-2150" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>hasThumbnail<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""true"">"true"</span>,</div>
</div>
<div class="line" id="gwt-uid-2151" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>status<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""success"">"success"</span>,</div>
</div>
<div class="line" id="gwt-uid-2152" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>progress<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""complete"">"complete"</span>,</div>
</div>
<div class="line" id="gwt-uid-2153" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>region<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""US"">"US"</span>,</div>
</div>
<div class="line" id="gwt-uid-2154" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>urn<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6YmxhY2tzbWl0aGJ1Y2tldDEyMDMvc2FtcGxlcHJvamVjdDAxLnJ2dA"">"dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6YmxhY2tzbWl0aGJ1Y2tldDEyMDMvc2FtcGxlcHJvamVjdDAxLnJ2dA"</span>,</div>
</div>
<div class="line" id="gwt-uid-2155" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>version<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""1.0"">"1.0"</span>,</div>
</div>
<div class="line" id="gwt-uid-2157" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<label class="p-name" for="gwt-uid-2156" style="color: black; cursor: pointer; display: inline-block; font-weight: 800; line-height: 20px; margin-bottom: 5px; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>derivatives<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</label><input checked="checked" id="gwt-uid-2156" style="-webkit-font-smoothing: antialiased; background-image: none; background-position: 0px 0px; background-repeat: repeat; color: #666666; cursor: pointer; font-family: FontAwesome; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-top: 0px; position: relative; text-rendering: optimizeSpeed; top: -2px; vertical-align: baseline; width: auto;" type="checkbox" /><span class="as" style="color: olive;">[</span></div>
</div>
<div class="line" id="gwt-uid-2159" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 67px; white-space: nowrap;">
<label class="p-name" for="gwt-uid-2158" style="color: black; cursor: pointer; display: inline-block; font-weight: 800; line-height: 20px; margin-bottom: 5px; padding-right: 5px;"></label><input id="gwt-uid-2158" style="-webkit-font-smoothing: antialiased; background-image: none; background-position: 0px 0px; background-repeat: repeat; color: #666666; cursor: pointer; font-family: FontAwesome; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-top: 0px; position: relative; text-rendering: optimizeSpeed; top: -2px; vertical-align: baseline; width: auto;" type="checkbox" /><span class="os" style="color: orange;">{</span><span id="gwt-uid-2158-abs"><span class="abstract" style="color: #888888;"><span class="p-name" style="padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>name<span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>:</span> <span class="string" title=""sampleproject01.rvt"">"sampleproject01.rvt"</span>, <span class="p-name" style="padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>hasThumbnail<span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>:</span> <span class="string" title=""true"">"true"</span>, <span class="p-name" style="padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>status<span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>:</span> <span class="string" title=""success"">"success"</span>, <span class="p-name" style="padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>progress<span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>:</span> <span class="string" title=""complete"">"complete"</span>,…</span><span class="oe" style="color: orange;">}</span>,</span></div>
</div>
<div class="line" id="gwt-uid-2733" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 67px; white-space: nowrap;">
<label class="p-name" for="gwt-uid-2732" style="color: black; cursor: pointer; display: inline-block; font-weight: 800; line-height: 20px; margin-bottom: 5px; padding-right: 5px;"></label><input id="gwt-uid-2732" style="-webkit-font-smoothing: antialiased; background-image: none; background-position: 0px 0px; background-repeat: repeat; color: #666666; cursor: pointer; font-family: FontAwesome; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-top: 0px; position: relative; text-rendering: optimizeSpeed; top: -2px; vertical-align: baseline; width: auto;" type="checkbox" /><span class="os" style="color: orange;">{</span><span id="gwt-uid-2732-abs"><span class="abstract" style="color: #888888;"><span class="p-name" style="padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>status<span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>:</span> <span class="string" title=""success"">"success"</span>, <span class="p-name" style="padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>progress<span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>:</span> <span class="string" title=""complete"">"complete"</span>, <span class="p-name" style="padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>outputType<span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>:</span> <span class="string" title=""thumbnail"">"thumbnail"</span>, <span class="p-name" style="padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>children<span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>:</span><span class="as">[</span><span class="p-name" style="padding-right: 5px;"></span><span class="os">{</span><span class="p-name" style="padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>guid<span class="p-str" style="color: #fafafa; font-size: 1px;">"</span>:</span> <span class="string" title=""0576ce39-e54e-369e-da0e-7a306abf2144"">"0576ce39-e54e-369e-da0e-7a306abf2144"</span>,…</span><span class="oe" style="color: orange;">}</span></span></div>
</div>
<div class="line" id="gwt-uid-2783" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="ae" style="color: olive;">]</span></div>
</div>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;">ですので、progress はcompleteなので、変換はすでに終わったようです。</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;"><br /></span></span>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;">じゃあ、いよいよビューアで表示してみますか!</span></span><br />
<br /></div>
髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-67562882237718451672016-12-19T21:58:00.002+09:002016-12-23T20:52:31.697+09:00バケットにファイルをアップロードする<h2>
ファイルのアップロード</h2>
引き続き、<a href="https://developer.autodesk.com/en/docs/data/v2/tutorials/app-managed-bucket/" target="_blank">チュートリアル</a>の後半を実行してみます。<br />
<h2 style="background: rgb(255, 255, 255); box-sizing: border-box; color: #008889; font-family: "Artifakt Element", "Open Sans", Helvetica, Arial, sans-serif; font-size: 22px; font-weight: normal; line-height: 1em; margin: 30px 0px 10px;">
Step 2: Upload a file to a storage location</h2>
<div>
ファイルのアップロードに必要なHTTPリクエストの項目を<a href="https://developer.autodesk.com/en/docs/data/v2/reference/http/buckets-:bucketKey-objects-:objectName-PUT/" target="_blank">こちら</a>で確認します。</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUXwFGjG_qk0YEd_s2iJeIapYZ0BgWyRFSos7vMCY3OsqQ0wCaviqCxQBxuByw6onba68_9hjqCupNKljDTnk1X64cw-pyXej3yTLbvV_V5QIf_3HtBNrNHyoHPm2hm9-JhyphenhyphenxJXefCFuM/s1600/bs00047.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUXwFGjG_qk0YEd_s2iJeIapYZ0BgWyRFSos7vMCY3OsqQ0wCaviqCxQBxuByw6onba68_9hjqCupNKljDTnk1X64cw-pyXej3yTLbvV_V5QIf_3HtBNrNHyoHPm2hm9-JhyphenhyphenxJXefCFuM/s400/bs00047.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Resource Information</td></tr>
</tbody></table>
<h4>
Method and URI</h4>
<div>
<ul>
<li>メソッドは「PUT」</li>
<li>URIは<br /><br />https://developer.api.autodesk.com/oss/v2/buckets/<b><span style="color: blue;">:bucketKey</span></b>/objects/<b><span style="color: blue;">:objectName</span></b><span style="color: blue;"><b><br /></b></span>となっています。:bucketKeyには取得したバケットの名前(:は必要ありません)を、:ObjectNameにはアップロードするファイルにつける任意の名前をつけます。名前は本当のファイル名でもいいし、GUIDのような名前でも構いませんが、拡張子は変更しないでください。</li>
</ul>
</div>
<h4>
Required OAuth Scopes</h4>
<div>
<ul>
<li>data:write または data:create で取得したアクセストークン。data:write の場合は、既存のファイルを上書きすることができます。</li>
</ul>
<h4>
Data Format</h4>
</div>
<div>
<ul>
<li>データフォーマットはJSON形式</li>
</ul>
</div>
<div>
<br /></div>
まずは例によって、アクセストークンを取得します。スコープはdata:writeです。DHCを起動し、以下のように設定して、Sendで応答を待ちます。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbSRB_yKUS-Q3DuYyFXIJEKDhTpoBwgg35CBMY0dDKmlucZT7aDqGwZdIF2iDdid3xVgDuaoHQuETZjeBgpawlVaNCirh0fvhE16Km4SWIjXLrC88p-M_3l0dwjwpxTqMsvruBXpvHbDk/s1600/bs00048.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="98" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbSRB_yKUS-Q3DuYyFXIJEKDhTpoBwgg35CBMY0dDKmlucZT7aDqGwZdIF2iDdid3xVgDuaoHQuETZjeBgpawlVaNCirh0fvhE16Km4SWIjXLrC88p-M_3l0dwjwpxTqMsvruBXpvHbDk/s400/bs00048.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">DHCでアクセストークンを取得する</td></tr>
</tbody></table>
すると、応答が返ってきます。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio2KV5Jkc6etq3IJ7MjDxygazrjYntYA-bOLOSDVU0uay9jxEsc1M_gtko4O_ZaQLFrQ6_KRHTRK7v3OJS4J45YYAu3OmZ_Y231GBNjMxcTuY0t3WrGLH59PZ_tQXmkbGfAE5AwLNnFdk/s1600/bs00049.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio2KV5Jkc6etq3IJ7MjDxygazrjYntYA-bOLOSDVU0uay9jxEsc1M_gtko4O_ZaQLFrQ6_KRHTRK7v3OJS4J45YYAu3OmZ_Y231GBNjMxcTuY0t3WrGLH59PZ_tQXmkbGfAE5AwLNnFdk/s400/bs00049.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">アクセストークンを取得した!</td></tr>
</tbody></table>
<h2>
ファイルをアップロード</h2>
いよいよファイルをアップロードします。ファイルは任意のRevitのファイル(標準添付のサンプルプロジェクトなどを利用してください。)を使用します。<br />
<br />
ヘッダーの必要事項は<a href="https://developer.autodesk.com/en/docs/data/v2/reference/http/buckets-:bucketKey-objects-:objectName-PUT/" target="_blank">こちら</a>で確認します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZgRK0uVJPRCHsjCozU3lddkHlLSEqLHFP8l5qgLe1BeKEOtrFeGph6tKZLIa5yVltnRanw6GcYjVlogdyHQMNeSRAj37YsE7-hbF87NCPhoWqJ40zTmkPmrdUgBo0qKxWZGl4bhfYuXs/s1600/bs00052.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZgRK0uVJPRCHsjCozU3lddkHlLSEqLHFP8l5qgLe1BeKEOtrFeGph6tKZLIa5yVltnRanw6GcYjVlogdyHQMNeSRAj37YsE7-hbF87NCPhoWqJ40zTmkPmrdUgBo0qKxWZGl4bhfYuXs/s400/bs00052.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ヘッダーには何が必要か?</td></tr>
</tbody></table>
たくさん項目がありますが、必ず必要なのはAuthorizationとContent-Lengthだけです。<br />
<h4>
Authorization</h4>
<br />
<ul>
<li>Bearer アクセストークン (Bearer+半角スペース+アクセストークン)</li>
</ul>
<br />
<h4>
Content-Length</h4>
<br />
<ul>
<li>DHCも含めて、ほとんどのクライアントはファイルを指定すれば、この項目は自動的に設定されます。</li>
</ul>
<br />
DHCの設定は下の図のようになります。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8gvIlD80uIuPMbJEesjQljCJfC82jkF2SyOcSW-0Jt5QeOSoI-jIFVvK3ahOoYHZSrjxXrySpZafxzmMze4M3Llv9zz11jVyny2jf-wLQ_ha5lrUN1TcGDsF_GPPJAGcW4DvlF4R7BoA/s1600/bs00051.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="81" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8gvIlD80uIuPMbJEesjQljCJfC82jkF2SyOcSW-0Jt5QeOSoI-jIFVvK3ahOoYHZSrjxXrySpZafxzmMze4M3Llv9zz11jVyny2jf-wLQ_ha5lrUN1TcGDsF_GPPJAGcW4DvlF4R7BoA/s400/bs00051.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">DHC</td></tr>
</tbody></table>
① BODYはファイルなので「file」を選ぶ<br />
② Revitのファイルを選択します。<br />
③ Bearer アクセストークン<br />
④ developer.api.autodesk.com/oss/v2/buckets/blacksmithbucket1203/objects/sampleproject01.rvt<br />
バケット名とオブジェクトの名前(②のファイル名と一致しなくてもいいが、拡張子は同じにします。)<br />
<br />
ファイルのアップロードの設定は、なにか拍子抜けするほど簡単ですねぇ。ほんとにこれでいいんでしょうか?とりあえず[Send]を押してみます。<br />
<br />
しばらくすると・・・・・<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
おお!ちゃんんとアップロードできたじゃないですか!応答の内容をチェックしてみましょう。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8rMcPCJH3qX6XDFEU4Oqu_OZN9loL3FmWXOyCCtutHRcY_NGjDI-NVB0hhJV_Oqg-2FButYxvdD88lJ2bhWXFpOhl13IcbwriZupWOBpG2cF0H2P9QUNPsU2mbMMj_csoNEbfLe2XZbY/s1600/bs00053.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8rMcPCJH3qX6XDFEU4Oqu_OZN9loL3FmWXOyCCtutHRcY_NGjDI-NVB0hhJV_Oqg-2FButYxvdD88lJ2bhWXFpOhl13IcbwriZupWOBpG2cF0H2P9QUNPsU2mbMMj_csoNEbfLe2XZbY/s640/bs00053.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">アップロード成功!</td></tr>
</tbody></table>
<div class="line" id="gwt-uid-663" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 7px; white-space: nowrap;">
<span class="os" style="color: orange;">{</span><span id="gwt-uid-662-abs"></span></div>
</div>
<div class="line" id="gwt-uid-664" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>bucketKey<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""blacksmithbucket1203"">"blacksmithbucket1203"</span>,</div>
</div>
<div class="line" id="gwt-uid-665" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>objectId<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""urn:adsk.objects:os.object:blacksmithbucket1203/sampleproject01.rvt"">"urn:adsk.objects:os.object:blacksmithbucket1203/sampleproject01.rvt"</span>,</div>
</div>
<div class="line" id="gwt-uid-666" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>objectKey<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""sampleproject01.rvt"">"sampleproject01.rvt"</span>,</div>
</div>
<div class="line" id="gwt-uid-667" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>sha1<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""55d89511380aeaa070be7072ed7a57d89172e5f3"">"55d89511380aeaa070be7072ed7a57d89172e5f3"</span>,</div>
</div>
<div class="line" id="gwt-uid-668" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>size<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="number" style="color: #880000;">17215488</span>,</div>
</div>
<div class="line" id="gwt-uid-669" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>contentType<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""application/octet-stream"">"application/octet-stream"</span>,</div>
</div>
<div class="line" id="gwt-uid-672" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 37px; white-space: nowrap;">
<span class="p-name" style="color: black; font-weight: 800; padding-right: 5px;"><span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>location<span class="p-str" style="color: #fafafa; font-size: 1px; font-weight: 100;">"</span>:</span> <span class="string" style="color: #008800;" title=""https://developer.api.autodesk.com/oss/v2/buckets/blacksmithbucket1203/objects/sampleproject01.rvt""><a class="get-href" href="https://www.blogger.com/null" id="gwt-uid-671" style="color: black; font-size: 12px; padding-right: 7px;" title="GET https://developer.api.autodesk.com/oss/v2/buckets/blacksmithbucket1203/objects/sampleproject01.rvt"><span class="icon-external-link" style="background-image: none; background-position: 0% 0%; background-repeat: repeat; display: inline; font-family: "fontawesome"; height: auto; line-height: normal; margin-top: 0px; text-decoration: inherit; vertical-align: baseline; width: auto;"></span></a><a class="gwt-Anchor" href="https://www.blogger.com/null" id="gwt-uid-670" style="color: #0088cc; cursor: pointer;">"https://developer.api.autodesk.com/oss/v2/buckets/blacksmithbucket1203/objects/sampleproject01.rvt"</a></span></div>
</div>
<div class="line" id="gwt-uid-673" style="background-color: #fafafa; color: #333333; display: table-row; font-family: Consolas, "Andale Mono", monospace; font-size: 14px; white-space: pre-wrap;">
<div class="l-body" style="display: table-cell; padding-left: 7px; white-space: nowrap;">
<span class="oe" style="color: orange;">}</span></div>
</div>
<br />
<h4>
bucketkey</h4>
バケットの名前。アップロード時に指定したものと同じ名前が返されます。<br />
<h3>
objectId</h3>
これがアップロードしたファイルのバケット内でのURN(ID)になります。以降、この名前でファイルをs操作します。<br />
<h3>
ObjectKey</h3>
アップロードしたファイルの名前。ファイルはアップロード後は「オブジェクト」と呼ばれます。<br />
<br />
うまくアップロードできました。今度はこのファイルをビューア用に「変換」します。作成したバケットはtransient、急がなければ。なぜなら作成したバケットはtransient、つまり24時間しかデータを保持してくれないのだから・・・・<br />
<br />
<br />
<br />髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-28764238052791006162016-12-08T22:32:00.000+09:002016-12-23T20:51:54.019+09:00バケットの作成<h2>
バケットって?</h2>
バケットとは、FORGEが提供している、アナタ専用のストレージです。今回はこのバケットを作成してみます。手順は<br />
<br />
<ol>
<li>バケット作成用のアクセストークンを取得する。</li>
<li>バケットを作成する。</li>
</ol>
<br />
の二段階です。この手順ですが、<a href="https://developer.autodesk.com/en/docs/data/v2/tutorials/app-managed-bucket/" target="_blank">チュートリアル</a>が提供されているので、これを実行してみましょう。<br />
<br />
<h3>
Create an App-Managed Bucket and Upload a File<br /><span style="color: orange;">アプリ用バケットを作成して、ファイルをアップロードする</span></h3>
<br />
というまさに今回の目的にピッタリのチュートリアルです。ただし、Before You Begin (始める前に)のところを見てみると、<br />
<br />
<i>Make sure that you have registered an app and successfully acquired an OAuth token with scopes bucket:create, bucket:read, and data:write. This will allow you to create a bucket, get bucket details, and upload a file.</i><br />
<span style="color: blue;"><br /></span>
<span style="color: blue;">アプリケーションを登録し、アクセストークンを「bucket:create」、「bucket:read」、「data:write.」の各スコープを使って取得してください。これらのスコープを使って得たアクセストークンは、「バケットを作る」、「バケットの詳細情報を得る」、「バケットにファイルをアップロードする」ためのトークンとなります。</span><br />
<br />
などとかいています。ということは、これからバケットを新たに作成するのですから<br />
<br />
<h3>
スコープを[bucket:create]として、アクセストークンを取得</h3>
<br />
しておく必要があるってことですねー。ではまず、前回の例にならってアクセストークンを手に入れてみます。<a href="https://developer.autodesk.com/en/docs/oauth/v2/reference/http/authenticate-POST/" target="_blank">こちら</a>にHTTPリクエストに必要な項目が書かれています。それによると<br />
<br />
<h4>
Method and URI</h4>
<span style="background-color: white; color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif; font-size: 14px;">POST https://developer.api.autodesk.com/authentication/v1/authenticate</span><br />
<h4>
<span style="background-color: white; font-size: 14px;"><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;">Headers</span></span></h4>
<span style="background-color: white; font-size: 14px;"><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;">Content-Type </span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">application/x-www-form-urlencoded</span></span><br />
<h4>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">Body Structure</span></span></h4>
client_id 前回同様、アプリケーションの登録画面にあります。<br />
client_secret アプリケーションの登録画面にあります<br />
grant_type 必ず「client_credentials」に設定します。<br />
scope 今回は「bucket:create」です。<br />
<br />
必要な情報がわかったところで、DHCを起動して設定します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimIewyFE_vECICnN_vxKhAur4nfm6dmVwJP62-3_yyLfYddQ5xUUQFoz-O53jYyk562B9Z53fV73JwhHoZrAHL6fNYwaMHbNpmsDLowJpicyTEAZYAUtEOZ1GaL5w9BefFtKy1dp_QPqs/s1600/bs00036.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="110" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimIewyFE_vECICnN_vxKhAur4nfm6dmVwJP62-3_yyLfYddQ5xUUQFoz-O53jYyk562B9Z53fV73JwhHoZrAHL6fNYwaMHbNpmsDLowJpicyTEAZYAUtEOZ1GaL5w9BefFtKy1dp_QPqs/s400/bs00036.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">DHCに必要事項を設定して[Send]</td></tr>
</tbody></table>
これで、「200 OK」の返事が来るはずです。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUZ-5N-DA7-ChNwzEyinATn4cCgLOSe8YGIr3eBfQ97SNf_AK9yw3uMoZjrbrvLCrJLls9Ti1oChn5VKvnyGcOXTeU9rCatdVz4-P_5qFsIrs7Wnh9hLbtb1iUs68G0ywSy0_9rxqAgWo/s1600/bs00037.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUZ-5N-DA7-ChNwzEyinATn4cCgLOSe8YGIr3eBfQ97SNf_AK9yw3uMoZjrbrvLCrJLls9Ti1oChn5VKvnyGcOXTeU9rCatdVz4-P_5qFsIrs7Wnh9hLbtb1iUs68G0ywSy0_9rxqAgWo/s400/bs00037.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">説明を追加</td></tr>
</tbody></table>
もう、アクセストークンを取得するのは、慣れましたね。<br />
<h2>
Step1:Create a bucket</h2>
では、チュートリアルに戻ります。チュートリアルには<br />
<br />
<i>Before uploading a file, create a bucket and set a retention policy using the POST buckets endpoint.</i><br />
<br />
<span style="color: blue;">ファイルをアップロードする前にバケットを作成し、ファイルを保持する期間を決めてください。</span><br />
<br />
と書いています。バケットにはアップロードされたファイルを保持する期間があります。マニュアルには<a href="https://developer.autodesk.com/en/docs/data/v2/overview/retention-policy/" target="_blank">こちら</a>に書いています。<br />
<h4>
Transient</h4>
24時間保持<br />
<h4>
Temporary</h4>
30日間保持。<br />
<h4>
Persistent</h4>
ずっと保持。<br />
<br />
この3種類です。チュートリアルではTransientを選択しています。<br />
では作成してみましょう・・・・と言いたいところですが、マニュアルの例はcURLコマンドラインによる解説なので、<a href="https://developer.autodesk.com/en/docs/data/v2/reference/http/buckets-POST/" target="_blank">こちら</a>をみて必要な情報を確認しましょう。<br />
<br />
これによると、<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidYpvW_Xe-Zb6oES9wOfLFfh-AwDJHzlnnejMyf2VO-Awo41BnQqrPD9XJYPm38XqshRaedJQlaGKUZmxNx85mQAKnOJVUXiAv0sRQ66GgCEK1WxCBza-jT5rkzhRGJ1xuqxEgQaKgkdA/s1600/bs00038.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidYpvW_Xe-Zb6oES9wOfLFfh-AwDJHzlnnejMyf2VO-Awo41BnQqrPD9XJYPm38XqshRaedJQlaGKUZmxNx85mQAKnOJVUXiAv0sRQ66GgCEK1WxCBza-jT5rkzhRGJ1xuqxEgQaKgkdA/s640/bs00038.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">今回のData Format はJSON</td></tr>
</tbody></table>
バケットを作成する場合はリクエスト(要求)、レスポンス(回答)ともにJSON形式です。う(*_*)、JSONって何?というわけでWikiを見てみると・・・・<br />
<br />
<ul>
<li>JSON(ジェイソン、JavaScript Object Notation)は軽量なデータ記述言語の1つである。</li>
</ul>
<br />
となっていました。えー?JavaScript ぉー(´・ω・`)。そんなもん知らんぞ!<br />
<br />
そして、その書式は<br />
<br />
<ul>
<li>{キー:値,キー:値・・・・・・}</li>
</ul>
<br />
です。なんだ、簡単じゃん。文字列の書式のことね。これならいけそう。<br />
さらに、だんだんわかってきたのですが、HTTPリクエストには「ヘッダー」と「ボディ」があり、これはDHCの以下の部分に相当するようです。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDNFtUO_0z4l15dhTs4sDFEjVgs-PTTMCTqNROKlEGBKrfvygk3dBE-6lSUkjtrdaPvNiIT3uHSqjzpNM7VmCxizuN7LgYY93XLm9X-KmpuIGUpu2RrDUqwIJVIYOx2WMEIvXHbGa1n4Q/s1600/bs00039.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDNFtUO_0z4l15dhTs4sDFEjVgs-PTTMCTqNROKlEGBKrfvygk3dBE-6lSUkjtrdaPvNiIT3uHSqjzpNM7VmCxizuN7LgYY93XLm9X-KmpuIGUpu2RrDUqwIJVIYOx2WMEIvXHbGa1n4Q/s640/bs00039.PNG" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">DHCの画面もヘッダーとボディに分かれている</td></tr>
</tbody></table>
<br />
では、DHCでリクエストの送信先などを設定しましょう。<br />
<h4>
リクエストの送信先(endpointというらしい)</h4>
<span style="background-color: white; color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif; font-size: 14px;">https://developer.api.autodesk.com/oss/v2/buckets</span><br />
<h4>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;">メソッド</span></span></h4>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;">POST</span></span><br />
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;"><br /></span></span>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;">そしてBODYの書式がJSONなので、BOSYの右端の▼をおしてtextを選択します。残念ながらJSONという選択肢はありません。ですが上記したように簡単な書式なのでtextで十分です。<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPlHDW1WrHxynU6zfEQngkauUT69pTu8RUr2SLlvetoJ7zVrUPL-7DEs1XC645Z4xAQgJqVmKspcYAZaMqiHZROrZsqM9ntn3eTdo6pPwZIB_um4sYSybww1Ryn2QSRCl1q53OAIz8Y1A/s1600/bs00040.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPlHDW1WrHxynU6zfEQngkauUT69pTu8RUr2SLlvetoJ7zVrUPL-7DEs1XC645Z4xAQgJqVmKspcYAZaMqiHZROrZsqM9ntn3eTdo6pPwZIB_um4sYSybww1Ryn2QSRCl1q53OAIz8Y1A/s400/bs00040.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">BODYの書式をtextにする</td></tr>
</tbody></table>
</span></span><br />
<h2>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;">ヘッダーの設定</span></span></h2>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;">ヘッダーは次のように指定されています。</span></span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTUBHAAjBo215W68K3ghMeopjrRixEtmsnxbbGtPauN08twxUOWo8OVsoiKtvKrGNijypFlhwANwLWhq4E-Z08Ku46Szywds-q1wY2op5j2LHC-2rLBJnuQ3mB6ykKffiTidYjtz-_V9Q/s1600/bs00041.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTUBHAAjBo215W68K3ghMeopjrRixEtmsnxbbGtPauN08twxUOWo8OVsoiKtvKrGNijypFlhwANwLWhq4E-Z08Ku46Szywds-q1wY2op5j2LHC-2rLBJnuQ3mB6ykKffiTidYjtz-_V9Q/s400/bs00041.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ヘッダーに設定する情報</td></tr>
</tbody></table>
<h4>
<span style="background-color: white; color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif; font-size: 14px;">Authorization</span></h4>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">Bearer アクセストークン</span></span><br />
<h4>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">Content-Type</span></span></h4>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;">必ず「application/json</span></span><span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif; font-size: 14px;">」</span><br />
<h4>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;">x-ads-region</span></span></h4>
<span style="color: #666666; font-family: "artifakt element" , "open sans" , "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px;">バケットの保存先。USとEMEAが選択できます。USはアメリカで、EMEAはヨーロッパ、中東、アフリカを示すようです。おそらく物理的なサーバーの位置を言ってるのだとは思いますが、詳細はよくわかりません。必須ではないので、今回は指定しません。</span></span><br />
<br />
DHCのヘッダーの設定は下の図のようになります。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbyJWSCGGyJvjbpfNFmBAy0O8guXfMlR50XWPirVRnkEZ2uzr2vuTgngHV3-uF56l4pSZS_RtkzZ9ycSbd06MQ7WBzRkLJ_c2RFrJzO-nKyF5aBTHxCe6xBNskTWHaJ8cOoeMOjDDsGwo/s1600/bs00042.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbyJWSCGGyJvjbpfNFmBAy0O8guXfMlR50XWPirVRnkEZ2uzr2vuTgngHV3-uF56l4pSZS_RtkzZ9ycSbd06MQ7WBzRkLJ_c2RFrJzO-nKyF5aBTHxCe6xBNskTWHaJ8cOoeMOjDDsGwo/s400/bs00042.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Bearer(半角スペース)アクセストークン</td></tr>
</tbody></table>
ボディの設定<br />
ボディ部分で必ず必要な項目は二つだけです。<br />
<h4>
bucketKey バケットの名前</h4>
<i>A unique name you assign to a bucket. It must be globally unique across all applications and</i><br />
<i>regions, otherwise the call will fail. Possible values: -_.a-z0-9 (between 3-128 characters in</i><br />
<i>length). Note that you cannot change a bucket key.</i><br />
<br />
グローバルにユニーク、つまり世界でただ一つの名前である必要があります。文字は3以上128以下の文字数で、小文字のアルファベット、数字、-と_と.が使えるそうです。<br />
<h4>
policyKey</h4>
これが上で説明した、ファイルの保持期間で「transient, temporary, persistent」の三つをえらぶことができます。<br />
<br />
それではDHCのBODY部分を設定します。文字は""で囲むようにします。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8-Pxvnla07ryvQlL12CYMmtPw77Hgw8amBHhuQyeYfNJNCTY-G3XbvkwYHmXcs21WY0YSFNL28VWZxRmOPey6_qBuOiovclGN8g6kEBSLL8esibGjI95vGXA8uXlo9ZtBpck0Kp4xPJw/s1600/bs00043.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="130" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8-Pxvnla07ryvQlL12CYMmtPw77Hgw8amBHhuQyeYfNJNCTY-G3XbvkwYHmXcs21WY0YSFNL28VWZxRmOPey6_qBuOiovclGN8g6kEBSLL8esibGjI95vGXA8uXlo9ZtBpck0Kp4xPJw/s400/bs00043.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">BODYの記述 2行目の末尾に,が必要</td></tr>
</tbody></table>
バケットの名前は世界でただ一つだけなければならないので特徴的な名前を付ける必要がありますね。それでは[Send]を押してみます。<br />
<br />
<h2>
バケットづくり成功!</h2>
反応が返ってきて[200 OK]と出れば成功です。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq6OpM-BB78t6A4KDsB9uMN-f20S-B-WwwOPYDFAW-84HtVyTnFm7LRIzi4R6G-emL71ZD0RTxrmrs6nfXeNA9ii51NdNik4b6fxeD6_SohmUmznii92-ZzbXfkjTC5LIMm2gYHdIJDmc/s1600/bs00044.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq6OpM-BB78t6A4KDsB9uMN-f20S-B-WwwOPYDFAW-84HtVyTnFm7LRIzi4R6G-emL71ZD0RTxrmrs6nfXeNA9ii51NdNik4b6fxeD6_SohmUmznii92-ZzbXfkjTC5LIMm2gYHdIJDmc/s400/bs00044.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">200 OK バケット作成成功</td></tr>
</tbody></table>
返ってきたデータをみると以下のようになっています。<br />
<br />
{<br />
"<b>bucketKey</b>": "<b>blacksmithbucket1203</b>",<br />
"bucketOwner": "n3bCMAZLQ6bRw7t72nNeG4qEsvO7PGYR",<br />
"createdDate": 1480727832782,<br />
"permissions":[<br />
{<br />
"authId": "n3bCMAZLQ6bRw7t72nNeG4qEsvO7PGYR",<br />
"access": "full"<br />
}<br />
],<br />
"policyKey": "transient"<br />
}<br />
<br />
無事バケットを作成することができました。ここで、もう一度Sendボタンを押してみます。すると<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-10sXUorbp9M-e7EIXEetIe3GRkUClkbGNv9GCDFlP2g2MihMAcjDNPCKTtFi06iGuFjlfii9gKNtsaEw6e-XvdaBpghxEeASkTEvQzVw7D-nm-GgRwREjd4ejns7PPNCdm93w-fRib8/s1600/bs00045.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-10sXUorbp9M-e7EIXEetIe3GRkUClkbGNv9GCDFlP2g2MihMAcjDNPCKTtFi06iGuFjlfii9gKNtsaEw6e-XvdaBpghxEeASkTEvQzVw7D-nm-GgRwREjd4ejns7PPNCdm93w-fRib8/s400/bs00045.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">エラーメッセージ</td></tr>
</tbody></table>
今度はエラーになりました。reasonのところに「この名前のバケットはすでに存在しています。」というメッセージが出ました。同じ名前のバケットを複数作ることはできないということですね。なにせ世界で唯一の名前でなければならないので、慎重に名前を設定する必要があります。<br />
<br />
つぎに、BODYの名前を「Blacksmithbucket1203」など、大文字のアルファベットを入れて、再度[Send]を押してみます。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWqF1ndXqA1Ec60taVCzVoZoIuzk2nvdDAvQnZFJ1xOsB4e1dYlvMnFn4q9gzR7l5t4wbUX1xmp8OVu4dVCBDbLVS_iTb8cgcNGPkQtit_Ue_3mCXNUBVZG3qWAjZYABD8RaTuOixOCl8/s1600/bs00046.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWqF1ndXqA1Ec60taVCzVoZoIuzk2nvdDAvQnZFJ1xOsB4e1dYlvMnFn4q9gzR7l5t4wbUX1xmp8OVu4dVCBDbLVS_iTb8cgcNGPkQtit_Ue_3mCXNUBVZG3qWAjZYABD8RaTuOixOCl8/s400/bs00046.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">エラーメッセージ</td></tr>
</tbody></table>
今度は、400 Bad Request と返されて、reasonに「使える文字は-_.アルファベット小文字と数字で3以上128文字以下」という、命名規則の制限事項が喚起されています。<br />
<br />
なかなか、親切じゃないですか!<br />
<br />
次回は、このバケットにデータをアップロードしてみます。<br />
<br />髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-91119589688371760982016-12-02T21:38:00.000+09:002016-12-03T08:36:09.293+09:00アクセストークン=Forge行き切符<h2>
データはどこに?</h2>
ビューア(FORGE Viewer)に表示するデータはどこに保存されているのか?あるいはどこに保存するのか?というと、いくつかの答えがあります。<br />
<ul>
<li>A360 Team (BIM360 Team)</li>
<li>Fusion Team</li>
<li>BIM360 Docs</li>
</ul>
などの、オートデスクのクラウドサービスのストレージです。ところがこれらのクラウドストレージからデータを取得するには、<b><span style="color: orange;"><a href="https://developer.autodesk.com/en/docs/oauth/v2/tutorials/get-3-legged-token/" target="_blank">3-Legged Token</a></span></b> なるものを取得しなければなりません。<br />
<br />
うーん、なんか心のハードルが高いです。<br />
<br />
そこでますは、2-Legged Token (3より2のほうが簡単そうだから・・・)を使って、データにアクセスしてみます。この場合、データは<br />
<ul>
<li><b>バケット</b></li>
</ul>
と呼ばれる、専用のクラウドストレージスペースを使います。自分専用のバケットを作成するには、<br />
<ul>
<li><b>アクセストークン</b></li>
</ul>
なる「切符」が必要で、この切符を取得するには<br />
<ul>
<li><b>クライアントID</b></li>
<li><b>クライアントシークレット</b></li>
</ul>
という二つの<u><b><span style="color: orange;">合言葉</span></b></u>が必要です。この二つの合言葉は、前回アプリを登録したときにあなた専用の合言葉が提供されているのです。<br />
<h2>
クライアントIDとクライアントシークレットの確認</h2>
それでは再度<a href="https://developer.autodesk.com/" target="_blank">こちら</a>にアクセスしてサインインしてみましょう。そして登録したアプリをクリックします。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX7sO8Katbthi42DW9dnuFpcd7B3XQkJ4UWhou6CIrBq_Ch1Q2lfjb0u75GvbfmwWDP4o3J6V3yHuHomEas-jfaNt1truQfkbgBUjFIjaX7oNdhrTMxTBd0rLWbaPt-wxsyk3Ex1OaMkA/s1600/bs00015.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX7sO8Katbthi42DW9dnuFpcd7B3XQkJ4UWhou6CIrBq_Ch1Q2lfjb0u75GvbfmwWDP4o3J6V3yHuHomEas-jfaNt1truQfkbgBUjFIjaX7oNdhrTMxTBd0rLWbaPt-wxsyk3Ex1OaMkA/s400/bs00015.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">アプリをクリック!</td></tr>
</tbody></table>
すると下の図のようになっていて、<br />
<br />
<ul>
<li>Client ID</li>
<li>Client Secret</li>
</ul>
<br />
が見えるはずです。ClientSecretは右の「show」をクリックすると確認できます。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgri8NQKwpm9-6piuZoLxT4Pjoox-fuWmvtcuAA2WJ-1nVFRO9_Endw1IyMBxwwB-aYw5KM-223XHqiu5KYmOsNdRTxoS8lhp3E4lYAcQib0MNycWEo3WFFUz_xD8GNNfBKiNqUDKM7i_Y/s1600/bs00016.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgri8NQKwpm9-6piuZoLxT4Pjoox-fuWmvtcuAA2WJ-1nVFRO9_Endw1IyMBxwwB-aYw5KM-223XHqiu5KYmOsNdRTxoS8lhp3E4lYAcQib0MNycWEo3WFFUz_xD8GNNfBKiNqUDKM7i_Y/s400/bs00016.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Client IDとClient Secretがありますね!</td></tr>
</tbody></table>
この二つの文字列を使って、バケット作成用のアクセストークンを取得してみましょう。<br />
<br />
<br />
<h2>
チュートリアルを実行してみる・・・(*_*)</h2>
<br />
<br />
アクセストークン(切符)を取得するにはどうしたらいいのか?ちょうどその手順を示した「<b><span style="color: orange;">ステップバイステップチュートリアル</span></b>」なるものが用意されています。ありがたい!早速<b><span style="color: orange;"><a href="https://developer.autodesk.com/en/docs/oauth/v2/tutorials/get-2-legged-token/" target="_blank">こちらをクリック</a></span></b>して、見てみましょう。<br />
<br />
しかし、これは????<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRcinxdRCh3pg-FGq1SbYbq2BvkyOduHc8jzKTI3x3-wJ3UyugNaEWHAneFbWztqoZnT4jtVCm4MEux0Ez-paFSI-X66W2hIMXUTcC9bD_LTKMEhPGAvOUfvOkaCfFWrO83kbKyYPom9M/s1600/bs00018.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRcinxdRCh3pg-FGq1SbYbq2BvkyOduHc8jzKTI3x3-wJ3UyugNaEWHAneFbWztqoZnT4jtVCm4MEux0Ez-paFSI-X66W2hIMXUTcC9bD_LTKMEhPGAvOUfvOkaCfFWrO83kbKyYPom9M/s400/bs00018.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">これはなんでしょう・・・・・(´・ω・`)</td></tr>
</tbody></table>
<br />
いきなり「-curl」などと始まっていて、これまたさっぱりわかりませんねー。cURLなんて言ってるけど、結局REST APIですよね。<br />
<br />
RESTって「パラメータを指定して特定のURLにHTTP(文字列を送り込むってこと)でアクセスすると、XMLで記述されたメッセージが返されてくるシステム」という定義です。<br />
<br />
ということは、パラメータの文字列を指定して、とあるURLに文字列を送り込むとXML形式の情報が返されるってことです。<br />
<br />
それじゃあDHCを使って具体的にやってみようじゃないですか!<br />
<br />
<h2>
DHCを起動!</h2>
<br />
最初の回でDHCをインストールしましたが、まだインストールしていない場合は、初回を参考にしてインストールしてください。それでは、Google Chromeを立ち上げて、アドレスバーの右端に表示されているDHCのボタンをクリックしましょう。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsmaKTBJe8OUJGLc1U7d302hrOJ-2W6m6bo66FEUxRiYXQn0Jus5-IwkkXqBCpzOpF5g5nAG4cLkWEEKJ4PZCUVsqfJEvKT7VchcoTrEcbG4eRybSJRmtEpWSv8oZ-hC1BSUbw51u7Xzo/s1600/bs00020.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="104" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsmaKTBJe8OUJGLc1U7d302hrOJ-2W6m6bo66FEUxRiYXQn0Jus5-IwkkXqBCpzOpF5g5nAG4cLkWEEKJ4PZCUVsqfJEvKT7VchcoTrEcbG4eRybSJRmtEpWSv8oZ-hC1BSUbw51u7Xzo/s320/bs00020.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">DHCを起動しよう!</td></tr>
</tbody></table>
すると次のような画面になるはずです。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4vgAhe5w-hJACJQf0lmQoC_v-vjz_T2YGuglk-tI3Th2zZ7_7xS8XCN5ckABIwbUetkOMMtOPvP7xBgVmM2Dwm8Ygh2IDDOqTWFHkEZnRImeUX5aSgQOtcI1ekQNq2NwCaOwQD2CVY7I/s1600/bs00021.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4vgAhe5w-hJACJQf0lmQoC_v-vjz_T2YGuglk-tI3Th2zZ7_7xS8XCN5ckABIwbUetkOMMtOPvP7xBgVmM2Dwm8Ygh2IDDOqTWFHkEZnRImeUX5aSgQOtcI1ekQNq2NwCaOwQD2CVY7I/s400/bs00021.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">DHCの画面</td></tr>
</tbody></table>
これから行うテストのために、一番上の「type a name」のところに適切な名前を入れましょう。私は「FORGE GET a 2-Legged Token 001」としました。<br />
<br />
<h2>
DHCでStep-by-Step Tutorialを実行</h2>
それではDHCを使ってFORGEの使い方を研究してみましょう。まず、リクエストの送信先URLや送信するパラメータをを決めなければなりません。これは以下のマニュアルに書いてあります。<br />
<h4>
<a href="https://developer.autodesk.com/en/docs/oauth/v2/reference/http/">https://developer.autodesk.com/en/docs/oauth/v2/reference/http/</a></h4>
今回はここの「Two-Legged Context」の「P<a href="https://developer.autodesk.com/en/docs/oauth/v2/reference/http/authenticate-POST/" target="_blank">OST authenticate (POST認証)</a>」を選択するとでてきます。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9W5G-S1h4FdwrSmSGzuZsR-Qyf_zj3IYbV5imrEja2dpw4RVQYX_D0hQDeCB6kZHJaYkUeejYHeMwcfGssYNCNdtxjb9maHbSvh96bFQsbZ9zV3emIHOKMRz7i-tM_-7WxWNi6fUDUl4/s1600/bs00022.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9W5G-S1h4FdwrSmSGzuZsR-Qyf_zj3IYbV5imrEja2dpw4RVQYX_D0hQDeCB6kZHJaYkUeejYHeMwcfGssYNCNdtxjb9maHbSvh96bFQsbZ9zV3emIHOKMRz7i-tM_-7WxWNi6fUDUl4/s400/bs00022.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Two-Legged Contextの「POST認証」をクリック</td></tr>
</tbody></table>
こちらに必要なURIやパラメータの情報があります。整理しながら、DHCに設定していきましょう。まず、送信先ですがマニュアルによると以下のようになっています。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi898g58SMVmA8Fa1x3A4NSI8HTC9LpgGXbwxct5xeHe11DzTzjBQCBZet1wlCVz3iV7q7cd1sOt0nG5p0hk0SrQ36zB52t8NEp_xntIouqFmgYJCmbus-IkVtpN2Usw66koT9ywaueJm4/s1600/bs00023.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="90" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi898g58SMVmA8Fa1x3A4NSI8HTC9LpgGXbwxct5xeHe11DzTzjBQCBZet1wlCVz3iV7q7cd1sOt0nG5p0hk0SrQ36zB52t8NEp_xntIouqFmgYJCmbus-IkVtpN2Usw66koT9ywaueJm4/s400/bs00023.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">送信先URL</td></tr>
</tbody></table>
<br />
そこで、DHCのRequestの部分に、このURIをコピペして、末尾のメソッドを「POST」に設定します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBo9CP0VAPQ1vv-dw_nww6YEqV90aYUWhu8uyvi8UWhlA992JfiX5_P1Bc1XYoWR63FNWS3_Pumoz7pqiTGyXq_BCAnPrnMmetpa1F_YbJmrlSvpf5u2SV_02Sanp7POt8m9ZxrIx6gZw/s1600/bs00025.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBo9CP0VAPQ1vv-dw_nww6YEqV90aYUWhu8uyvi8UWhlA992JfiX5_P1Bc1XYoWR63FNWS3_Pumoz7pqiTGyXq_BCAnPrnMmetpa1F_YbJmrlSvpf5u2SV_02Sanp7POt8m9ZxrIx6gZw/s400/bs00025.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">送信先とメソッドを指定</td></tr>
</tbody></table>
次にパラメータを指定するのですが、formで作成するので、画面右の「text▼」をクリックして、「form」を選んでおきます。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxT0sCuPTpycL6aNppAEOlTaeXc24D6FF7RkKFDwl5IBnPCBAPnANYldBh6BYuAroRVCNdrfEn_wozo78iVOs_y-QFDagKmVCv_Ek_WZqd49FH-ofgPfvDzVs1l83AZ2zLKJINEOmpiMM/s1600/bs00026.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxT0sCuPTpycL6aNppAEOlTaeXc24D6FF7RkKFDwl5IBnPCBAPnANYldBh6BYuAroRVCNdrfEn_wozo78iVOs_y-QFDagKmVCv_Ek_WZqd49FH-ofgPfvDzVs1l83AZ2zLKJINEOmpiMM/s400/bs00026.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">formに変更</td></tr>
</tbody></table>
送り込むパラメータですが、<a href="https://developer.autodesk.com/en/docs/oauth/v2/reference/http/authenticate-POST/" target="_blank">こちらの「Header」と「Body structure」</a>に書かれています。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3sSTCQdACt3WjHdW2ZmRcsyZEPsZa8UW3LqG0R2AqWILnt4xsKodXBbTVJXKfdDPnq1fbHqetasTZsAgYmmmn160-v8pTf68bDuXeSezHFpavu6KkmibIg2ykSY6awXgCID-JW_3LPmk/s1600/bs00027.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3sSTCQdACt3WjHdW2ZmRcsyZEPsZa8UW3LqG0R2AqWILnt4xsKodXBbTVJXKfdDPnq1fbHqetasTZsAgYmmmn160-v8pTf68bDuXeSezHFpavu6KkmibIg2ykSY6awXgCID-JW_3LPmk/s400/bs00027.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ヘッダー</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMCpcukSzoJ5M4zMlCQvFZNf1eJ48LdxJUptmRYbmR-qgngYLWSCGq81G8m9D3XAm1yjtku7ojEUhaRG3jTn2QIZxwByjIrY9QpCRpYUCmXWFDynFxFJoZWUGny9VwBP0sD66TexsxgcY/s1600/bs00028.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMCpcukSzoJ5M4zMlCQvFZNf1eJ48LdxJUptmRYbmR-qgngYLWSCGq81G8m9D3XAm1yjtku7ojEUhaRG3jTn2QIZxwByjIrY9QpCRpYUCmXWFDynFxFJoZWUGny9VwBP0sD66TexsxgcY/s400/bs00028.PNG" width="367" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Body Structure</td></tr>
</tbody></table>
まず、ヘッダーですが、これはDHCでformを指定した時点で、勝手に作ってくれています。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_MOKJzNH0njCCF8Y240sZwRgPtRtWExb7lcnKw1o01oWy6m5T0apf5D93CcZwyzTM0u-097iwSGxIZireiRZsWeHR2mkuEuPiN416o23C3NzOOig5o6eWakema7M_K6oFCNLAJ-u-Lf0/s1600/bs00029.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_MOKJzNH0njCCF8Y240sZwRgPtRtWExb7lcnKw1o01oWy6m5T0apf5D93CcZwyzTM0u-097iwSGxIZireiRZsWeHR2mkuEuPiN416o23C3NzOOig5o6eWakema7M_K6oFCNLAJ-u-Lf0/s400/bs00029.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ヘッダーは自動的につけてくれる</td></tr>
</tbody></table>
次にBODYの記述ですが、4つのNameが必要なので「BODY」の下の「+」を4回クリックし、cliend_id、client_secret、grant_type、scopeの名前を追加します。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkUER5G-1B1pwMUQrNlypmuXMPt2q0mCtzkVyxPW_dXQzZ0z3aOAYs-hyiiaQu2yZqr8jmEq1WxxMF0xlu8g8BcXZyMvKL4yEp1xJzwQiypJIa_cpgT8UjVfVmS3wSsCAN0WjzUV2Jwvw/s1600/bs00030.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="151" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkUER5G-1B1pwMUQrNlypmuXMPt2q0mCtzkVyxPW_dXQzZ0z3aOAYs-hyiiaQu2yZqr8jmEq1WxxMF0xlu8g8BcXZyMvKL4yEp1xJzwQiypJIa_cpgT8UjVfVmS3wSsCAN0WjzUV2Jwvw/s400/bs00030.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">BODYに名前を追加</td></tr>
</tbody></table>
<h4>
client_id<br />client_secret</h4>
これらは、上で説明したようにFORGEに登録したアプリケーションのページに表示されるクライアントIDとクライアントシークレットの値をいれます。クライアントシークレットは*****で表示されていますが、「show」をクリックすると現れます。<br />
<h4>
grant_type</h4>
マニュアルによると「Must be <span style="background-color: #f9f2f4; color: #c7254e; font-family: monospace , serif; font-size: 14px;">client_credentials</span>」です。Must beですので、この「<span style="background-color: #f9f2f4; color: #c7254e; font-family: monospace , serif; font-size: 14px;">client_credentials</span>」の文字を設定します。<br />
<h4>
scope</h4>
スコープは目的に応じていろいろ組み合わせて設定します。今回は<a href="https://developer.autodesk.com/en/docs/oauth/v2/tutorials/get-2-legged-token/" target="_blank">チュートリアル</a>にしたがって「<span style="background-color: #f9f2f4; color: #c7254e; font-family: monospace , serif; font-size: 14px;">data:read</span>」とします。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCSrMNsAfkzHFSI6WmxzpxlEW4f4wSwuZsOQKBjFLC0Mj7NIdCpk0bQhWVCwshlzK_4ksd4UnwmpirGslDozDLhmDmVKlNyhnT0LWKanBQoOBTj48i1e_qOVG9WXlyUkoZLyFNLrap7VI/s1600/bs00031.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCSrMNsAfkzHFSI6WmxzpxlEW4f4wSwuZsOQKBjFLC0Mj7NIdCpk0bQhWVCwshlzK_4ksd4UnwmpirGslDozDLhmDmVKlNyhnT0LWKanBQoOBTj48i1e_qOVG9WXlyUkoZLyFNLrap7VI/s400/bs00031.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">client_idとclient_secretは皆さんのアプリの値を設定してください。</td></tr>
</tbody></table>
<br />
<h2>
レスポンスを見てみる</h2>
これで準備完了!アドレスのよこの青の[Send]ボタンをクリックしてみましょう!<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfyNwnSCyhXVzELmPY4EEiFT7bqppRt0C20ejJIBaXE6c2qbJOYusSyu3sOaU-4-3uwnvMG2vcWBV847mck7D55n4Q8Wyi5adSnMYhvy_TzRoge-RsgKOP5u-afYP8qu0hO1GHKws6y9I/s1600/bs00032.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="77" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfyNwnSCyhXVzELmPY4EEiFT7bqppRt0C20ejJIBaXE6c2qbJOYusSyu3sOaU-4-3uwnvMG2vcWBV847mck7D55n4Q8Wyi5adSnMYhvy_TzRoge-RsgKOP5u-afYP8qu0hO1GHKws6y9I/s400/bs00032.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">リクエストを送ってみよう!</td></tr>
</tbody></table>
どうだっ!!キター!<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8bq5Moo3lWRBT21GOne5ofQnvJx30FEHHkwwbO8EvK_6xHxCFMy2zu7G3P6b61DG-hW1S-Neh-8gj4tAPtWK0bR2iDZV7Srx3YBwhtn0r9JPV083njfxKpiERVyXNROG8kN1QmaPdKNk/s1600/bs00033.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8bq5Moo3lWRBT21GOne5ofQnvJx30FEHHkwwbO8EvK_6xHxCFMy2zu7G3P6b61DG-hW1S-Neh-8gj4tAPtWK0bR2iDZV7Srx3YBwhtn0r9JPV083njfxKpiERVyXNROG8kN1QmaPdKNk/s400/bs00033.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">レスポンス</td></tr>
</tbody></table>
おお!感動的だ。ちゃんと「200 OK」の文字が!BODYのところを拡大すると、こうなります。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqZMlLOEc2B2_-piJ53fxm-tSLCiCNl9hW12gEeuQSW2KNY5HFGCMG4l2SUgv3sx5NuacwzEfXl1_Os9A-A4vtOp4gpS3d-tkPfO3IdqNXKlURRlXHQozKtb8OE-LRKxPQdHO1BD0odbM/s1600/bs00034.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqZMlLOEc2B2_-piJ53fxm-tSLCiCNl9hW12gEeuQSW2KNY5HFGCMG4l2SUgv3sx5NuacwzEfXl1_Os9A-A4vtOp4gpS3d-tkPfO3IdqNXKlURRlXHQozKtb8OE-LRKxPQdHO1BD0odbM/s400/bs00034.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">戻り値</td></tr>
</tbody></table>
これらの意味はちゃんと<a href="https://developer.autodesk.com/en/docs/oauth/v2/reference/http/authenticate-POST/" target="_blank">マニュアルの「Responce」の「Body structure」</a>に書かれています。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipj1hEk3R3KibFhBU6SO7M6Z27lIStJwXD5Et2rxrDASsEaHH5O6QZ9cirQEa88IYSh5976P0yuHQ-RnPruDiIqFcpZW6DkxQxeijRu02jz_rVN-9D2SYh3UgXlBQMgUfu6eSyQlgFqvE/s1600/bs00035.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipj1hEk3R3KibFhBU6SO7M6Z27lIStJwXD5Et2rxrDASsEaHH5O6QZ9cirQEa88IYSh5976P0yuHQ-RnPruDiIqFcpZW6DkxQxeijRu02jz_rVN-9D2SYh3UgXlBQMgUfu6eSyQlgFqvE/s400/bs00035.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">戻り値の解説</td></tr>
</tbody></table>
<h3>
token_type</h3>
いつも Bearerでしょう。<br />
<h3>
expire_in</h3>
アクセストークンの有効期限(秒で表示してます)<br />
<h3>
access_token</h3>
これがアクセストークン(切符)の文字列です。(^◇^)<br />
<br />
こうしてみると、一見不親切そうなマニュアルも、ひょっとしてちゃんとしてるんじゃないか?などと期待を持ってしまいそうです。<br />
<br />
以上無事、アクセストークン(切符)を取得できました。<br />
でもこの切符はどうやって使うんだろうねぇ・・・・・<br />
<br />
<br />
<br />髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-36636698477986676822016-11-27T07:30:00.000+09:002016-11-27T11:49:43.116+09:00アプリを登録しよう!<h2>
アプリケーションの登録</h2>
FORGEを利用するには、ユーザー登録をして、さらに作成するアプリケーションを登録し、<br />
<br />
<ul>
<li>クライアントID</li>
<li>クライアントシークレット</li>
</ul>
<br />
という二つの「鍵」を取得しなければなりません。このあたりの概念からして????なのですが、まあ要するにAutodeskから<span style="color: orange;"><b>FORGE利用許可証をもらう</b></span>ようなものでしょう。きっと。<br />
<br />
とりあえず<br />
<br />
<a href="https://developer.autodesk.com/">https://developer.autodesk.com/</a><br />
<br />
<br />
にアクセスしてみましょう。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJNEvLxrBisHXLqoEc9oyotNdE18t2I_0gGCcuVYNcmgqTQ_tFsGzB0KXK_kuSw_DctU5RsFuPKk0b-FwjMTIOay5BfGokncuvu30CsuaNAXauWRCKHUXa1vEEqQUErI711-mFgAHBXV0/s1600/bs00005.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJNEvLxrBisHXLqoEc9oyotNdE18t2I_0gGCcuVYNcmgqTQ_tFsGzB0KXK_kuSw_DctU5RsFuPKk0b-FwjMTIOay5BfGokncuvu30CsuaNAXauWRCKHUXa1vEEqQUErI711-mFgAHBXV0/s400/bs00005.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ここがFORGEの入り口だ!</td></tr>
</tbody></table>
Autodeskアカウントを持っていない人は、この真ん中のオレンジのボタン「TRY FORGE FOR FREE (タダでFORGEを使ってみよう!)」を押してAutodeskアカウントを作成します。なんせFREE(タダ)ですから心配いりません。<br />
<br />
もしも、Autodeskアカウントを持っているならば、右上の[SIGN IN]から入ってください。ログインすると下の図のような画面になります。<br />
まだアプリが登録されていないので、右上の[CREATE APP]をクリックします。すると・・・<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhydewmxcJB9SIRTxyJtXBPz7hSwHxyL3jT4epsq561iUCRaFnL00nxvLz2kn__VvM1bYUvPygbHAt2PK6xElpB8QsOy5REvvX55lcGvJ-mFn_bIirewxTT588KNd-zcDVjI6pQs2iwINw/s1600/bs00007.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhydewmxcJB9SIRTxyJtXBPz7hSwHxyL3jT4epsq561iUCRaFnL00nxvLz2kn__VvM1bYUvPygbHAt2PK6xElpB8QsOy5REvvX55lcGvJ-mFn_bIirewxTT588KNd-zcDVjI6pQs2iwINw/s400/bs00007.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">CREATE APP をクリックすると早速ハードルが!</td></tr>
</tbody></table>
うーむ。いったいどうすればいいのだろう?と思うのですが、まず、どのAPIを使いたいのかを選択するようです。4つのAPIが並んでいますが、それぞれ調べてみると次のような役割があるようです。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPlr5aNKkvJm0T_kJ72ZCa2Is37ZdfqGlzQY7gQLYYCTDeLhysvlRTL7pUPtVtzYwFB3CHTh5FKQ8kuZAb_Z12UNeT2Ar0BSN4nlDHgvP83UUOM8ODh_bNULOChgtHM4iFNYqAxu4YMtg/s1600/bs00008.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="78" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPlr5aNKkvJm0T_kJ72ZCa2Is37ZdfqGlzQY7gQLYYCTDeLhysvlRTL7pUPtVtzYwFB3CHTh5FKQ8kuZAb_Z12UNeT2Ar0BSN4nlDHgvP83UUOM8ODh_bNULOChgtHM4iFNYqAxu4YMtg/s320/bs00008.PNG" width="320" /></a></div>
<h4>
BIM 360 API</h4>
BIM360Docsに保存されているデータを利用したい場合はこれを使います。今回は使わないのでOFF。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeq1G_P50ZpQjAAX_FAPRnICv8BLWEGGkBQJQQI-YGyILqw_zhU_P6zHY1MVE_qrMM2syX-Xnpn_PhIvz194pSgFqT5PlLwYC-zW5hUCoqX4N3v0npVKjgC0VYc6IpZQCsmdsyr8hf6ic/s1600/bs00009.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeq1G_P50ZpQjAAX_FAPRnICv8BLWEGGkBQJQQI-YGyILqw_zhU_P6zHY1MVE_qrMM2syX-Xnpn_PhIvz194pSgFqT5PlLwYC-zW5hUCoqX4N3v0npVKjgC0VYc6IpZQCsmdsyr8hf6ic/s320/bs00009.PNG" width="320" /></a></div>
<h4>
Data Management API</h4>
これはもう必須のAPIともいうもので、クラウド上にデータをアップロードしたり、ダウンロードしたり、BIM360 Team(Docsではない)やFusionTeamのデータにアクセスするためのAPIです。もちろん必要です。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw8Lt9FqXVt5SUZfUV-0QqRu5lD2-iUg_0Bra3p4ofYrRuqv1KgdrKHuHyd5pte5YkCkq1ADEMYIWM2qXfJM6L_c_OOnU9hco1v8ac09-VwvL0ryL1lYp_jt4AplbtXiWlhMRWP7KfeE8/s1600/bs00010.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="75" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw8Lt9FqXVt5SUZfUV-0QqRu5lD2-iUg_0Bra3p4ofYrRuqv1KgdrKHuHyd5pte5YkCkq1ADEMYIWM2qXfJM6L_c_OOnU9hco1v8ac09-VwvL0ryL1lYp_jt4AplbtXiWlhMRWP7KfeE8/s320/bs00010.PNG" width="320" /></a></div>
<h4>
Design Automation API</h4>
ウルトラ簡単に言うとクラウド上にあるAutoCADです。ただし、ユーザーインターフェイスがありません。マウスでオブジェクトを選択するようなことはできませんが、AutoCADの機能を使ってボタン一発でクラウド上で自動処理!なんてアプリを作成したいときにはとっても便利です。でも今回は使わないのでOFF。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6LQrM5g4BaHUbdjW2gZ8Kkx-Id0_1N0f87INWWGkin-ktNS1DAIaOmpu0TSplwi18J1iu_fSA2VR8zaOTtsMYa8n4SpXydsabC13HzVMaxE_PVqXypi_AHK7jEV5woY6_xfVm2I0gCB8/s1600/bs00011.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6LQrM5g4BaHUbdjW2gZ8Kkx-Id0_1N0f87INWWGkin-ktNS1DAIaOmpu0TSplwi18J1iu_fSA2VR8zaOTtsMYa8n4SpXydsabC13HzVMaxE_PVqXypi_AHK7jEV5woY6_xfVm2I0gCB8/s320/bs00011.PNG" width="320" /></a></div>
<h4>
Model Derivative API</h4>
必須。アップロードしたファイルをいろいろなフォーマットに変換したり、メタデータを取り出したり、ビューアに表示できるようにしたりと、大活躍するAPIです。<br />
<br />
今回は<br />
<br />
<ul>
<li>RevitまたはNavisのデータをクラウドストレージにアップロードして</li>
<li>そのデータをビューアで表示する。</li>
</ul>
<br />
という単純な機能を実装するので、<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQJ427ZSoLUuqixz2Yl5rRIcoZv7TvY6N9UuGCOn9dOyWfjXM84zKemR0714mrKy68IpvDjLNI8hniqC_LnwNltDcH2LtM9D6nQ1hhflKROeDCSNqZx4uDpCL4ixa35bPNjFrMU0ZnXTI/s1600/bs00012.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQJ427ZSoLUuqixz2Yl5rRIcoZv7TvY6N9UuGCOn9dOyWfjXM84zKemR0714mrKy68IpvDjLNI8hniqC_LnwNltDcH2LtM9D6nQ1hhflKROeDCSNqZx4uDpCL4ixa35bPNjFrMU0ZnXTI/s400/bs00012.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Data Management APIとModel Derivative APIを使う。</td></tr>
</tbody></table>
<br />
とします。<br />
<h2>
アプリの基本情報</h2>
次に作成するアプリの基本情報を入力します。<br />
<h4>
App Name</h4>
アプリの名前です。今回はBlackSmithBasicViewerとしました。<br />
<h4>
App Description</h4>
アプリの説明。なんでもいいです。<br />
<h4>
Call Back URL</h4>
これはBIM 360 TeamやFusion Team あるいは BIM 360 Docsにアクセスするようなアプリを作成する際に、最終的にFORGEからユーザー情報を送り込むURLです。あまりよくわかりませんが、今回はこのような機能は実装しないので、関係ない!といえば関係ないのですが、何か入れないとアプリが作れないので<br />
<br />
<ul>
<li>http://www.blacksmithsite.com</li>
</ul>
<br />
という存在しない適当な文字列を入れました。正直言って、今のところ詳細な意味は私もわかっていなのですが、アプリ作成の時にはこのURLの実在を調べることはないようですし、あとから変えることもできます。<br />
<h4>
Your Web site</h4>
optionとなっているのでなにも入れません。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDPSaywk1ZYzeF4r1CJtsVspYBUbvPb92bvGhGTHizXRjUT_BSMwEh_I0Mhyoai6ahfVM_s1LT677bxjGOHgx1VePvFaTm0y-xQXH6ytdErk76eZwv5Hjnk15HbBy4EbnGZGdwcPtiyLQ/s1600/bs00013.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDPSaywk1ZYzeF4r1CJtsVspYBUbvPb92bvGhGTHizXRjUT_BSMwEh_I0Mhyoai6ahfVM_s1LT677bxjGOHgx1VePvFaTm0y-xQXH6ytdErk76eZwv5Hjnk15HbBy4EbnGZGdwcPtiyLQ/s400/bs00013.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">アプリの基本情報を入力</td></tr>
</tbody></table>
<br />
最後に[Create Apps]をクリック!・・・・どうだ????<br />
<br />
やったー。アプリ作成成功!<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHuyY2QfUvVJekQ4uXxchhKrTz4pYo15ti4TK-3eOm_Olet4gqpEqNjJ17IzuRzudh_ctIXMFn2bsNve89x_ASyITeViX5zL7sq92dYeqiOOwlJJvxyG2jQRynuDvlmR3pmUr1R7-KxwY/s1600/bs00014.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHuyY2QfUvVJekQ4uXxchhKrTz4pYo15ti4TK-3eOm_Olet4gqpEqNjJ17IzuRzudh_ctIXMFn2bsNve89x_ASyITeViX5zL7sq92dYeqiOOwlJJvxyG2jQRynuDvlmR3pmUr1R7-KxwY/s400/bs00014.PNG" width="355" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">アプリ登録に成功!</td></tr>
</tbody></table>
で、これからどうすりゃいいんだろうねぇ・・・・髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0tag:blogger.com,1999:blog-4757733810072643179.post-46536665887476488122016-11-24T23:06:00.001+09:002016-12-01T06:42:27.627+09:00Try FORGE!<h2>
FORGE を Visual Studio と Visual Basic .NET で</h2>
<br />
このブログではAutodeskが提唱するクラウドサービス「FORGE」の開発について、デスクトップ開発者の立場から解説します。<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjEvvVH1uRI23PR-H0s0-QLo3lxPilNVkMfz2OFC8wBpNmcTk-aFBSHHZphm7tdZU3ai7P8y5q4Hxj2Odoz_SEtihVi8BlWOp7E_XA08xFCESR1aYyTpftXp5cqH6IJE3_o_1Xh0tZjDc/s1600/bs00003.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjEvvVH1uRI23PR-H0s0-QLo3lxPilNVkMfz2OFC8wBpNmcTk-aFBSHHZphm7tdZU3ai7P8y5q4Hxj2Odoz_SEtihVi8BlWOp7E_XA08xFCESR1aYyTpftXp5cqH6IJE3_o_1Xh0tZjDc/s320/bs00003.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">FORGE だって Visual Studio</td></tr>
</tbody></table>
<br />
筆者自身はAutoCAD、Revitでアドオンアプリケーションを開発してきました。FORGEはクラウドコンピューティングですから、WEB開発の知識が必要で、デスクトップ開発者にとってはわからないことだらけです。単純に考えても・・・<br />
<br />
<ul>
<li>どうやったら始められるのか?</li>
<li>開発言語は何を使えばいいのか?</li>
<li>開発環境はどうするのか?</li>
<li>そもそも何ができるのか?</li>
</ul>
<br />
などなど、様々なハードルがあります。なにせわれわれデスクトップ開発者にとっては、Autodeskから提供されるサンプルをGitHubで見ても、<b>javascript</b>だとか<b>Node.js</b>だとか、見慣れない言語と開発環境が使われていて、なんのことだかさっぱりわかりません。そもそも<b>GitHub</b>自体がよくわからないという話もありますが・・・。<br />
<br />
そこで、このブログではまず手始めに、<br />
<ul>
<li>開発環境は<b><span style="color: red;">Visual Studio</span></b></li>
<li>開発言語は<b><span style="color: red;">Visual Basic.net / ASP.net</span></b></li>
<li>WEBブラウザは<b><span style="color: red;">Google Chrome</span></b></li>
<li>RESTクライアントとして<b><span style="color: red;">DHC REST CLIENT</span></b></li>
</ul>
という前提で話を進めます。いろいろ文献をあさっていると、Visual Studioでのクラウド開発はあまりメジャーではないようですが、そんなことは全く気にせず、慣れた組み合わせで開発を進め、FORGEに対する理解を深めるところから始めましょう。<br />
<h2>
開発環境のダウンロード</h2>
<br />
長年愛用したVisual Studio です。Webプログラミングだって問題ないはず!まずは<br />
<br />
<a href="https://www.visualstudio.com/ja/downloads/">https://www.visualstudio.com/ja/downloads/</a><br />
<br />
にアクセスして、最新のVisual Studioを無料で手に入れましょう。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilcQmKbzHMKWDsT5Ai30tuWNnDcti4b3MSqyI104kwfwCs3XkOnxmU9xUyY2ZurvZMlkuK9LuGuGszEne_LoAecskOymPUytfaNxyKjOul3LRt_nNegHoP3deT1d2hdjXVyqdJtBJ8icI/s1600/bs00001.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilcQmKbzHMKWDsT5Ai30tuWNnDcti4b3MSqyI104kwfwCs3XkOnxmU9xUyY2ZurvZMlkuK9LuGuGszEne_LoAecskOymPUytfaNxyKjOul3LRt_nNegHoP3deT1d2hdjXVyqdJtBJ8icI/s400/bs00001.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">最新のVSを無料でGET!!</td></tr>
</tbody></table>
インストールの[exe]ファイルがダウンロードされるので、これを実行しVisual Studioをインストールします。インストーラが立ち上がったら、とにかく既定値のままでいいので、インストールしましょう。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWqCPtkvLKPRb6qvkXumDFMX8xTtl_puXs5sl63FIQ-B4DeMxaX9EKeLiWBMFa097FhmQbsnjIW2n7Msm8j0bzevQSBdz4ItSWaDDhuhkAwrT7iT3r-RCcTgfz84d_kefeAo3_njDHMnI/s1600/bs00002.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWqCPtkvLKPRb6qvkXumDFMX8xTtl_puXs5sl63FIQ-B4DeMxaX9EKeLiWBMFa097FhmQbsnjIW2n7Msm8j0bzevQSBdz4ItSWaDDhuhkAwrT7iT3r-RCcTgfz84d_kefeAo3_njDHMnI/s320/bs00002.png" width="229" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">既定値を受け入れてインストール</td></tr>
</tbody></table>
<br />
インストールにはしばらく時間がかかります。<br />
<h2>
DHCのインストール</h2>
まずは最新の<a href="https://www.google.co.jp/chrome/browser/desktop/index.html?brand=CHBD&gclid=Cj0KEQiAvNrBBRDe3IOwzLn6_O4BEiQAmbK-Ds-nR9PCJL_EHDFFKoPq1VxRUlKFgVRDwtgoMABisQgaAnj68P8HAQ" target="_blank">グーグルクローム</a>をダウンロードしてインストールしてください。その後、<a href="https://chrome.google.com/webstore/category/extensions" target="_blank">クロームウェブストア</a>に移動してDHCを検索してインストールします。<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLjxPNQt9_2LsHTsT0OBWw8CUpft7Y6ElFITCpd-tj7yXW21nFy-U4Q2aqKzRT5SodedCKihgRjSR4KOBjATmOH0x-n5wQxOQZfLVJvh_rsnJ2VZZ-BnvslmAU9WK0xXh2Uts5MgICfqc/s1600/bs00017.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLjxPNQt9_2LsHTsT0OBWw8CUpft7Y6ElFITCpd-tj7yXW21nFy-U4Q2aqKzRT5SodedCKihgRjSR4KOBjATmOH0x-n5wQxOQZfLVJvh_rsnJ2VZZ-BnvslmAU9WK0xXh2Uts5MgICfqc/s400/bs00017.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">DHCを追加</td></tr>
</tbody></table>
FORGEはWEB開発ですから、最終的にはVisual Studioでアプリを作るのですが、HTTPリクエストをテストするツールとしてDHCはとても便利な道具ですので、ぜひインストールしましょう。<br />
<br />
(REST Clientとなっていますが、<a href="http://e-words.jp/w/REST.html" target="_blank">RESTとはREpresentational State Transferの略</a>だそうですが、あんまり難しいことは私も今のところはよくわからないので気にしないことにします。)<br />
<h2>
FORGEで何ができるのか?</h2>
とっても簡単に言うと、FORGEでは<br />
<ul>
<li>いろいろなデータをアップロードしたり、BIM360のデータにアクセスしたり、</li>
<li>形状データと属性情報データを解析したり</li>
<li>データをいろいろ編集したり</li>
<li>ビューア(FORGE Viewer)で表示したり</li>
</ul>
する機能があります。以下のアドレスにアクセスしてみてください。<br />
<a href="https://www.blogger.com/goog_986747220"><br /></a>
<a href="http://lmv.rocks/">http://lmv.rocks/</a><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZkD-2q8QvQXX9BFiBtnpaVM19j5nz-5YwIIYUUuoDuECTS84_AyS1frF5Go36wASqkqXyXmU2favrsd7qbD1-1zGgZf6q74ukogyJv5TUBGvv_cL_cy-1ak-JXNTiiUgmej_p6DQSoM8/s1600/bs00004.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZkD-2q8QvQXX9BFiBtnpaVM19j5nz-5YwIIYUUuoDuECTS84_AyS1frF5Go36wASqkqXyXmU2favrsd7qbD1-1zGgZf6q74ukogyJv5TUBGvv_cL_cy-1ak-JXNTiiUgmej_p6DQSoM8/s400/bs00004.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Large Model Viewer</td></tr>
</tbody></table>
<br />
ここではForge Viewer が紹介されています。これもFORGEの機能の一つで、このビューアは様々なカスタマイズが可能です。<br />
<br />
そこで、次回からまず手始めに、<b><span style="color: blue;">Revitのデータをアップロードして、FORGE Viewerで表示する</span></b>ことに挑戦してみます。<br />
<br />髙取昭浩http://www.blogger.com/profile/01267178004684249576noreply@blogger.com0