1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【0からGASを学ぶ】GASでDrive APIを利用する場合は気をつけろ!Exif情報の取得は癖がある!

Posted at

はじめに

本シリーズでは、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	

と取得すればよいことがわかる。

プログラム

Qiita020
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を追加します。

手順 イメージ
1 GASエディタの左メニューより「サービス」横の「+」をクリックします。
2 表示されたダイアログ上でDrive APIを選択し、
  • バージョンはv2を選択(すでにv3は追加済みなのでv2のみの表示となるはず)
  • IDはDrive_v2と記載(Driveはすでにv3を利用するための名称として使用しているため)
としたのちに「追加」をクリックします。
3 エディタにサービス:Drive_v2が追加されれば完了です。

Drive API(v2)のリファレンスに従い、撮影日時を取得する

Fileインスタンス:Files.getによる取得結果に関するリファレンス

上記リファレンスの中段にimageMediaMetadataに関する記述があり、写真の撮影日時(EXIF 形式のタイムスタンプ)は

imageMediaMetadata.date	

と取得すればよいことがわかる。v3とv2ではtimedateと絶妙に異なるのが若干やきもきする。

プログラム

Qiita020
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を追加しており、ダウングレードしたくないといった事情もあるかと思います。そのため、上記のようにv2v3共存するやり方であれば、Exif情報を取得する場合にはv2、その他通常利用の場合はv3という運用が実現できます。

おわりに

お疲れ様でした。
第20回は少々緊急企画的に「GASでDrive APIを利用する場合は気をつけろ!Exif情報の取得は癖がある!」と題して、GASで画像のExif情報を扱う場合のTipsをお伝えしました。GASは非常に便利ですが、たまにこういうクセに出くわすこともあります。そんな時は、私のQiita記事やブログを見たり、時にはお問い合わせ等いただければ解決に向けて検証を進めてまいります。引き続き、GASを楽しんでいきましょう!!
記事を読んで、「良いな」や「今後に期待できる!」と感じて頂けたらいいねフォローコメントいただけると幸いです。それではまた次回をお楽しみに!

ブログではより細かく紹介していますので、ぜひこちらもアクセス!!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?