相変わらず、GitHub Repoからこのチュートリアルで使用されているコードを見つけることができます。
キーテイクアウト
Google Console Project
APIが有効になったら、資格情報を作成するように依頼します。 [資格情報]をクリックして、セットアップを開始します。これには、次のことが表示されます
テキストフィールドに表示されている製品名の値を入力し、[保存]をクリックします。
それが構成されたら、クライアントIDを作成できるようになりました。アプリケーションタイプのWebアプリケーションを選択し、デフォルト名(必要な場合)を残し、http:// localhost:3000/login for autherized redirect urisを入力し、[作成]をクリックします。
twilio
次に、プログラム可能な音声ダッシュボードに移動します。これは、サンドボックス番号を見ることができる場所です。この番号を使用してTwilioをテストできます。ただし、後で電話番号を購入する必要があります。これにより、Twilioが送信したテキストメッセージに「Twilio Sandboxから送信された」
が追加されないようにする必要があります。 Twilioサンドボックス番号のもう1つの制限は、検証済みの数字でのみ使用できることです。つまり、メッセージを送信するには、Twilioに電話番号を登録する必要があります。これは、Caller IDSの管理ページから実行できます。アプリの構築 これで、アプリを構築する準備が整いました。先に進む前に、アプリの実装方法について簡単に説明したいと思います。 3つの主要なファイルがあります。1つはサーバー用、もう1つはGoogleカレンダーからのキャッシュイベント、もう1つはユーザーを思い出させるためです。サーバーは、ユーザーがログインしてアクセストークンを取得できるようにするために使用されます。イベントはMySQLデータベースに保存され、グローバルアプリの構成は.JSONファイルに追加されます。 NodeのCronの実装は、キャッシュイベントのタスクを実行し、ユーザーに思い出させるために使用されます。
ワーキングディレクトリで、package.jsonファイルを作成して、次を追加します。
このファイルでは、アプリが依存しているライブラリの名前とバージョンを指定しています。各ライブラリの使用法の分解:データベースには、ユーザーとアポイントメントの2つのテーブルがあります。ユーザーテーブルは、ユーザーのデータを保存するために使用されます。このアプリの場合、1人のユーザーのみを保存し、アクセストークンのみが保存されます。
予定テーブルは、Google Calendar APIから入手したイベントを保存するために使用されます。ユーザーが1人しかないため、user_idフィールドがないことに注意してください。そして、通知フィールドの値としてゼロのすべての行をフェッチします。ワーキングディレクトリで、構成フォルダーを作成してから内部でdefault.jsonファイルを作成します。これは、グローバルアプリの構成を配置する場所です。これには、TimeZone、リマインダー、データベース、Googleアプリ、Twilioの設定を送信する電話番号が含まれます。
こちらがテンプレートです。すべてのフィールドに記入してください。
データベース
共通ディレクトリ内にDB.JSファイルを作成してから、以下を追加します。
これにより、構成ライブラリを使用して、config/default.jsonファイルで以前に追加した構成値を取得します。具体的には、データベースに接続できるようにデータベース構成を取得しています。次に、このモジュールをエクスポートして、後で別のファイルから使用できるようにします。time.jsファイルは、モーメントタイムゾーンライブラリでデフォルトのタイムゾーンを設定するために使用されます。また、2つのCronタスク(キャッシュイベントとユーザーへの通知)を実行するときに後で使用するため、TimeZoneの値をエクスポートします。
{ "name": "google-calendar-twilio", "version": "0.0.1", "dependencies": { "config": "^1.17.1", "cron": "^1.1.0", "express": "^4.13.3", "googleapis": "^2.1.6", "moment": "^2.10.6", "moment-timezone": "^0.4.1", "mysql": "felixge/node-mysql", "twilio": "^2.6.0" } }
サーバーの作成
{ "app": { "timezone": "Asia/Manila" }, "me": { "phone_number": "" }, "db": { "host": "localhost", "user": "root", "password": "secret", "database": "calendar_notifier" }, "google":{ "client_id": "THE CLIENT ID OF YOUR GOOGLE APP", "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP", "redirect_uri": "http://localhost:3000/login", "access_type": "offline", "scopes": [ "https://www.googleapis.com/auth/plus.me", "https://www.googleapis.com/auth/calendar" ] }, "twilio": { "sid": "YOUR TWILIO SID", "secret": "YOUR TWILIO SECRET", "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER" } }
それを分解:
var config = require('config'); var db_config = config.get('db'); var mysql = require('mysql'); var connection = mysql.createConnection({ host: db_config.host, user: db_config.user, password: db_config.password, database: db_config.database }); exports.db = connection;
LocalHostのポート3000で実行されるExpressサーバーを作成します。これが、http:// localhost:3000/login fary app configurationで、GoogleのリダイレクトURIを追加した理由です。
updateaccesstoken関数を定義します。これは、トークンと応答という2つの引数を受け入れます。トークンは、ユーザーが必要なアクセス許可を与えた後にGoogleから得られるアクセストークンです。応答は、Expressから来る応答オブジェクトです。ユーザーに応答を送信できるように、この関数に渡しています。関数内で、最初の行のAccess_Tokenを更新します。前述のように、このアプリは単一のユーザーでのみ機能します。 Access_Tokenが更新されたら、応答を送信します
var config = require('config'); var app_timezone = config.get('app.timezone'); var moment = require('moment-timezone'); moment.tz.setDefault(app_timezone); exports.config = { timezone: app_timezone }; exports.moment = moment;
ホームページのルートを追加します。これは、http:// localhost:3000にアクセスすると実行されます。ここから認証URLを生成します。これは、OAuth2ClientのGenerateAuthurlメソッドを使用します。 Access_Typeとスコープを含むオブジェクトを受け入れます。以前に作成したアプリ構成ファイルからこれらの値を取得しています。最後に、ユーザーがクリックできる実際のリンクを送信します。常にビュー内でこれを行う必要がありますが、物事を単純化するためには、リンクを直接返すだけです。
var config = require('config'); var google_config = config.get('google'); var google = require('googleapis'); var OAuth2 = google.auth.OAuth2; var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri); var calendar = google.calendar('v3'); exports.oauth2Client = oauth2Client; exports.calendar = calendar; exports.config = google_config;
{ "name": "google-calendar-twilio", "version": "0.0.1", "dependencies": { "config": "^1.17.1", "cron": "^1.1.0", "express": "^4.13.3", "googleapis": "^2.1.6", "moment": "^2.10.6", "moment-timezone": "^0.4.1", "mysql": "felixge/node-mysql", "twilio": "^2.6.0" } }
Cacherは、ユーザーの予定をデータベースに保存する責任があります。これにより、リマインダーを送信するたびにGoogleカレンダーAPIディレクトリを照会することができなくなります。 cache.jsファイルを作成し、以下を追加します
{ "app": { "timezone": "Asia/Manila" }, "me": { "phone_number": "" }, "db": { "host": "localhost", "user": "root", "password": "secret", "database": "calendar_notifier" }, "google":{ "client_id": "THE CLIENT ID OF YOUR GOOGLE APP", "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP", "redirect_uri": "http://localhost:3000/login", "access_type": "offline", "scopes": [ "https://www.googleapis.com/auth/plus.me", "https://www.googleapis.com/auth/calendar" ] }, "twilio": { "sid": "YOUR TWILIO SID", "secret": "YOUR TWILIO SECRET", "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER" } }
最初に、必要なすべてのモジュールをインポートします。
var config = require('config'); var db_config = config.get('db'); var mysql = require('mysql'); var connection = mysql.createConnection({ host: db_config.host, user: db_config.user, password: db_config.password, database: db_config.database }); exports.db = connection;
var config = require('config'); var app_timezone = config.get('app.timezone'); var moment = require('moment-timezone'); moment.tz.setDefault(app_timezone); exports.config = { timezone: app_timezone }; exports.moment = moment;
キャッシュ法は、GoogleカレンダーAPIに実際の呼び出しを行う方法です。これは、Googleクライアントの使用によるものです。ここでは、Calendar.Eventsオブジェクトのリストメソッドを呼び出します。これは2つの引数を受け入れます。1つ目はクエリのオプションを含むオブジェクトであり、2つ目は結果が返されると実行される関数です。
var config = require('config'); var google_config = config.get('google'); var google = require('googleapis'); var OAuth2 = google.auth.OAuth2; var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri); var calendar = google.calendar('v3'); exports.oauth2Client = oauth2Client; exports.calendar = calendar; exports.config = google_config;
オプションを含むオブジェクトには、次のことがあります。
notifier
の作成最後になりましたが、通知者(notify.js)があります。これは、データベースから予約を取得し、通知の熟しているかどうかを判断する責任があります。もしそうなら、私たちはそれらを送ります
{ "name": "google-calendar-twilio", "version": "0.0.1", "dependencies": { "config": "^1.17.1", "cron": "^1.1.0", "express": "^4.13.3", "googleapis": "^2.1.6", "moment": "^2.10.6", "moment-timezone": "^0.4.1", "mysql": "felixge/node-mysql", "twilio": "^2.6.0" } }
{ "app": { "timezone": "Asia/Manila" }, "me": { "phone_number": "" }, "db": { "host": "localhost", "user": "root", "password": "secret", "database": "calendar_notifier" }, "google":{ "client_id": "THE CLIENT ID OF YOUR GOOGLE APP", "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP", "redirect_uri": "http://localhost:3000/login", "access_type": "offline", "scopes": [ "https://www.googleapis.com/auth/plus.me", "https://www.googleapis.com/auth/calendar" ] }, "twilio": { "sid": "YOUR TWILIO SID", "secret": "YOUR TWILIO SECRET", "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER" } }
次に、sendnotifications関数があります。これは、Twilioで実際にテキストリマインダーを送信する責任があります。この関数は、データベースから予定を取得した後に呼び出されます。そのため、エラー、結果、およびフィールドの議論が渡された理由です。エラーには、データベースからのエラーが含まれます。結果には、データベースから返される行が含まれています。フィールドには、返された結果フィールドに関する情報が含まれています。
関数の内部では、アプリの構成からユーザーの電話番号を取得します。
{ "name": "google-calendar-twilio", "version": "0.0.1", "dependencies": { "config": "^1.17.1", "cron": "^1.1.0", "express": "^4.13.3", "googleapis": "^2.1.6", "moment": "^2.10.6", "moment-timezone": "^0.4.1", "mysql": "felixge/node-mysql", "twilio": "^2.6.0" } }
エラーがあるかどうかを確認し、返されたすべての結果をループすることを続行しないかどうかを確認してください。
{ "app": { "timezone": "Asia/Manila" }, "me": { "phone_number": "" }, "db": { "host": "localhost", "user": "root", "password": "secret", "database": "calendar_notifier" }, "google":{ "client_id": "THE CLIENT ID OF YOUR GOOGLE APP", "client_secret": "THE CLIENT SECRET OF YOUR GOOGLE APP", "redirect_uri": "http://localhost:3000/login", "access_type": "offline", "scopes": [ "https://www.googleapis.com/auth/plus.me", "https://www.googleapis.com/auth/calendar" ] }, "twilio": { "sid": "YOUR TWILIO SID", "secret": "YOUR TWILIO SECRET", "phone_number": "+YOUR TWILIO PHONE NUMBER / SANDBOX NUMBER" } }
var config = require('config'); var db_config = config.get('db'); var mysql = require('mysql'); var connection = mysql.createConnection({ host: db_config.host, user: db_config.user, password: db_config.password, database: db_config.database }); exports.db = connection;
var config = require('config'); var app_timezone = config.get('app.timezone'); var moment = require('moment-timezone'); moment.tz.setDefault(app_timezone); exports.config = { timezone: app_timezone }; exports.moment = moment;
結論
var config = require('config'); var google_config = config.get('google'); var google = require('googleapis'); var OAuth2 = google.auth.OAuth2; var oauth2Client = new OAuth2(google_config.client_id, google_config.client_secret, google_config.redirect_uri); var calendar = google.calendar('v3'); exports.oauth2Client = oauth2Client; exports.calendar = calendar; exports.config = google_config;
以上がTwilioでSMS予定リマインダーアプリを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。