OneDriveAPIから画像ファイルのURLを取ってくる

 OneDriveにアップロードした画像で、APIを使ってその画像にいつでもアクセスできるURLを取ってきたい。そのあたりをゴリゴリやってみたのでまとめておく。

 まず、いろいろやってみた結果として取ってこれる画像のURLでは、アップロードしたsource画像にアクセスするのは無理そうである。長辺が800px以下になるようにリサイズされたものしかとってこれなかった。

 画像URLはthumbnailデータとして取ってくる。
httpClient.DefaultRequestHeaders.Add("Authorization", $"BEARER {oauthToken}");

var id = Request.Query["id"];
var uri = $"https://api.onedrive.com/v1.0/drive/items/{id}/?select=id,name&expand=thumbnails(select=large,source)";
var response = await httpClient.GetAsync(uri);

 デフォルトのデータセットの中にもダウンロードURLが入っているが、そのURLは非永続的なものなのでぼくのほしいものではなかった。同様にthumbnailのサイズをsourceで取ってきても非永続的なURLになっているのでダメ。
 結果、画像の永続的なURLを取ってこれるのは、先に書いたように最大で長辺800pxのlargeサイズ画像ということになった。

 createLinkというのがAPIの中にあり、これ使えば共有リンク作れるでとあったので試してみたが、こっちも目的のものではなかった。
https://dev.onedrive.com/items/sharing_createlink.htm
それで返ってくるのはiframeに入ったファイルで、ワードとかエクセルのファイルで使うと便利なものだろう。今回はいらん。

 というわけで今回OneDriveから取ってこれた画像のURLは、サムネイルのものだった。欲しかったsourceの永続的なURLは取ってこれなかった。
…なんか不満だからAzureBlobを使うことを考えてみるか。
comment: 0