LoginSignup
20
25

More than 5 years have passed since last update.

Googleドライブに置いた画像のURL取得方法 (オリジナルとサムネイル)

Last updated at Posted at 2018-08-15

内容

Google Apps Scriptを使って、Googleドライブに置いた画像ファイルの本体とサムネイルへのURLを取得します。

背景

LINE Messaging APIで画像を送る際には、画像本体とサムネイル(240x240以下)へのURLが必要です。「本体はともかくサムネイルが必須って…」と悩んで調べ始めました。
https://developers.line.me/ja/reference/messaging-api/#image-message

  • いまさらですが、リファレンスを見返すと、画像本体サイズも1024x1024以下となっていますね。
  • ここでは 見なかったこと にします。

必要なサービス

  • Google Apps Script
    • DriveAppを使うにあたって、なにか許可が必要だったような、違ったような…

スクリプトと解説

// Googleドライブ上で共有設定した画像ファイルへのダイレクトリンク (本体とサムネイル)
var originalBase = 'https://drive.google.com/uc?export=view&id=';
var previewBase  = 'https://drive.google.com/thumbnail?sz=w240-h240&id=';
  • 変数定義です。
  • 出オチでバレている気がしますが、上記のURLにGoogleドライブのファイルIDをくっつけると、目的のURLができあがります。
  • previewBase のURLで指定している sz=w240-h240 は、サムネイルサイズの上限(240x240)を示しています。画像のアスペクト比を保ったまま、指定の範囲に収まるように表示されます。
// 外部サーバにある画像のURL
var sourceUrl = 'http://xxxx/.../xx.jpg';
// Googleドライブに保存するファイル名
var fileName = 'hogehoge.jpg';

// 画像を取得してGoogleドライブに保存
var fileBlob = UrlFetchApp.fetch(sourceUrl).getBlob().setName(fileName);
var file = DriveApp.createFile(fileBlob);

// 保存した画像に共有権を設定する (リンクを知っている全員が閲覧可)
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);

// 画像のファイルIDを取得する
var fileId = file.getId();
  • 画像を取得・保存 → 共有権を設定 → ファイルIDを取得する部分です。
  • 外部サービス(LINE)から画像が参照できるように、共有権が必要です。
// for LINE Messaging API
var pushLINE  = 'https://api.line.me/v2/bot/message/push';
var CHANNEL_ACCESS_TOKEN = 'xxxxxxxxxxxxxxxx';
var userId = 'xxxxxxxx';

// Googleドライブ上の画像をLINEへプッシュ
UrlFetchApp.fetch(pushLINE, {
  'headers': {
    'Content-Type' : 'application/json',
    'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN
  },
  'method' : 'POST',
  'payload': JSON.stringify({
    'to'       : userId,
    'messages' : [{
      'type'              : 'image',
      'originalContentUrl': originalBase + fileId,
      'previewImageUrl'   : previewBase  + fileId
    }]
  })
});
  • LINEへの画像送信部分です。
  • 「originalContentUrl」と「previewImageUrl」に、件のURLとファイルIDを指定します。
// 画像ファイル削除
file.setTrashed(true);
  • 送信後は、すぐにファイルを削除しても構いません。(未読でも大丈夫)

最後に

悔しくて試していませんが、ここで苦労して指定したサムネイル項目、実はオリジナルの画像をそのまま渡しても問題ないらしいですね。悩んで損した気分ですが、勉強になったのでまぁヨシとします。

20
25
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
20
25