Kotlinのスマホアプリ(クライアント)が、ほぼ完成したので、サーバ側で受信したデータを記録する為、データベースを作成していきます。
サーバは、契約済みのロリポップを使用。
#前回の記事
Kotlinで地図アプリ(ゴミ拾いアプリ)作成。(7日目)
##一週間でやった事
- GoogleMap APIを使い、地図+位置情報を表示
- 移動に合わせて、マップがスクロール
- ゴミの種類を「大・中・小」にわけ、ボタンアイコンを作成
- ボタンにイメージアイコンを作成
- ボタンタップ後、サーバー側へHTTPS(GET)でデータを送信(BASIC認証)
- 送信前に確認ダイアログを表示
- 送信後、地図上にアイコンを表示
- アイコンタップで、種別/時間を表示
- サーバー側でBASICに認証
- サーバー側でPHPを使いGETデータ記録テスト
#ロリポップサーバでデータベースを作成
#ロリポップサーバへSSHでログイン
既に作成済みなの省略。
詳細は公式サイトの情報は、ネットの情報を参照。
希望があれば、PuTTYを使った公開鍵方式でのログイン方法を紹介しますが、ネット情報を見た方が早いかもです…。
#自動ログイン設定
MySQLへのログイン時、毎回、コマンドを打つのが面倒なので、.my.cnfを作成。
##SSHで接続し、ホームディレクトリに「.my.cnf」を作成
$ touch $HOME/.my.cnf
$ chmod 600 $HOME/.my.cnf
$ vi $HOME/.my.cnf
##.my.cnfを編集
[client]
host=(ホスト)
database=(データベース名)
user=(ID)
password=(PASS)
mysql コマンドを叩いてログインテスト
$ mysql -u (ID)
上手くいけばmysqlへのログイン
テーブル作成
データベースの選択
$ mysql > use (データベース名);
テーブル作成(日時、ゴミの種類、緯度、経度)
$ mysql > CREATE TABLE GPS (
DATE DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
type int(1) DEFAULT 0,
latitude double DEFAULT 0,
longitude double DEFAULT 0
);
終了
$ mysql > quit;
#サーバ側で、HTTP GETで受信したデータをPHPでデータベースへ保存
<?php
define('HOSTNAME', '(ホスト)');
define('DATABASE', '(データベース名)');
define('USERNAME', '(ID)');
define('PASSWORD', '(PASS)');
if(isset($_GET['DATA']) && $_GET['DATA'] != ''){
try {
$db = new PDO('mysql:host=' . HOSTNAME . ';dbname=' . DATABASE, USERNAME, PASSWORD);
$db->query('use '.DATABASE);
$stmt = $db->query('INSERT INTO GPS VALUES ('.$_GET['DATA'].')');
$databases = $stmt->fetchAll(PDO::FETCH_COLUMN);
echo 'OK';
}
catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
else{
echo "NG";
}
?>
スマホアプリから位置情報を送信し、記録できるのを確認して終了。
※スマホ側では、送信したデータが正常に記録されたかどうかチェックコードも追加
※$_GET['DATA']は、スマホ側でMySQLのデータフォーマットに合わせた形式を作成
#今後の課題
- WEB上で、GoogleMapを表示(HTML,CSS,JavaScript)
- MySQLのデータを読み込み地図上にマーカー表示(JavaScript,php,Node.js)
- WEBフレームワークのBootstrap上で、GoogleMap表示