LoginSignup
8
12

More than 3 years have passed since last update.

【GAS】本の表紙を撮影するだけのお手軽読書ログ

Last updated at Posted at 2019-07-27

はじめに

本の表紙を撮影して、表紙の文字を読書ログとしてスプレッドシートに書き出すというものをつくっていきます。

つかうものはGASとIFTTTのみ。こちらの面でもお手軽。GASの追加とIFTTTの会員登録が済んでいれば30分程度でつくれます。

完成イメージ

1.事前準備

スプレッドシートの作成

IFTTT(Googleドライブの更新時)用と、読書ログ用の計二つ作成します。

IFTTT用は、マイドライブ > IFTTT > Google Drive に、『imgLog』スプレッドシートを作成します。

1.png

読書ログ用は、マイドライブ直下に『読書ログ』スプレッドシートを作成します。

2.png

表紙写真アップロード用のフォルダ作成

今回はマイドライブの下に『img』フォルダを作成し、こちらに表紙の写真をアップロードしていくことにします。

3.png

以上で事前準備が完了です。

2.IFTTTの設定

IFTTTにアクセスし、ログインを(まだの場合は会員登録も)します。

できたら、『もしGoogleドライブが更新されたら、Googleスプレッドシートに情報を書き出す』というアプレットを作成していきます。

アカウントアイコンをクリック > ①Create

4.png

②This

5 .png

③Google Drive

6.png

④New file in your folder

7.png

⑤Drive folder path:img(写真アップロードフォルダ名)
入力後、⑥Create trigger

8.png

⑦That

9.png

⑧Google Sheets

10.png

⑨Add row to spreadsheet

11.png

⑩Spreadsheet name:imgLog
⑪Formatted row:初期値
⑫Drive folder path:IFTTT/Google Drive
入力後、⑬Create action

12.png

⑭必要に応じて分かりやすい名前に変更
⑮Finish

13.png

以上でIFTTTの設定が完了です。

3.GASの設定

IFTTT更新用の『imgLog』スプレッドシートに設定していきます。

APIの追加

Googleドライブの操作にはAPIの追加が必要になるので、設定しましょう。

①リソース > ②Googleの拡張サービス

17.png

Drive API ③ON > ④OK > リソース > Googleの拡張サービス > ⑤適用されるあらゆるサービスとAPI

18.png

⑥メニューアイコン > ⑦APIとサービス > ⑧ライブラリ

19.png

⑨Google Drive API

20.png

⑩有効にする

21.png

以上でAPIの追加は完了です。

コードの記述

1)IFTTTで更新したスプレッドシートを読み込んで ⇒ 2)該当写真を元にGoogleドキュメントを作成して ⇒ 3)Googleドキュメントのテキストを取得して ⇒ 4)読書ログ用スプレッドシートに書き込む
という流れになります。

コード.gs
function myFunction() {
  // 1)IFTTTで更新したスプレッドシートの読み込み
  var data = getLatestData();
  // 2)写真を元にGoogleドキュメントを作成
  var imageBlob = UrlFetchApp.fetch(data[2]).getBlob();
  var resource = {
     title: data[1]
    ,mimeType: imageBlob.getContentType()
    ,parents: [{'id': '***************'}] // 画像が格納されているフォルダのフォルダID
  };
  var options = {
    ocr: true
  };
  var docs = Drive.Files.insert(resource, imageBlob, options);
  // 3)Googleドキュメントのテキストを取得
  var docId = docs.getId();
  var doc = DocumentApp.openById(docId);
  var coverText = doc.getBody().getText().replace(/\r?\n/g," ");
  // 4)読書ログ用スプレッドシートに書き込み
  var ssId = '***************'; // 読書ログスプレッドシートID
  var ss = SpreadsheetApp.openById(ssId).getSheetByName('シート1');
  var LastRow = ss.getDataRange().getLastRow();
  arrData = [[data[0] ,coverText ,data[2]]]; // 日付 ,タイトル ,URL
  ss.getRange(LastRow+1,1,1,arrData[0].length).setValues(arrData);
}

/**
* 最新アップロード情報取得
* @param none
* @return {object[]} [日付,タイトル,URL,ディレクトリ]
*/
function getLatestData() {
  var ssId = '*****************'; // IFTTT更新スプレッドシートID
  var ss = SpreadsheetApp.openById(ssId);
  var rng = ss.getSheetByName('シート1').getDataRange();
  rng.sort([{column:1,ascending:false}]); // 日付降順
  var values = ss.getRange('A1:D1').getValues();
  return values[0];
}

以上でコーディングが完了です。

トリガーの設定

IFTTT用スプレッドシート(『imgLog』)が更新されたら先ほどの処理を流したいので、このままトリガーの設定を行っていきます。

①編集 > ②現在のプロジェクトのトリガー

14.png

③トリガーを追加

15.png

④実行する関数:myFunction
⑤イベントのソースを選択:スプレッドシート
⑤イベントの種類を選択:変更時
設定後、⑦保存

16.png

以上でトリガーの設定が完了です。

4.動作確認

17.png

今更読んでいるのですが超面白いですね

▼▼▼

18.png
19.png
20.png

所感

スプレッドシートに出力できれば、あとは煮るなり焼くなりこっちのものです。

画像をGoogleドキュメントで開くだけでOCRができると知り、つくってみました。本当にお手軽。Keepでもできるらしいので普通に使いたい。ぱっと思いついたのが読書ログだったのですが、名刺管理など他にも使い道はありそうですね。

ちなみに手書きと表はまだ難しいらしいです。(参考:意外と知られていない「Googleドライブ」OCR機能で文字起こし検証→かなり使えそうでしたのでご紹介 - ウェブ企画ラボ

参考サイト

GASでdriveの特定ディレクトリにファイルを吐き出す方法 - Qiita

GAS|指定したフォルダ内に新しいスプレッドシートを作成する|insert|Files|Drive|Google Apps Script|開発裏話|マンガポスト日本版|note

ありがとうございました。

8
12
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
8
12