朝の簡単な電話で、現在の天気についてのアラートを(もちろん無料で)受け取ったことを確認したかったのです。 普通の体温計はないので、服を着るのにどれだけの熱が必要なのか、それは必ずしも明確ではありません。
誰が私がこれを実現したかを気にします-猫へようこそ。
ハブで似たようなものを検索したところ、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('°C')!=null){ var degree = '°C'; var convert = false; } else { degree = '°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時に変わりました。
だから注意してください。