はじめに
本シリーズでは、GASの始め方や便利な使い方、ビジネス活用まで幅広く解説します。シリーズをひと通り読んでいただければ、あなたもきっとGASマスターになれるはずです。
シリーズの対象者
- そもそもGASってなんだかわからない方
- GASを学びたいけど何から始めればいいかわからない方
- GASはわかり始めたけど、もっと活用ができないかと模索している方
- とにかくGoogleが好き! という方
前回記事
GASでExif情報を取得する
では早速始めていきましょう。【0からGASを学ぶ】シリーズの第20回は「GASでDrive APIを利用する場合は気をつけろ!Exif情報の取得は癖がある!」です。今回は、GASで画像のExif情報を扱う場合のTipsです。実は、先日画像の撮影日時を取得できないかと相談を受け、Drive APIを使えばできるのは知っていたのでやってみたところ、ちょっと思わぬ挙動がありましたので、お伝えします。本回は短めなのでささっといきましょう。
事前準備
適当な撮影画像をGoogleドライブにアップロードする
今回はExif情報を取得する手順をお伝えしますので、Googleドライブ上にPCやスマホから適当な写真をアップロードしましょう。
アップロードした画像のファイルIDを取得する
アップロードした画像ファイルのIDをGUIで取得する際は、画像をダブルクリックして画面に表示してもファイルIDを確認することはできません。以下のように、ファイルの共有リンクをコピーしてください。
コピーした文字列を確認すると以下のようになっているかと思います。
https://drive.google.com/file/d/XXXXXXXXXXXXXXXXXXXXXXXXXXXX/view?usp=drive_link
このうち XXXXXXXXXXXXXXXXXXXXXXXXXXXX
となっている箇所がファイルIDとなります。
プログラム開始
GASエディタを開く
今回はスタンドアロン型でGASを記述していきます。こちらを参考にGASエディタを起動してください。では、どんどんいきますよ、ついてきてください。
Drive APIを追加する
これは当然のことながら、Drive APIを利用するためにはDrive APIを利用できるようにGASエディタ上でサービスの追加が必要となります。
№ | 手順 | イメージ |
---|---|---|
1 | GASエディタの左メニューより「サービス」横の「+」をクリックします。 | |
2 | 表示されたダイアログ上でDrive APIを選択し、バージョン(最新がv3)とIDはそのままで「追加」をクリックします。 | |
3 | エディタにサービス:Driveが追加されれば完了です。 |
Drive APIのリファレンスに従い、撮影日時を取得する
Fileインスタンス:Files.getによる取得結果に関するリファレンス
上記リファレンスの中段にimageMediaMetadata
に関する記述があり、写真の撮影日時(EXIF DateTime)は
imageMediaMetadata.time
と取得すればよいことがわかる。
プログラム
function Qiita020 () {
// 取得しておいた画像のファイルIDを引数とする
console.log (getShootingDate('XXXXXXXXXXXXXXXXXXXXXXXXXXXX'));
}
function getShootingDate(id) {
// Drive APIを用いて、Exifデータを取得する
let metaData = Drive.Files.get(id).imageMediaMetadata;
return metaData ? metaData.time : null;
}
実行結果
17:42:31 お知らせ 実行開始
17:42:31 情報 null
17:42:32 お知らせ 実行完了
ダメでした、なぜでしょう。実は、デバッグしてみるとわかりますが、Drive.Files.get(id)
の取得結果であるFileインスタンス自体にimageMediaMetadata
プロパティがありません。そのため、取得結果がnullになっています。
デバッグで確認するとFileインスタンスにgetImageMediaMetadata()
メソッドがあり、じゃあこれで取得できるのではと思っても、やはりうまく取得はできません。
Drive APIのV2を追加する
前段が長くなりましたが、ここからがTipsです。
先ほどと同様にDrive APIを追加します。ただし、最新のバージョンではなくv2を追加します。
Drive API(v2)のリファレンスに従い、撮影日時を取得する
Fileインスタンス:Files.getによる取得結果に関するリファレンス
上記リファレンスの中段にimageMediaMetadata
に関する記述があり、写真の撮影日時(EXIF 形式のタイムスタンプ)は
imageMediaMetadata.date
と取得すればよいことがわかる。v3とv2ではtime
とdate
と絶妙に異なるのが若干やきもきする。
プログラム
function Qiita020 () {
// 取得しておいた画像のファイルIDを引数とする
console.log (getShootingDate('XXXXXXXXXXXXXXXXXXXXXXXXXXXX'));
}
function getShootingDate(id) {
// Drive APIを用いて、Exifデータを取得する
let metaData = Drive_v2.Files.get(id).imageMediaMetadata;
return metaData ? metaData.date : null;
}
実行結果
17:50:53 お知らせ 実行開始
17:50:54 情報 2024:01:05 22:20:38
17:50:54 お知らせ 実行完了
ばっちりです!!!!
Tips
今回はそもそもv2のDrive API
を追加すれば解決ではありますが、すでにv3のDrive API
を追加しており、ダウングレードしたくないといった事情もあるかと思います。そのため、上記のようにv2
とv3
を共存するやり方であれば、Exif情報を取得する場合にはv2
、その他通常利用の場合はv3
という運用が実現できます。
おわりに
お疲れ様でした。
第20回は少々緊急企画的に「GASでDrive APIを利用する場合は気をつけろ!Exif情報の取得は癖がある!」と題して、GASで画像のExif情報を扱う場合のTipsをお伝えしました。GASは非常に便利ですが、たまにこういうクセに出くわすこともあります。そんな時は、私のQiita記事やブログを見たり、時にはお問い合わせ等いただければ解決に向けて検証を進めてまいります。引き続き、GASを楽しんでいきましょう!!
記事を読んで、「良いな」や「今後に期待できる!」と感じて頂けたらいいねやフォロー、コメントいただけると幸いです。それではまた次回をお楽しみに!
ブログではより細かく紹介していますので、ぜひこちらもアクセス!!