写真のダウンロード
SkyDriveから写真をダウンロードして,
Private Sub AddPicture(data As Tuple(Of PowerPoint.Slide, PowerPoint.Shape))
Dim previousMessageFilter As IMessageFilter = Nothing
CoRegisterMessageFilter(Me, previousMessageFilter)
Dim slide = data.Item1
Dim marker = data.Item2
Try
' (ここに写真のダウンロードとスライドに追加する処理を追記する)
Catch ex As Exception
' (例外は無視)
Finally
CoRegisterMessageFilter(Nothing, previousMessageFilter)
End Try
End Sub
さて,
- https://
apis. live. net/ v5. 0/ me/ skydrive/ files?access_ token=ACCESS_ TOKEN
また,
- https://
apis. live. net/ v5. 0/FOLDER_ ID/files?access_ token=ACCESS_ TOKEN
指定したフォルダーから写真を取得してもいいのですが,
- https://
apis. live. net/ v5. 0/ me/ skydrive/ camera_ roll/ files?access_ token=ACCESS_ TOKEN
さらに,
- https://
apis. live. net/ v5. 0/ me/ skydrive/ camera_ roll/photos?access_ token=ACCESS_ TOKEN&limit=1&sort_ by=updated&sort_ order=descending
アドインでは上記のURLにアクセスするようにします。サーバーから受け取るデータは次のようなJSON形式のデータになります。この中から写真のダウンロードのためにsourceと,
{
"data": [
{
"id": "file.xxxxx",
"from": {
"name": "梓 中野",
"id": "xxxxx"
},
"name": "WP_001111.jpg",
"description": null,
"parent_id": "folder.xxxxx",
"size": 181761,
"comments_count": 0,
"comments_enabled": false,
"tags_count": 0,
"tags_enabled": true,
"is_embeddable": true,
"picture": "http://storage.live.com/xxxxx/WP_001111.jpg:Thumbnail/WP_001111.jpg",
"source": "http://storage.live.com/xxxxx/WP_001111.jpg:Default,Largest/WP_001111.jpg",
"upload_location": "https://apis.live.net/v5.0/file.xxxxx/content/",
"images": [
... 省略 ...
],
"link": "https://skydrive.live.com/redir.aspx?cid\xxxxx",
"when_taken": "2012-05-24T12:00:00+0000",
"height": 538,
"width": 717,
"type": "photo",
"location": {
"latitude": 35.2034,
"longitude": 136.2326
},
"shared_with": {
"access": "Just me"
},
"created_time": "2012-05-23T13:00:00+0000",
"updated_time": "2012-05-23T13:00:00+0000"
}
],
"paging": {
"next": "/me/skydrive/camera_roll/files?xxxxx"
}
}
写真のダウンロードまでをコードにします。LiveサービスにアクセスするLiveConnectClientクラスを用意していたので,
' SkyDrive から最新の写真1枚の情報を取得
Dim result = Me.LiveConnectClient.Get(
"me/skydrive/camera_roll/files?limit=1&sort_by=updated&sort_order=descending")
Dim o = JObject.Parse(result)
Dim src = o("data")(0)("source").ToString
Dim w = o("data")(0)("width").Value(Of Integer)()
Dim h = o("data")(0)("height").Value(Of Integer)()
' 写真のダウンロード
Dim client = New Net.WebClient
Dim file = System.IO.Path.GetTempFileName ' 一時的なファイル名を生成
client.DownloadFile(src, file)
特別に難しいところはないと思います。続いてダウンロードした写真をスライドに追加します。
' マーカーの範囲内に収まるように大きさを調節
Dim left, top, width, height As Single
If h * (marker.Width / w) <= marker.Height Then
width = marker.Width
height = h * (marker.Width / w)
left = marker.Left
top = marker.Top + (marker.Height - height) / 2
Else
width = w * (marker.Height / h)
height = marker.Height
left = marker.Left + (marker.Width - width) / 2
top = marker.Top
End If
' 写真をスライドに追加
Dim pic = slide.Shapes.AddPicture(file, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, left, top, width, height)
pic.Tags.Add(TagName, "InsertedPicture")
pic.Left = left
pic.Top = top
pic.Width = width
pic.Height = height
pic.ZOrder(Microsoft.Office.Core.MsoZOrderCmd.msoBringForward) '最前面に表示
マーカーで示した範囲内に収まるように位置を計算し,
以上で,