多数のGoogleスクリプト、Google Doc、Wolfram-Alpha、およびSms.ruのSMS温度計

みなさんこんにちは!

朝の簡単な電話で、現在の天気についてのアラートを(もちろん無料で)受け取ったことを確認したかったのです。 普通の体温計はないので、服を着るのにどれだけの熱が必要なのか、それは必ずしも明確ではありません。

誰が私がこれを実現したかを気にします-猫へようこそ。



ハブで似たようなものを検索したところ、sakas.ruサービス、Googleスクリプトなどについて知っていたbakatroubleの著者であるため、 こここの記事出会いました。

Wolfram-Alphaから天気情報を取得することにしました。 タングステンアルファはなぜですか? かつて、「ズラトウストの中心から119 kmの気象観測所Balandinoからのデータ」という行に魅了されました。 したがって、私はこのサイトから情報を取得したかった。



そのため、まず最初に、Googleでアカウントを作成する必要があります(そうでない場合)。また、Sms.ruサービスに登録する必要があります(もしそうでない場合)。 Sms.ruサービスは、あなたの電話番号に5つの無料メッセージを書き込んだ時点で提供します(Webサイトでは「プログラマー向け」と書かれています)。



登録に成功したら、Googleドライブ(drive.google.com)にアクセスして、新しい空のドキュメントを作成します。 彼に名前を付けて、ディスクに残るのを待ちます。

次に、script.google.comに移動し、[空のプロジェクト]を選択します。 将来のスクリプトに名前を付けます(スクリプトはGoogleディスクにも保存されます)。 そこにあるものはすべて削除します。

次のコードを挿入します。



スクリプトコード
function responseWeather() { // : ,     SMS,  ID  sms.ru,   Google var cityTown= "zlatoust"; var phoneNum="71111111111"; var apiID="111111111111111111111111111111111111"; var docID="11111111111111111111111111111111111111111111"; // ,        var serverAv = false; while (serverAv == false){ try { DocumentApp.openById(docID); serverAv=true; } catch (e) { Logger.log(' '); } } var docmain = DocumentApp.openById(docID); var bodydoc = docmain.getBody(); bodydoc.clear();//     var response = UrlFetchApp.fetch("http://www.wolframalpha.com/input/?i="+cityTown+"+weather"); bodydoc.setText(response); var textEdit = bodydoc.editAsText(); textEdit.deleteText(0, 37280); //  ,     /*      .      -  .     - m\s  mph . ,   . */ if (textEdit.findText('&deg;C')!=null){ var degree = '&deg;C'; var convert = false; } else { degree = '&deg;F'; convert = true; } //     textEdit.deleteText(0, textEdit.findText(degree).getStartOffset()-5); textEdit.replaceText('</span><span class="info"><dt></dt><dd class="conditions">', ', '); textEdit.replaceText('</dd><dt>', '; '); textEdit.replaceText('wind:</dt><dd>', 'wind: '); textEdit.replaceText('<span> at </span>', ' at '); textEdit.replaceText('humidity:</dt><dd>', 'hum.: '); textEdit.deleteText(textEdit.findText("%").getEndOffsetInclusive()+1, textEdit.findText('" />').getEndOffsetInclusive()); textEdit.replaceText('<span class="high">', ' (buf'); textEdit.replaceText('</span><span class="low">', '...fub'); textEdit.replaceText("</span>", ")</span>"); textEdit.deleteText(textEdit.findText("</span>").getStartOffset(), textEdit.getText().length-1); //       -     ,  if (textEdit.findText('>')!=null){ textEdit.deleteText(0, textEdit.findText('>').getEndOffsetInclusive()); } // if (convert==true){ //    var buffer1 = textEdit.getText(); textEdit.deleteText(textEdit.findText(degree).getStartOffset(), textEdit.getText().length-1); var len = textEdit.getText().length-1; var buffer2 = Number(textEdit.getText()); bodydoc.clear(); var result = Math.round((buffer2-32)/1.8); textEdit.setText(buffer1); textEdit.deleteText(0, len); textEdit.insertText(0, result); //    buffer1 = textEdit.getText(); textEdit.deleteText(0, textEdit.findText("buf").getEndOffsetInclusive()); textEdit.deleteText(textEdit.findText(degree).getStartOffset(), textEdit.getText().length-1); len = textEdit.getText().length-1; buffer2 = Number(textEdit.getText()); bodydoc.clear(); result = Math.round((buffer2-32)/1.8); textEdit.setText(buffer1); textEdit.deleteText(textEdit.findText("buf").getEndOffsetInclusive()+1, textEdit.findText("buf").getEndOffsetInclusive()+1+len); textEdit.insertText(textEdit.findText("buf").getEndOffsetInclusive()+1, result); //    buffer1 = textEdit.getText(); textEdit.deleteText(0, textEdit.findText('fub').getEndOffsetInclusive()); textEdit.deleteText(textEdit.findText(degree).getStartOffset(), textEdit.getText().length-1); len = textEdit.getText().length-1; buffer2 = Number(textEdit.getText()); bodydoc.clear(); result = Math.round((buffer2-32)/1.8); textEdit.setText(buffer1); textEdit.deleteText(textEdit.findText('fub').getEndOffsetInclusive()+1,textEdit.findText('fub').getEndOffsetInclusive()+1+len); textEdit.insertText(textEdit.findText('fub').getEndOffsetInclusive()+1, result); //   buffer1 = textEdit.getText(); textEdit.deleteText(0, textEdit.findText('at ').getEndOffsetInclusive()); textEdit.deleteText(textEdit.findText('mph').getStartOffset(), textEdit.getText().length-1); len = textEdit.getText().length-1; buffer2 = Number(textEdit.getText()); bodydoc.clear(); result = Math.round(buffer2*0.44704); textEdit.setText(buffer1); textEdit.deleteText(textEdit.findText('at ').getEndOffsetInclusive()+1,textEdit.findText('at ').getEndOffsetInclusive()+1+len); textEdit.insertText(textEdit.findText('at ').getEndOffsetInclusive()+1, result); textEdit.replaceText('mph', 'm/s'); }; //... textEdit.replaceText('buf', ''); textEdit.replaceText('fub', ''); textEdit.replaceText(degree, "*C"); //      textEdit.insertText(textEdit.getText().length, ' '+cityTown); //      ,    if (textEdit.getText().length>70){ textEdit.deleteText(69, textEdit.getText().length-1); } var textSMS = bodydoc.getText(); UrlFetchApp.fetch("http://sms.ru/sms/send?api_id="+apiID+"&to="+phoneNum+"&text="+encodeURI(textSMS)); bodydoc.clear(); }
      
      









適切な変数に必要なデータを挿入します。

cityTown変数は、天気を受け取りたい音訳都市です。 phoneNum-Sms.ruに登録した番号。それに応じて、無料のSMSの送信先(プラス記号とセパレータなし)。 apiID-Sms.ruサービスの一意の識別子。対応するWebサイトを参照してください。





docID -Googleディスク上のドキュメント(スクリプトではない!)の一意の識別子。 アドレスバーで見つけることができます:





必要な変数がすべて入力されたら、スクリプトを実行します。 最初の起動時に、スクリプトはGoogleディスク上のリンクとドキュメントを操作する許可を要求します。 すべて許可します。 スクリプトが機能し、電話にメッセージが届きます。

ここで、自動開始を設定する必要があります。 これを行うには、アイコン(1)をクリックし、必要な間隔(2)を選択します。







仕事に行く前に早朝の天気を知る必要があるため、タイマーを午前7時に設定しました。 私自身も、コードの実行中にエラーが発生した場合に、「即時」に間隔を置いてメールで通知を設定します。

トリガーを保存します。 これですべての準備が整いました。毎朝、現在の天気に関するメッセージが届きます。



コードに関するいくつかの注意。 私はJavaScriptを表面的に知っていますが、google-scriptはさらに少ないです。したがって、最適化に関するコメントがあれば、喜んでお知らせします。 華氏から摂氏への変換について。 どうやら、要求の場所に関するデータはタングステンに送信され、出力データを領域に調整します。 したがって、スクリプトがオンラインでデバッグされると(手動で起動されたとき)、Googleはロシア出身であると報告し、Wolframは摂氏とメートル/秒で応答します。 トリガーから起動されたとき、Googleは私がカリフォルニアにいると言います。それがWolframが華氏と時速マイルを与える理由です。



将来的には、テキスト「city weather」を含むメッセージをメールボックスに送信し、応答メッセージを受信することにより、MMS経由で天気予報をリクエストする予定です。 議論の余地がある決定かもしれませんが、長年のパッケージを持っているだけで、MMSはそれほど高価ではありません。



妻は 、受け取ったデータを確認する必要があると主張したので、私は通常の体温計を掛けました。



UPD 11/03/14:スクリプトを少し修正しました。GoogleDocの可用性チェックループが正しく機能しませんでした(ドキュメントを開くときにエラーが返される場合があります)。 これですべてがより安定して動作するはずです。



UPD 11/22/14:トリガー時間を設定するとき、Googleが使用するタイムゾーンを検討します。 たとえば、時計を転送する前に、Googleは私と一致するタイムゾーンを発行しました(+6)。 次に、楽しみのために、このトリガーを削除し、新しい方法で設定しました。 今回は異なるタイムゾーンが与えられたため、それに合わせて時間を設定する必要がありました。 私の場合、朝の6時から7時の打ち上げは、夕方の5時から6時に変わりました。





だから注意してください。



All Articles