changeset 3491:1d96e03d02ed

add js and cgi
author mituyuki <c115107@g.koeki-u.ac.jp>
date Sat, 29 Jul 2017 15:48:05 +0900
parents 9011d7448c3d
children 9b558db64e6e
files event/oasis2017/idol/idol.cgi event/oasis2017/idol/idol.js
diffstat 2 files changed, 91 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/event/oasis2017/idol/idol.cgi	Sat Jul 29 15:48:05 2017 +0900
@@ -0,0 +1,29 @@
+#!/usr/bin/env ruby22
+# -*- coding: utf-8 -*-
+require 'cgi'
+require 'json'
+require 'sqlite3'
+dbfile = './db/data.sq3'
+
+c = CGI.new({'accept_charset' => 'utf-8'})
+#print "Content-type: application/json; charset=UTF-8\n\n"
+print "Content-type: text/plain; charset=UTF-8\n\n"
+
+value = c['value'].to_f
+#tag = c['tag']
+#now = Time.now.to_s
+db = SQLite3::Database.new(dbfile)
+db.busy_timeout = 1000
+#db.execute("CREATE TABLE IF NOT EXISTS foo(tag text, time text, val real);")
+db.execute("CREATE TABLE IF NOT EXISTS foo(time text, val real);")
+#db.execute("INSERT INTO foo VALUES(?, ?, ?);", tag, now, value)
+val = {}
+#val['合計'] =
+#  db.execute("SELECT sum(val) FROM foo WHERE tag=?", tag)[0][0].to_f
+#val['平均'] =
+#  db.execute("SELECT avg(val) FROM foo WHERE tag=?", tag)[0][0].to_f.round(2)
+#res = db.execute("SELECT val FROM foo WHERE tag=?", tag)
+#val['全件'] = res.collect{|row| row[0]}		# 先頭カラムを集める
+val['差'] = value
+
+puts JSON.pretty_generate(val)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/event/oasis2017/idol/idol.js	Sat Jul 29 15:48:05 2017 +0900
@@ -0,0 +1,62 @@
+function game(){
+    var gps = document.getElementById("get");
+    var txt = document.getElementById("txt");
+    var sa = document.getElementById("geosa");
+    var num = 0, latlng;
+    var dis;
+    function tryGetGPS() {
+	if (fail == -1) {fail = 3;}
+        navigator.geolocation.getCurrentPosition(
+            onSuccess, onError,{
+                maximumAge: 0, timeout: 3000, enableHighAccuracy: true
+            });
+    }
+    function onSuccess(pos){
+	if (num == 0){
+	    latlng =  L.latLng([pos.coords.latitude, pos.coords.longitude]);
+	    txt.textContent = "位置情報の取得に成功";
+	    num += 1; 
+	} else {
+	    var lat1 = L.latLng([pos.coords.latitude, pos.coords.longitude]);
+	    dis = latlng.distanceTo(lat1)
+	    dis = dis /= 5;
+	    alert(dis);
+	    sa.textContent = "移動によるボーナスポイント:"+dis;	    
+	    txt.textContent = "位置情報の取得に成功";
+	    latlng = lat1;
+	    document.getElementById('js-sub').addEventListener('click', submit);
+	} 
+    }
+    var fail = 3;	
+    function onError(err) {                     // 失敗時
+        txt.textContent = "現在位置の取得失敗.(あと"+(--fail)+"回実行します)";
+	if (fail > 0){
+     	    tryGetGPS();
+	}  
+	else {
+	    txt.textContent = "現在位置をよみとれません。QRコードからお楽しみ下さい"
+	    
+	}
+    }
+    function respond(str) {
+	if (this.readyState == 4) {
+	    var resp = JSON.parse(this.responseText);
+	    var str = resp['差'];
+	    document.getElementById('result').textContent = str;
+	}
+    }	    
+    function submit() {
+	if (dis != undefined) {
+	    var conn = new XMLHttpRequest();
+	    conn.open('POST', './idol.cgi');
+	    conn.setRequestHeader(
+		'Content-Type', 'application/x-www-form-urlencoded');
+            conn.send('value='+encodeURIComponent(dis))
+	    conn.onreadystatechange = respond;
+	}
+    }
+    gps.addEventListener("click", function() {tryGetGPS();}, false);
+    document.getElementById('js-sub').addEventListener('click', submit);   
+}
+document.addEventListener("DOMContentLoaded", function() {
+    game();}, false);

yatex.org