GoogleドライブとGoogleカレンダーで友達を作るにはどうすればよいですか? GASを試してみる

GASバイヤーカート Habrahabrの読者に、Google Apps Script(GAS)を使用して危機の時代に購買力をどのように高められたかについてのストーリーを提供します。 カットの下では、非標準的な使用例が見つかり、GoogleドライブとGoogleカレンダーを操作する可能性について学習します。



それはすべて、ロシアの輸入品の価格が着実に成長したという事実から始まりました。 大規模な小売ネットワークでITスペシャリストとして働いていたとき、会社の確立されたルール、さらには法律に違反することなく、商品ベースへのアクセスを活用する方法について考えました。 個人のお金を節約するという点で最も興味深いのは、いわゆる「プロモーション」(割引料金)です。 関心のある商品の「プロモーション」の毎日のアンロードを整理し、Androidスマートフォンで割引の通知をタイムリーに受信する可能性を実現する必要がありました。



明らかに、必要な機能を実装するための多くのオプションがあります。 データベースに接続し、既存の無料配信サービスのHTTP APIを介してSMSをさらに送信する任意の言語(Javaなど)でコンソールアプリケーションを作成するためのオプションを検討しました。 ただし、Googleの企業サービス(メール、ドライブ、カレンダーなど)を含む既存のツールを最大限に活用したかったのです。



目的の結果を達成するには、次のタスクを解決する必要がありました。



  1. プロモーションのデータをファイルにアップロードします。
  2. ファイルを処理し、イベントをGoogleカレンダーに追加し、SMSアラートを設定します。
  3. 毎日の自動実行のタスクをスケジュールします。


第1章SQLレス



目標があり、距離があります。 残りは詳細です。


最初の段落は、クエリに示されている製品のリストについて、実際のプロモーションをその日にアンロードする単純なSQLクエリを作成することです。 この段階をできるだけ単純化し、コードを1行も記述しないために、製造元のデータベースを操作するための「ネイティブ」ユーティリティを使用することが決定されました。 正しいSQLクエリを作成し、それに基づいてデータベースからアンロードするユーティリティの構成ファイルを作成するだけで十分でした。 その結果、構成ファイルがあり、起動すると、その日の実際のプロモーションが記載された既製のCSVファイルが取得されます。





第2章50種類のGAS



この段階での主なタスクは、CSVファイルからGoogleカレンダーに情報を追加することでした。 Google Apps Script(GAS)は、JavaScriptベースの言語を使用して、多くのGoogleサービス(ドライブ、メール、カレンダー、ドキュメントなど)のAPIへのアクセスを提供します。 したがって、たとえば、GoogleドライブからGoogle Mailへのログやその他のファイルの毎日の送信を自動化できます。 これは、考えられる多くのユースケースの1つにすぎません。



難しいパスを検索したくないので、アンロード中にCSVファイルをコンピューターで同期されたGoogleドライブフォルダーに保存します。 このエレガントなソリューションのおかげで、ファイルは保存後すぐにGASから利用できます。 ファイルを読み取り、イベントをGoogleカレンダーに追加し、SMS通知を有効にするために残ります。

正確に30行のコードを記述します。 読み上げ...




function addTarifsFromCSVtoCalendar() { var csvFiles = DriveApp.getFilesByName("TarifNotifier.csv"); if(csvFiles.hasNext()) { var csvFile = csvFiles.next(); var lastModDate = csvFile.getLastUpdated(); var currentDate = new Date(); lastModDate.setHours(0,0,0,0); currentDate.setHours(0,0,0,0); if (lastModDate.getTime() == currentDate.getTime()) { var csvData = csvFile.getBlob().getDataAsString("windows-1251"); var csv2DArray = Utilities.parseCsv(csvData, ','); var calendars = CalendarApp.getCalendarsByName(""); if(calendars.length == 0) { var calendar = CalendarApp.createCalendar(""); } else var calendar = calendars[0]; var events = calendar.getEventsForDay(currentDate); for (var i=0; i<events.length; i++) events[i].deleteEvent(); startTime = new Date(); endTime = new Date(); startTime.setHours(09,30,0,0); endTime.setHours(22,0,0,0); for (var i=0; i<csv2DArray.length; i++) { var event = calendar.createEvent(csv2DArray[i][0] + ' - ' + csv2DArray[i][1], startTime, endTime); event.setDescription(csv2DArray[i]); event.addSmsReminder(30); } } else Logger.log("No updated data!"); } }
      
      





それでは、これがどんな種類のコードで、どのように機能するかを見てみましょう。



 var csvFiles = DriveApp.getFilesByName("TarifNotifier.csv"); if(csvFiles.hasNext()) { var csvFile = csvFiles.next(); ... }
      
      





Google Drive APIを通じてTarifNotifier.csvというファイルに訴えます。 同じ名前のファイルは異なるディレクトリに保存できるため、 csvFiles変数にはTarifNotifier.csvという名前のすべてのファイルの配列へのリンクが渡されます 。 ただし、その名前のファイルは1つしかないため、配列の最初の要素(ある場合)にアクセスするだけです。



 var lastModDate = csvFile.getLastUpdated(); var currentDate = new Date(); lastModDate.setHours(0,0,0,0); currentDate.setHours(0,0,0,0); if (lastModDate.getTime() == currentDate.getTime()) { ... }
      
      





最終更新.csvファイルの日付を確認し、現在の日付と照合します。 setHours(0,0,0,0)メソッドは、変数の時間をゼロにするために使用されます。これにより、比較するときに日付のみを考慮することができます。 プロモーションは1日に1回しか変更されないため、CSVファイルが「今日」更新されなかった場合は、ストアに関心のある新しいプロモーションがないことを意味します。



 var csvData = csvFile.getBlob().getDataAsString("windows-1251"); var csv2DArray = Utilities.parseCsv(csvData, ',');
      
      





CSVファイルからデータを読み取り、それを2次元配列に解析します。 これは、各製品をカレンダーの個別のイベントとして表示するために必要です。



 var calendars = CalendarApp.getCalendarsByName(""); if(calendars.length == 0) { var calendar = CalendarApp.createCalendar(""); } else var calendar = calendars[0]; var events = calendar.getEventsForDay(currentDate); for (var i=0; i<events.length; i++) events[i].deleteEvent();
      
      





「割引」という名前のカレンダーの可用性を確認し、存在しない場合は新しいカレンダーを作成します。 繰り返しますが、同じ名前のカレンダーが複数存在する可能性があるため、配列参照がcalendars変数に渡されます。 「割引」という名前のカレンダーが1つあることにすでに同意しましたか? だから、彼は一人です。 スクリプトがその日以前にすでに起動されている場合、重複を避けるために、当日のすべてのイベントのカレンダーをクリアします。



 startTime = new Date(); startTime.setHours(09,30,0,0); endTime = new Date(); endTime.setHours(22,0,0,0); for (var i=0; i<csv2DArray.length; i++) { var event = calendar.createEvent(csv2DArray[i][0] + ' - ' + csv2DArray[i][1], startTime, endTime); event.setDescription(csv2DArray[i]); event.addSmsReminder(30); }
      
      





実際には、それがすべて始まったために。 CSVファイルの各行(各製品)で、カレンダーに09:30から22:00(営業時間)に新しいイベントを作成し、SMS通知を設定します。イベントのちょうど30分前にトリガーする必要があります。



第3章Scheduelerのリスト



このリストは良いです。 このリストは人生そのものです。 そして、それの端に-固体奈落の底。


目的の結果を得るために、最小の詳細が残りました-毎日実行するタスクをスケジュールするには:

  1. Windowsタスクスケジューラを使用して、毎日07:30にGoogleドライブにCSVファイルのアップロードを開始する予定です。
  2. Google Apps Scriptに組み込まれている「プロジェクトトリガー」スケジューラを使用して、 addTarifsFromCSVtoCalendar()関数を毎日午前 8 から午前9 まで実行するように設定します開始時刻を正確に指定することはできません)。






その結果、最新のプロモーション料金に関する情報は、午前9時までにAndroidスマートフォンのカレンダーで毎日更新されます。 同時に、Googleアカウントに関連付けられた電話にSMS通知が届きます。





危機と制裁は今ではそれほど悪くない!



このトピックに興味がある場合は、次の記事で、Google Apps Scriptの使用の他の例を共有できます。





参照資料






All Articles