이유제

Merge branch 'maptest' into 'master'

Maptest

map 기능 개선 merge 요청드립니다.

See merge request !2
...@@ -13,10 +13,8 @@ app.set('views', path.join(__dirname, 'views')); ...@@ -13,10 +13,8 @@ app.set('views', path.join(__dirname, 'views'));
13 app.set('view engine', 'ejs'); 13 app.set('view engine', 'ejs');
14 app.engine('html', require('ejs').renderFile); 14 app.engine('html', require('ejs').renderFile);
15 15
16 -//각각의 요청에서 router 호출해서 page를 전환함. 16 +//각각의 요청에서 index.js에 등록된 router 호출해서 page를 전환함.
17 app.use('/', mainRouter); 17 app.use('/', mainRouter);
18 -app.use('/login', mainRouter);
19 -
20 18
21 //css, image 등 정적 파일을 public에서 불러옴 -> html과 연결함 19 //css, image 등 정적 파일을 public에서 불러옴 -> html과 연결함
22 app.use(express.static(path.join(__dirname, 'public'))); 20 app.use(express.static(path.join(__dirname, 'public')));
...@@ -26,7 +24,6 @@ app.get('/logout', function (req, res) { ...@@ -26,7 +24,6 @@ app.get('/logout', function (req, res) {
26 res.send("Logout success"); 24 res.send("Logout success");
27 }); 25 });
28 26
29 -
30 app.listen(app.get('port'), () => { 27 app.listen(app.get('port'), () => {
31 console.log(`Server is running at ${app.get('port')}`); 28 console.log(`Server is running at ${app.get('port')}`);
32 }); 29 });
......
1 +const searchBox = document.querySelector(".search-box");
2 +const searchBtn = document.querySelector(".search-icon");
3 +const cancelBtn = document.querySelector(".cancel-icon");
4 +const searchInput = document.querySelector("input");
5 +const searchData = document.querySelector(".search-data");
6 +searchBtn.onclick = () => {
7 + searchBox.classList.add("active");
8 + searchBtn.classList.add("active");
9 + searchInput.classList.add("active");
10 + cancelBtn.classList.add("active");
11 + searchInput.focus();
12 + if (searchInput.value != "") {
13 + var values = searchInput.value;
14 + searchData.classList.remove("active");
15 + searchData.innerHTML = "You just typed " + "<span style='font-weight: 500;'>" + values + "</span>";
16 + } else {
17 + searchData.textContent = "";
18 + }
19 +}
20 +cancelBtn.onclick = () => {
21 + searchBox.classList.remove("active");
22 + searchBtn.classList.remove("active");
23 + searchInput.classList.remove("active");
24 + cancelBtn.classList.remove("active");
25 + searchData.classList.toggle("active");
26 + searchInput.value = "";
27 +}
...\ No newline at end of file ...\ No newline at end of file
1 +window.FontAwesomeKitConfig = {
2 + "asyncLoading": {
3 + "enabled": true
4 + },
5 + "autoA11y": {
6 + "enabled": true
7 + },
8 + "baseUrl": "https://ka-f.fontawesome.com",
9 + "detectConflictsUntil": null,
10 + "iconUploads": {},
11 + "license": "free",
12 + "method": "css",
13 + "minify": {
14 + "enabled": true
15 + },
16 + "token": "a076d05399",
17 + "v4FontFaceShim": {
18 + "enabled": false
19 + },
20 + "v4shim": {
21 + "enabled": false
22 + },
23 + "version": "5.15.1"
24 +};
25 +! function (t) {
26 + "function" == typeof define && define.amd ? define(t) : t()
27 +}((function () {
28 + "use strict";
29 +
30 + function t(e) {
31 + return (t = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) {
32 + return typeof t
33 + } : function (t) {
34 + return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
35 + })(e)
36 + }
37 +
38 + function e(t, e, n) {
39 + return e in t ? Object.defineProperty(t, e, {
40 + value: n,
41 + enumerable: !0,
42 + configurable: !0,
43 + writable: !0
44 + }) : t[e] = n, t
45 + }
46 +
47 + function n(t, e) {
48 + var n = Object.keys(t);
49 + if (Object.getOwnPropertySymbols) {
50 + var o = Object.getOwnPropertySymbols(t);
51 + e && (o = o.filter((function (e) {
52 + return Object.getOwnPropertyDescriptor(t, e).enumerable
53 + }))), n.push.apply(n, o)
54 + }
55 + return n
56 + }
57 +
58 + function o(t) {
59 + for (var o = 1; o < arguments.length; o++) {
60 + var r = null != arguments[o] ? arguments[o] : {};
61 + o % 2 ? n(Object(r), !0).forEach((function (n) {
62 + e(t, n, r[n])
63 + })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(r)) : n(Object(r)).forEach((function (e) {
64 + Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(r, e))
65 + }))
66 + }
67 + return t
68 + }
69 +
70 + function r(t, e) {
71 + return function (t) {
72 + if (Array.isArray(t)) return t
73 + }(t) || function (t, e) {
74 + if (!(Symbol.iterator in Object(t) || "[object Arguments]" === Object.prototype.toString.call(t))) return;
75 + var n = [],
76 + o = !0,
77 + r = !1,
78 + i = void 0;
79 + try {
80 + for (var c, a = t[Symbol.iterator](); !(o = (c = a.next()).done) && (n.push(c.value), !e || n.length !== e); o = !0);
81 + } catch (t) {
82 + r = !0, i = t
83 + } finally {
84 + try {
85 + o || null == a.return || a.return()
86 + } finally {
87 + if (r) throw i
88 + }
89 + }
90 + return n
91 + }(t, e) || function () {
92 + throw new TypeError("Invalid attempt to destructure non-iterable instance")
93 + }()
94 + }
95 +
96 + function i(t, e) {
97 + var n = e && e.addOn || "",
98 + o = e && e.baseFilename || t.license + n,
99 + r = e && e.minify ? ".min" : "",
100 + i = e && e.fileSuffix || t.method,
101 + c = e && e.subdir || t.method;
102 + return t.baseUrl + "/releases/" + ("latest" === t.version ? "latest" : "v".concat(t.version)) + "/" + c + "/" + o + r + "." + i
103 + }
104 +
105 + function c(t, e) {
106 + var n = e || ["fa"],
107 + o = "." + Array.prototype.join.call(n, ",."),
108 + r = t.querySelectorAll(o);
109 + Array.prototype.forEach.call(r, (function (e) {
110 + var n = e.getAttribute("title");
111 + e.setAttribute("aria-hidden", "true");
112 + var o = !e.nextElementSibling || !e.nextElementSibling.classList.contains("sr-only");
113 + if (n && o) {
114 + var r = t.createElement("span");
115 + r.innerHTML = n, r.classList.add("sr-only"), e.parentNode.insertBefore(r, e.nextSibling)
116 + }
117 + }))
118 + }
119 + var a, u = function () { },
120 + f = "undefined" != typeof global && void 0 !== global.process && "function" == typeof global.process.emit,
121 + s = "undefined" == typeof setImmediate ? setTimeout : setImmediate,
122 + d = [];
123 +
124 + function l() {
125 + for (var t = 0; t < d.length; t++) d[t][0](d[t][1]);
126 + d = [], a = !1
127 + }
128 +
129 + function h(t, e) {
130 + d.push([t, e]), a || (a = !0, s(l, 0))
131 + }
132 +
133 + function m(t) {
134 + var e = t.owner,
135 + n = e._state,
136 + o = e._data,
137 + r = t[n],
138 + i = t.then;
139 + if ("function" == typeof r) {
140 + n = "fulfilled";
141 + try {
142 + o = r(o)
143 + } catch (t) {
144 + b(i, t)
145 + }
146 + }
147 + p(i, o) || ("fulfilled" === n && v(i, o), "rejected" === n && b(i, o))
148 + }
149 +
150 + function p(e, n) {
151 + var o;
152 + try {
153 + if (e === n) throw new TypeError("A promises callback cannot return that same promise.");
154 + if (n && ("function" == typeof n || "object" === t(n))) {
155 + var r = n.then;
156 + if ("function" == typeof r) return r.call(n, (function (t) {
157 + o || (o = !0, n === t ? y(e, t) : v(e, t))
158 + }), (function (t) {
159 + o || (o = !0, b(e, t))
160 + })), !0
161 + }
162 + } catch (t) {
163 + return o || b(e, t), !0
164 + }
165 + return !1
166 + }
167 +
168 + function v(t, e) {
169 + t !== e && p(t, e) || y(t, e)
170 + }
171 +
172 + function y(t, e) {
173 + "pending" === t._state && (t._state = "settled", t._data = e, h(w, t))
174 + }
175 +
176 + function b(t, e) {
177 + "pending" === t._state && (t._state = "settled", t._data = e, h(A, t))
178 + }
179 +
180 + function g(t) {
181 + t._then = t._then.forEach(m)
182 + }
183 +
184 + function w(t) {
185 + t._state = "fulfilled", g(t)
186 + }
187 +
188 + function A(t) {
189 + t._state = "rejected", g(t), !t._handled && f && global.process.emit("unhandledRejection", t._data, t)
190 + }
191 +
192 + function O(t) {
193 + global.process.emit("rejectionHandled", t)
194 + }
195 +
196 + function j(t) {
197 + if ("function" != typeof t) throw new TypeError("Promise resolver " + t + " is not a function");
198 + if (this instanceof j == !1) throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
199 + this._then = [],
200 + function (t, e) {
201 + function n(t) {
202 + b(e, t)
203 + }
204 + try {
205 + t((function (t) {
206 + v(e, t)
207 + }), n)
208 + } catch (t) {
209 + n(t)
210 + }
211 + }(t, this)
212 + }
213 + j.prototype = {
214 + constructor: j,
215 + _state: "pending",
216 + _then: null,
217 + _data: void 0,
218 + _handled: !1,
219 + then: function (t, e) {
220 + var n = {
221 + owner: this,
222 + then: new this.constructor(u),
223 + fulfilled: t,
224 + rejected: e
225 + };
226 + return !e && !t || this._handled || (this._handled = !0, "rejected" === this._state && f && h(O, this)), "fulfilled" === this._state || "rejected" === this._state ? h(m, n) : this._then.push(n), n.then
227 + },
228 + catch: function (t) {
229 + return this.then(null, t)
230 + }
231 + }, j.all = function (t) {
232 + if (!Array.isArray(t)) throw new TypeError("You must pass an array to Promise.all().");
233 + return new j((function (e, n) {
234 + var o = [],
235 + r = 0;
236 +
237 + function i(t) {
238 + return r++,
239 + function (n) {
240 + o[t] = n, --r || e(o)
241 + }
242 + }
243 + for (var c, a = 0; a < t.length; a++)(c = t[a]) && "function" == typeof c.then ? c.then(i(a), n) : o[a] = c;
244 + r || e(o)
245 + }))
246 + }, j.race = function (t) {
247 + if (!Array.isArray(t)) throw new TypeError("You must pass an array to Promise.race().");
248 + return new j((function (e, n) {
249 + for (var o, r = 0; r < t.length; r++)(o = t[r]) && "function" == typeof o.then ? o.then(e, n) : e(o)
250 + }))
251 + }, j.resolve = function (e) {
252 + return e && "object" === t(e) && e.constructor === j ? e : new j((function (t) {
253 + t(e)
254 + }))
255 + }, j.reject = function (t) {
256 + return new j((function (e, n) {
257 + n(t)
258 + }))
259 + };
260 + var S = "function" == typeof Promise ? Promise : j;
261 +
262 + function E(t, n) {
263 + var o = n.fetch,
264 + r = n.XMLHttpRequest,
265 + i = n.token;
266 + return new S((function (n, c) {
267 + if ("function" == typeof o) o(t, {
268 + mode: "cors",
269 + cache: "default",
270 + headers: new Headers(e({}, "fa-kit-token", i))
271 + }).then((function (t) {
272 + if (t.ok) return t.text();
273 + throw new Error("")
274 + })).then((function (t) {
275 + n(t)
276 + })).catch(c);
277 + else if ("function" == typeof r) {
278 + var a = new r;
279 + a.addEventListener("loadend", (function () {
280 + this.responseText ? n(this.responseText) : c(new Error(""))
281 + }));
282 + ["abort", "error", "timeout"].map((function (t) {
283 + a.addEventListener(t, (function () {
284 + c(new Error(""))
285 + }))
286 + })), a.open("GET", t), a.setRequestHeader("fa-kit-token", i), a.send()
287 + } else {
288 + c(new Error(""))
289 + }
290 + }))
291 + }
292 +
293 + function _(t, e) {
294 + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : function () { },
295 + r = e.document || r,
296 + a = c.bind(c, r, ["fa", "fab", "fas", "far", "fal", "fad", "fak"]);
297 + t.autoA11y.enabled && n(a);
298 + var u = [{
299 + id: "fa-main",
300 + addOn: void 0
301 + }];
302 + t.v4shim.enabled && u.push({
303 + id: "fa-v4-shims",
304 + addOn: "-v4-shims"
305 + }), t.v4FontFaceShim.enabled && u.push({
306 + id: "fa-v4-font-face",
307 + addOn: "-v4-font-face"
308 + });
309 + var f = u.map((function (n) {
310 + return new S((function (r, c) {
311 + E(i(t, {
312 + addOn: n.addOn,
313 + minify: t.minify.enabled
314 + }), e).then((function (i) {
315 + r(P(i, o({}, e, {
316 + baseUrl: t.baseUrl,
317 + version: t.version,
318 + id: n.id
319 + })))
320 + })).catch(c)
321 + }))
322 + }));
323 + return S.all(f)
324 + }
325 +
326 + function P(t, e) {
327 + var n = document.createElement("style"),
328 + o = document.createTextNode(function (t, e, n) {
329 + var o = t;
330 + return [
331 + [/(url\("?)\.\.\/\.\.\/\.\./g, function (t, n) {
332 + return "".concat(n).concat(e)
333 + }],
334 + [/(url\("?)\.\.\/webfonts/g, function (t, o) {
335 + return "".concat(o).concat(e, "/releases/v").concat(n, "/webfonts")
336 + }],
337 + [/(url\("?)https:\/\/kit-free([^.])*\.fontawesome\.com/g, function (t, n) {
338 + return "".concat(n).concat(e)
339 + }]
340 + ].forEach((function (t) {
341 + var e = r(t, 2),
342 + n = e[0],
343 + i = e[1];
344 + o = o.replace(n, i)
345 + })), o
346 + }(t, e.baseUrl, e.version));
347 + return n.appendChild(o), n.media = "all", e.id && n.setAttribute("id", e.id), e && e.detectingConflicts && e.detectionIgnoreAttr && n.setAttributeNode(document.createAttribute(e.detectionIgnoreAttr)), n
348 + }
349 +
350 + function F(t, e) {
351 + e.autoA11y = t.autoA11y.enabled, "pro" === t.license && (e.autoFetchSvg = !0, e.fetchSvgFrom = t.baseUrl + "/releases/" + ("latest" === t.version ? "latest" : "v".concat(t.version)) + "/svgs", e.fetchUploadedSvgFrom = t.uploadsUrl);
352 + var n = [];
353 + return t.v4shim.enabled && n.push(new S((function (n, r) {
354 + E(i(t, {
355 + addOn: "-v4-shims",
356 + minify: t.minify.enabled
357 + }), e).then((function (t) {
358 + n(T(t, o({}, e, {
359 + id: "fa-v4-shims"
360 + })))
361 + })).catch(r)
362 + }))), n.push(new S((function (n, r) {
363 + E(i(t, {
364 + minify: t.minify.enabled
365 + }), e).then((function (t) {
366 + var r = T(t, o({}, e, {
367 + id: "fa-main"
368 + }));
369 + n(function (t, e) {
370 + var n = e && void 0 !== e.autoFetchSvg ? e.autoFetchSvg : void 0,
371 + o = e && void 0 !== e.autoA11y ? e.autoA11y : void 0;
372 + void 0 !== o && t.setAttribute("data-auto-a11y", o ? "true" : "false");
373 + n && (t.setAttributeNode(document.createAttribute("data-auto-fetch-svg")), t.setAttribute("data-fetch-svg-from", e.fetchSvgFrom), t.setAttribute("data-fetch-uploaded-svg-from", e.fetchUploadedSvgFrom));
374 + return t
375 + }(r, e))
376 + })).catch(r)
377 + }))), S.all(n)
378 + }
379 +
380 + function T(t, e) {
381 + var n = document.createElement("SCRIPT"),
382 + o = document.createTextNode(t);
383 + return n.appendChild(o), n.referrerPolicy = "strict-origin", e.id && n.setAttribute("id", e.id), e && e.detectingConflicts && e.detectionIgnoreAttr && n.setAttributeNode(document.createAttribute(e.detectionIgnoreAttr)), n
384 + }
385 +
386 + function C(t) {
387 + var e, n = [],
388 + o = document,
389 + r = o.documentElement.doScroll,
390 + i = (r ? /^loaded|^c/ : /^loaded|^i|^c/).test(o.readyState);
391 + i || o.addEventListener("DOMContentLoaded", e = function () {
392 + for (o.removeEventListener("DOMContentLoaded", e), i = 1; e = n.shift();) e()
393 + }), i ? setTimeout(t, 0) : n.push(t)
394 + }
395 +
396 + function L(t) {
397 + "undefined" != typeof MutationObserver && new MutationObserver(t).observe(document, {
398 + childList: !0,
399 + subtree: !0
400 + })
401 + }
402 + try {
403 + if (window.FontAwesomeKitConfig) {
404 + var k = window.FontAwesomeKitConfig,
405 + x = {
406 + detectingConflicts: k.detectConflictsUntil && new Date <= new Date(k.detectConflictsUntil),
407 + detectionIgnoreAttr: "data-fa-detection-ignore",
408 + fetch: window.fetch,
409 + token: k.token,
410 + XMLHttpRequest: window.XMLHttpRequest,
411 + document: document
412 + },
413 + I = document.currentScript,
414 + U = I ? I.parentElement : document.head;
415 + (function () {
416 + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
417 + e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
418 + return "js" === t.method ? F(t, e) : "css" === t.method ? _(t, e, (function (t) {
419 + C(t), L(t)
420 + })) : void 0
421 + })(k, x).then((function (t) {
422 + t.map((function (t) {
423 + U.insertBefore(t, I ? I.nextSibling : null)
424 + })), x.detectingConflicts && I && C((function () {
425 + I.setAttributeNode(document.createAttribute(x.detectionIgnoreAttr));
426 + var t = function (t, e) {
427 + var n = document.createElement("script");
428 + return e && e.detectionIgnoreAttr && n.setAttributeNode(document.createAttribute(e.detectionIgnoreAttr)), n.src = i(t, {
429 + baseFilename: "conflict-detection",
430 + fileSuffix: "js",
431 + subdir: "js",
432 + minify: t.minify.enabled
433 + }), n
434 + }(k, x);
435 + document.body.appendChild(t)
436 + }))
437 + })).catch((function (t) {
438 + console.error("".concat("Font Awesome Kit:", " ").concat(t))
439 + }))
440 + }
441 + } catch (t) {
442 + console.error("".concat("Font Awesome Kit:", " ").concat(t))
443 + }
444 +}));
...\ No newline at end of file ...\ No newline at end of file
1 +@import url('https://fonts.googleapis.com/css?family=Poppins:400,500,600,700&display=swap');
2 +*{
3 + margin: 0;
4 + padding: 0;
5 + box-sizing: border-box;
6 + font-family: 'Poppins', sans-serif;
7 +}
8 +html,body{
9 + display: grid;
10 + height: 100%;
11 + place-items: center;
12 + background: #000000;
13 +}
14 +.search-box{
15 + position: relative;
16 + height: 60px;
17 + width: 60px;
18 + border-radius: 50%;
19 + transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
20 +}
21 +/* //박스 길이 조절 */
22 +.search-box.active{
23 + width: 700px;
24 +}
25 +.search-box input{
26 + width: 100%;
27 + height: 100%;
28 + border: none;
29 + border-radius: 50px;
30 + background: #fff;
31 + outline: none;
32 + padding: 0 60px 0 20px;
33 + font-size: 18px;
34 + opacity: 0;
35 + transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
36 +}
37 +/* 불투명도 */
38 +.search-box input.active{
39 + opacity: 1;
40 +}
41 +.search-box input::placeholder{
42 + color: #a6a6a6;
43 +}
44 +.search-box .search-icon{
45 + position: absolute;
46 + /* 버튼위치 */
47 + right: -380px;
48 + top: 50%;
49 + transform: translateY(-50%);
50 + height: 60px;
51 + width: 60px;
52 + background: #fff;
53 + border-radius: 50%;
54 + text-align: center;
55 + line-height: 60px;
56 + font-size: 22px;
57 + color: #CB25FF;
58 + cursor: pointer;
59 + z-index: 1;
60 + /* transition: all 0.5s cubic-bezier(0.6, -0.28, 0.74, 0.05); */
61 + /* transition: cubic-bezier(0.39, 0.575, 0.565, 1); */
62 + transition-timing-function: linear;
63 +}
64 +.search-box .search-icon.active{
65 + right: 5px;
66 + height: 50px;
67 + line-height: 50px;
68 + width: 50px;
69 + font-size: 20px;
70 + background: #CB25FF;
71 + color: #fff;
72 + transform: translateY(-50%) rotate(360deg);
73 +}
74 +.search-box .cancel-icon{
75 + position: absolute;
76 + right: -380px;
77 + top: 50%;
78 + transform: translateY(-50%);
79 + font-size: 25px;
80 + color: #fff;
81 + cursor: pointer;
82 + /* transition: all 0.5s 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55); */
83 + /* transition: cubic-bezier(0.39, 0.575, 0.565, 1); */
84 + transition-timing-function: linear;
85 +}
86 +.search-box .cancel-icon.active{
87 + right: -40px;
88 +}
89 +.search-box .search-data{
90 + text-align: center;
91 + padding-top: 7px;
92 + color: #fff;
93 + font-size: 18px;
94 + word-wrap: break-word;
95 +}
96 +.search-box .search-data.active{
97 + display: none;
98 +}
1 +<!DOCTYPE html>
2 +<html lang="en" dir="ltr">
3 +
4 +<head>
5 + <meta charset="utf-8">
6 + <title>검색창 애니메이션</title>
7 +</head>
8 +
9 +<body>
10 + <div class="searchBtn">
11 + <link rel="stylesheet" href="btnstyle.css">
12 + <script src="btnsource.js"></script>
13 + <div class="search-box">
14 + <input type="text" placeholder="검색어를 입력하세요 (ex. AAAI 2020)..">
15 + <!-- encoded function for activating search-bar in lisensed resouce -->
16 + <div class="search-icon">
17 + <i class="fas fa-search"></i>
18 + </div>
19 + <div class="cancel-icon">
20 + <i class="fas fa-times"></i>
21 + </div>
22 + <div class="search-data"></div>
23 + </div>
24 + <script src="btnClickEvent.js"></script>
25 + </div>
26 +</body>
27 +
28 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +<div class="searchBtn">
2 + <link rel="stylesheet" href="btnstyle.css">
3 + <script src="btnsource.js"></script>
4 + <div class="search-box">
5 + <input type="text" placeholder="검색어를 입력하세요 (ex. AAAI 2020)..">
6 + <!-- encoded function for activating search-bar in lisensed resouce -->
7 + <div class="search-icon">
8 + <i class="fas fa-search"></i>
9 + </div>
10 + <div class="cancel-icon">
11 + <i class="fas fa-times"></i>
12 + </div>
13 + <div class="search-data"></div>
14 + </div>
15 + <script src="btnClickEvent.js"></script>
16 +</div>
...\ No newline at end of file ...\ No newline at end of file
1 -const express = require('express');
2 -const app = express();
3 -
4 -app.get('/', (req, res) => {
5 - //res.send('API SERVER IS WORKING');
6 - console.log("api.js 실행");
7 -});
...\ No newline at end of file ...\ No newline at end of file
1 -const express = require('express');
2 -const router = express.Router();
3 -
4 -router.get('/', function (req, res) {
5 -
6 - res.send("모든 공연 정보 리스트 반환")
7 -});
8 -module.exports = router;
...\ No newline at end of file ...\ No newline at end of file
1 -<html>
2 -
3 -<head>
4 - <title>로그인 페이지</title>
5 - <link rel="stylesheet" href="login_style.css" type="text/css">
6 - <script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
7 -
8 -</head>
9 -
10 -<body>
11 - <header>
12 - <div class="nav-bar">
13 - <img src="camera.png" alt="" class="logo">
14 -
15 - <ul class="menu">
16 - <li><a href="">Home</a></li>
17 - <li><a href="">Services</a></li>
18 - <li><a href="">Portfolio</a></li>
19 - <li><a href="">Testimonimal</a></li>
20 - <li><a href="">Career</a></li>
21 - <li><a href="">Contact</a></li>
22 - </ul>
23 -
24 - </div>
25 - <div class="welcome">
26 -
27 - <h1>로그인</h1>
28 - <a id="kakao-login-btn"></a>
29 -
30 - </div>
31 -
32 - </header>
33 -</body>
34 -<script>
35 - Kakao.init('0678e32dab56db1c52ac63ab4ccb7663');
36 -
37 - console.log(Kakao.isInitialized());
38 -
39 - Kakao.Auth.createLoginButton({
40 - container: '#kakao-login-btn',
41 - success: function (authObj) {
42 - console.log(JSON.stringify(authObj));
43 - alert(JSON.stringify(authObj));//authObj -> 토큰임.
44 - },
45 - fail: function (err) {
46 - alert(JSON.stringify(err));
47 - }
48 - })
49 -</script>
50 -
51 -</html>
...\ No newline at end of file ...\ No newline at end of file
1 -<html>
2 -
3 -<head>
4 - <title>Webpage Design In HTML and CSS</title>
5 - <link rel="stylesheet" href="main_style.css" type="text/css">
6 -</head>
7 -
8 -<body>
9 - <header>
10 - <div class="nav-bar">
11 - <img src="camera.png" alt="" class="logo">
12 -
13 - <ul class="menu">
14 - <li><a href="">Home</a></li>
15 - <li><a href="">Services</a></li>
16 - <li><a href="">Portfolio</a></li>
17 - <li><a href="">Testimonimal</a></li>
18 - <li><a href="">Career</a></li>
19 - <li><a href="">Contact</a></li>
20 - </ul>
21 -
22 - </div>
23 - <div class="welcome">
24 -
25 - <h1>어떤 공연을 찾으시나요?</h1>
26 - <a href="#" class="btn btn1">나의 근처 공연</a>
27 - <a href="#" class="btn btn2">검색하기</a>
28 - <a href="login.html" class="btn btn3">로그인</a>
29 - </div>
30 -
31 - </header>
32 -</body>
33 -
34 -</html>
...\ No newline at end of file ...\ No newline at end of file
1 -*
2 -{
3 - margin: 0;
4 - padding: 0;
5 -}
6 -
7 -header
8 -{
9 - background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(back1.jpg);
10 - height: 100vh;
11 - background-size: cover;
12 - background-position: center;
13 - background-repeat: no-repeat;
14 - transition: 5s;
15 -
16 - animation-name: animate;
17 - animation-direction: alternate-reverse;
18 - animation-duration: 30s;
19 - animation-fill-mode:forwards;
20 - animation-iteration-count: infinite;
21 - animation-play-state: running;
22 - animation-timing-function:ease-in-out;
23 -}
24 -@keyframes animate{
25 - 0%{
26 - background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(back1.jpg);
27 - }
28 - 33%{
29 - background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(back2.jpg);
30 -
31 - }
32 - 66%{
33 - background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(back3.jpg);
34 -
35 - }
36 -}
37 -.nav-bar
38 -{
39 - background: rgb(0,0,0,0.5);
40 - height: 80px;
41 -}
42 -
43 -.logo{
44 - background-color: #fff;
45 - margin: 10px 50px;
46 - height: 60px;
47 -}
48 -
49 -.menu{
50 - float: right;
51 - list-style: none;
52 - margin:20px;
53 -}
54 -
55 -.menu li{
56 - display: inline-block;
57 - margin: 10px 5px;
58 -}
59 -
60 -.menu li a{
61 - text-decoration: none;
62 - color: #fff;
63 - padding: 5px 10px;
64 - font-family: sans-serif;
65 - letter-spacing: 2px;
66 - border: 1px solid #fff;
67 -}
68 -
69 -.menu li a:hover{
70 - background: #fff;
71 - transition: .4s;
72 - color: #000;
73 -}
74 -
75 -.welcome{
76 - position:relative;
77 - text-align:center;
78 - font-family: sans-serif;
79 - color:#fff;
80 - top: 300px;
81 -}
82 -
83 -.welcome h1{
84 - font-size: 42px;
85 - margin: 25px;
86 -}
87 -
88 -.btn{
89 - font-size:18px;
90 - letter-spacing: 2px;
91 - margin:5px;
92 - padding:7px 10px;
93 - text-decoration: none;
94 - border: 1px solid #fff;
95 -}
96 -
97 -.btn{
98 - color:#fff;
99 -
100 -}
101 -.btn:hover{
102 - background: #fff;
103 - color: #000;
104 - transition: .4s;
105 -}
...\ No newline at end of file ...\ No newline at end of file
1 -var http = require('http');
2 -var fs = require('fs');
3 -var app = http.createServer(function(request,response){
4 - var url=request.url;
5 - if(url == '/'){
6 - url = '/mapPage.html';
7 - }
8 - response.writeHead(200);
9 - response.end(fs.readFileSync(__dirname+url));
10 -});
11 -
12 -app.listen(8080);
...\ No newline at end of file ...\ No newline at end of file
1 -<!DOCTYPE html>
2 -<html>
3 - <head>
4 - <meta charset="utf-8">
5 - <title> map Page title </title>
6 - </head>
7 -<body>
8 - <div id="map" style="width:500px;height:350px"></div>
9 - <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=a3386042ab2e0550ea06d265855b452c">//kakao map api 주소 받아옴</script>
10 -
11 - <script src="./mypos.js"></script>
12 - <script src="./show_pos.js"></script>
13 -</body>
14 -</html>
...\ No newline at end of file ...\ No newline at end of file
1 -var mapContainer = document.getElementById('map'), // 지도를 표시할 div
2 -
3 -// 지도를 표시할 div와 지도 옵션으로 지도를 생성합니다
4 -mapOption = {
5 - center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
6 - level: 5 // 지도의 확대 레벨
7 - };
8 -
9 -var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
10 -
11 -// HTML5의 geolocation으로 사용할 수 있는지 확인합니다
12 -if (navigator.geolocation) {
13 -
14 - // GeoLocation을 이용해서 접속 위치를 얻어옵니다
15 - navigator.geolocation.getCurrentPosition(function(position) {
16 -
17 - var lat = position.coords.latitude, // 위도
18 - lon = position.coords.longitude; // 경도
19 -
20 - var locPosition = new kakao.maps.LatLng(lat, lon), // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다
21 - message = '<div style="padding:5px;">나의 위치!</div>'; // 인포윈도우에 표시될 내용입니다
22 -
23 - // 마커와 인포윈도우를 표시합니다
24 - displayMarker(locPosition, message);
25 -
26 - });
27 -
28 -} else { // HTML5의 GeoLocation을 사용할 수 없을때 마커 표시 위치와 인포윈도우 내용을 설정합니다
29 -
30 - var locPosition = new kakao.maps.LatLng(33.450701, 126.570667),
31 - message = 'geolocation을 사용할수 없어요..'
32 -
33 - displayMarker(locPosition, message);
34 -}
35 -
36 -// 지도에 마커와 인포윈도우를 표시하는 함수입니다
37 -function displayMarker(locPosition, message) {
38 -
39 - // 마커를 생성합니다
40 - var marker = new kakao.maps.Marker({
41 - map: map,
42 - position: locPosition
43 - });
44 -
45 - var iwContent = message, // 인포윈도우에 표시할 내용
46 - iwRemoveable = true;
47 -
48 - // 인포윈도우를 생성합니다
49 - var infowindow = new kakao.maps.InfoWindow({
50 - content : iwContent,
51 - removable : iwRemoveable
52 - });
53 -
54 - // 인포윈도우를 마커위에 표시합니다
55 - infowindow.open(map, marker);
56 -
57 - // 지도 중심좌표를 접속위치로 변경합니다
58 - map.setCenter(locPosition);
59 -}
...\ No newline at end of file ...\ No newline at end of file
1 -var positions = [
2 - {
3 - title: '카카오',
4 - latlng: new kakao.maps.LatLng(37.2427865, 127.106767)
5 - }
6 -];
7 -
8 -displayShows(positions);
9 -
10 -function displayShows(positions){
11 - var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
12 -
13 -for (var i = 0; i < positions.length; i ++) {
14 -
15 - // 마커 이미지의 이미지 크기 입니다
16 - var imageSize = new kakao.maps.Size(24, 35);
17 -
18 - // 마커 이미지를 생성합니다
19 - var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize);
20 -
21 - // 마커를 생성합니다
22 - var marker = new kakao.maps.Marker({
23 - map: map, // 마커를 표시할 지도
24 - position: positions[i].latlng, // 마커를 표시할 위치
25 - title : positions[i].title, // 마커의 타이틀, 마커에 마우스를 올리면 타이틀이 표시됩니다
26 - image : markerImage // 마커 이미지
27 - });
28 - }
29 -}
...\ No newline at end of file ...\ No newline at end of file
1 -// git Ignore 할것!!!!!!!!!!!!!!!!!!!!!!
2 -{
3 - "host": "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
4 - "user":"root",
5 - "password": "dldbwp1207",
6 - "port": "3306",
7 - "database": "showdata"
8 -}
...\ No newline at end of file ...\ No newline at end of file
1 -//해당 아이디를 불러와서 lat lon 받아서 지도 출력
2 -//지도 생성
3 -//해당 위치 표시
4 -
5 -const fs = require('fs');
6 -const express = require('express');
7 -
8 -const data = fs.readFileSync('./showData.json');
9 -const conf = JSON.parse(data);
10 -const mysql = require('mysql');
11 -
12 -const connection = mysql.createConnection({
13 - host: conf.host,
14 - user: conf.user,
15 - password: conf.password,
16 - port: conf.port,
17 - database: conf.database
18 -});
19 -connection.connect(); //연결
20 -
21 -app.get('위치(에 접속한 경우 쿼리를 날려준다.)')
...\ No newline at end of file ...\ No newline at end of file
1 -<!DOCTYPE html>
2 -<html>
3 -
4 -<head>
5 - <meta charset="utf-8">
6 - <title>geolocation으로 마커 표시하기</title>
7 -
8 -</head>
9 -
10 -<body>
11 - <p style="margin-top:-12px">
12 - <b>Chrome 브라우저는 https 환경에서만 geolocation을 지원합니다.</b> 참고해주세요.
13 - </p>
14 - <div id="map" style="width:500px;height:350px;"></div>
15 -
16 - <script type="text/javascript"
17 - src="//dapi.kakao.com/v2/maps/sdk.js?appkey=a3386042ab2e0550ea06d265855b452c">//kakao map api 주소 받아옴</script>
18 - <script>
19 -
20 - const near = require('study.js');
21 -
22 - var mapContainer = document.getElementById('map'), // 지도를 표시할 div
23 - mapOption = {
24 - center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
25 - level: 10 // 지도의 확대 레벨
26 - };
27 -
28 - var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
29 -
30 - // HTML5의 geolocation으로 사용할 수 있는지 확인합니다
31 - if (navigator.geolocation) {
32 -
33 - // GeoLocation을 이용해서 접속 위치를 얻어옵니다
34 - navigator.geolocation.getCurrentPosition(function (position) {
35 -
36 - var lat = position.coords.latitude, // 위도
37 - lon = position.coords.longitude; // 경도
38 - console.log(lat);
39 - console.log(lon);
40 - var locPosition = new kakao.maps.LatLng(lat, lon), // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다
41 - message = '<div style="padding:5px;">여기에 계신가요?!</div>'; // 인포윈도우에 표시될 내용입니다
42 -
43 - // 마커와 인포윈도우를 표시합니다
44 - displayMarker(locPosition, message);
45 -
46 - });
47 -
48 - } else { // HTML5의 GeoLocation을 사용할 수 없을때 마커 표시 위치와 인포윈도우 내용을 설정합니다
49 -
50 - var locPosition = new kakao.maps.LatLng(33.450701, 126.570667),
51 - message = 'geolocation을 사용할수 없어요..'
52 -
53 - displayMarker(locPosition, message);
54 - }
55 -
56 -
57 -
58 -
59 - displayShows();
60 - function displayShows() {
61 - var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
62 - var near_list = near(lat, lon);
63 - var positions = [];
64 - for (var i = 0; i < near_list.length; i++) {
65 - positions.push({
66 - title: id,
67 - lating: new kakao.maps.Lating(near_list[i][1], near_list[i][2])
68 - })
69 - }
70 - for (var i = 0; i < positions.length; i++) {
71 -
72 - // 마커 이미지의 이미지 크기 입니다
73 - var imageSize = new kakao.maps.Size(24, 35);
74 -
75 - // 마커 이미지를 생성합니다
76 - var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize);
77 -
78 - // 마커를 생성합니다
79 - var marker = new kakao.maps.Marker({
80 - map: map, // 마커를 표시할 지도
81 - position: positions[i].latlng, // 마커를 표시할 위치
82 - title: positions[i].title, // 마커의 타이틀, 마커에 마우스를 올리면 타이틀이 표시됩니다
83 - image: markerImage // 마커 이미지
84 - });
85 - }
86 - }
87 - // 지도에 마커와 인포윈도우를 표시하는 함수입니다
88 - function displayMarker(locPosition, message) {
89 -
90 - // 마커를 생성합니다
91 - var marker = new kakao.maps.Marker({
92 - map: map,
93 - position: locPosition
94 - });
95 -
96 - var iwContent = message, // 인포윈도우에 표시할 내용
97 - iwRemoveable = true;
98 -
99 - // 인포윈도우를 생성합니다
100 - var infowindow = new kakao.maps.InfoWindow({
101 - content: iwContent,
102 - removable: iwRemoveable
103 - });
104 -
105 - // 인포윈도우를 마커위에 표시합니다
106 - infowindow.open(map, marker);
107 -
108 - // 지도 중심좌표를 접속위치로 변경합니다
109 - map.setCenter(locPosition);
110 - }
111 - </script>
112 -</body>
113 -
114 -</html>
...\ No newline at end of file ...\ No newline at end of file
1 -[
2 - {
3 - "id" : 1,
4 - "oper_name" : "2020 파주포크페스티벌(취소)",
5 - "oper_place" : "임진각 평화누리",
6 - "description" : "포크뮤지션공연",
7 - "start_day" : "2099/01/01",
8 - "end_day" : "2099/01/01",
9 - "start_time" : "17:30",
10 - "end_time" : "22:00",
11 - "is_free" : "유료",
12 - "sponser" : "경기문화재단",
13 - "spon_region" : "파주시",
14 - "phone_num" : "031-853-9472",
15 - "charge" : "30,000원+40,000원+50,000원+60,000원",
16 - "age" : "누구나",
17 - "homepage" : "http://www.pajufolk.com",
18 - "parking" : "Y",
19 - "where" : "경기도 파주시 문산읍 임진각로 148-40",
20 - "latitude" : 37.89204327,
21 - "longitude" : 126.7447918
22 - },
23 - {
24 - "id" : 2,
25 - "oper_name" : "시민가요제(잠정연기)",
26 - "oper_place" : "파주시민회관 소공연장",
27 - "description" : "파주시민노래경연대회",
28 - "start_day" : "2099/01/01",
29 - "end_day" : "2099/01/01",
30 - "start_time" : "17:00",
31 - "end_time" : "19:00",
32 - "is_free" : "무료",
33 - "sponser" : "(사)한국연예예술인총연합회 파주지회",
34 - "spon_region" : "파주시",
35 - "phone_num" : "031-944-3396",
36 - "charge" : "무료",
37 - "age" : "누구나",
38 - "homepage" : "http://www.pajuart.or.kr/",
39 - "parking" : "Y",
40 - "where" : "경기도 파주시 시민회관길 33",
41 - "latitude" : 37.75919299,
42 - "longitude" : 126.7807224
43 - },
44 - {
45 - "id" : 3,
46 - "oper_name" : "구민화합체육대회",
47 - "oper_place" : "인천아시아드주경기장",
48 - "description" : "서구민 체육대회",
49 - "start_day" : "2021/09/30",
50 - "end_day" : "2021/09/30",
51 - "start_time" : "9:00",
52 - "end_time" : "17:00",
53 - "is_free" : "무료",
54 - "sponser" : "인천광역시 서구체육회",
55 - "spon_region" : "인천광역시 서구청",
56 - "phone_num" : "032-560-4133",
57 - "charge" : "무료",
58 - "age" : "전연령",
59 - "homepage" : "빈칸",
60 - "parking" : "Y",
61 - "where" : "인천광역시 서구 봉수대로 806",
62 - "latitude" : 37.54518678,
63 - "longitude" : 126.6650985
64 - },
65 - {
66 - "id" : 4,
67 - "oper_name" : "한여름밤의 야외음악회",
68 - "oper_place" : "서동생활공원 다목적운동장",
69 - "description" : "음악",
70 - "start_day" : "2021/08/06",
71 - "end_day" : "2021/08/06",
72 - "start_time" : "20:00",
73 - "end_time" : "22:00",
74 - "is_free" : "무료",
75 - "sponser" : "의령문화원+의령군",
76 - "spon_region" : "의령군",
77 - "phone_num" : "055-573-2034",
78 - "charge" : "무료",
79 - "age" : "빈칸",
80 - "homepage" : "빈칸",
81 - "parking" : "빈칸",
82 - "where" : "경상남도 의령군 의령읍 의병로8길 44",
83 - "latitude" : 35.31545351,
84 - "longitude" : 128.2558931
85 - },
86 - {
87 - "id" : 5,
88 - "oper_name" : "반려견을 위한 콘서트 (코로나19로 인한 2020년 행사 취소)",
89 - "oper_place" : "청도야외공연장",
90 - "description" : "반려동물과 함께 오케스트라 등의 음악 공연",
91 - "start_day" : "2021/04/18",
92 - "end_day" : "2021/04/18",
93 - "start_time" : "0:00",
94 - "end_time" : "0:00",
95 - "is_free" : "무료",
96 - "sponser" : "청도군",
97 - "spon_region" : "청도군",
98 - "phone_num" : "054-370-6376",
99 - "charge" : "무료",
100 - "age" : "제한없음",
101 - "homepage" : "빈칸",
102 - "parking" : "Y",
103 - "where" : "경상북도 청도군 화양읍 청려로 1846",
104 - "latitude" : 35.64838686,
105 - "longitude" : 128.7186818
106 - },
107 - {
108 - "id" : 6,
109 - "oper_name" : "서흥 선비골 축제",
110 - "oper_place" : "함현복지관 다목적홀",
111 - "description" : "전국시조창경연대회 및 전국시조백일장",
112 - "start_day" : "2021/01/01",
113 - "end_day" : "2021/01/01",
114 - "start_time" : "9:00~17:00",
115 - "end_time" : "빈칸",
116 - "is_free" : "무료",
117 - "sponser" : "대한시조협회",
118 - "spon_region" : "경기도 시흥시",
119 - "phone_num" : "빈칸",
120 - "charge" : "무료",
121 - "age" : "제한없음",
122 - "homepage" : "빈칸",
123 - "parking" : "빈칸",
124 - "where" : "경기도 시흥시 정왕대로 266번길4, 2층 203호",
125 - "latitude" : 37.34315896,
126 - "longitude" : 126.7414021
127 - },
128 - {
129 - "id" : 7,
130 - "oper_name" : "테마가 있는 무용스케치",
131 - "oper_place" : "시흥시청 늠내홀",
132 - "description" : "무용공연",
133 - "start_day" : "2021/01/01",
134 - "end_day" : "2021/01/01",
135 - "start_time" : "18:00~20:00",
136 - "end_time" : "빈칸",
137 - "is_free" : "무료",
138 - "sponser" : "무용협회",
139 - "spon_region" : "경기도 시흥시",
140 - "phone_num" : "빈칸",
141 - "charge" : "무료",
142 - "age" : "제한없음",
143 - "homepage" : "빈칸",
144 - "parking" : "빈칸",
145 - "where" : "경기도 시흥시 옥구상가2길 4",
146 - "latitude" : 37.35391394,
147 - "longitude" : 126.7240013
148 - },
149 - {
150 - "id" : 8,
151 - "oper_name" : "시립전통예술단과 함께하는 청소년 연희축제",
152 - "oper_place" : "ABC행복학습타운 ABC홀",
153 - "description" : "시립전통예술단 연계 교육 결과발표회",
154 - "start_day" : "2021/01/01",
155 - "end_day" : "2021/01/01",
156 - "start_time" : "14:00~16:00",
157 - "end_time" : "빈칸",
158 - "is_free" : "무료",
159 - "sponser" : "시립전통예술단",
160 - "spon_region" : "경기도 시흥시",
161 - "phone_num" : "031-310-6738",
162 - "charge" : "무료",
163 - "age" : "초중",
164 - "homepage" : "빈칸",
165 - "parking" : "Y",
166 - "where" : "경기도 시흥시 소래산길 11",
167 - "latitude" : 37.44850647,
168 - "longitude" : 126.7846941
169 - },
170 - {
171 - "id" : 9,
172 - "oper_name" : "시립전통예술단과 함께하는 Hello 희희락락 콘서트 4회차",
173 - "oper_place" : "ABC행복학습타운 ABC홀",
174 - "description" : "시립전통예술단 연계 교육기획공연",
175 - "start_day" : "2021/01/01",
176 - "end_day" : "2021/01/01",
177 - "start_time" : "10:00~11:30",
178 - "end_time" : "빈칸",
179 - "is_free" : "무료",
180 - "sponser" : "시립전통예술단",
181 - "spon_region" : "경기도 시흥시",
182 - "phone_num" : "031-310-6738",
183 - "charge" : "무료",
184 - "age" : "초중",
185 - "homepage" : "https://happyedu.siheung.go.kr",
186 - "parking" : "Y",
187 - "where" : "경기도 시흥시 소래산길 11",
188 - "latitude" : 37.44850647,
189 - "longitude" : 126.7846941
190 - },
191 - {
192 - "id" : 10,
193 - "oper_name" : "근로자와 함께하는 음악회",
194 - "oper_place" : "주식회사 D&T",
195 - "description" : "평일 및 외부 문화활동이 어려운 시흥시 재직 근로자들을 찾아가는 힐링 콘서트",
196 - "start_day" : "2021/01/01",
197 - "end_day" : "2021/01/01",
198 - "start_time" : "16:00~17:00",
199 - "end_time" : "빈칸",
200 - "is_free" : "무료",
201 - "sponser" : "경기도 시흥시",
202 - "spon_region" : "경기도 시흥시",
203 - "phone_num" : "031-430-0169",
204 - "charge" : "무료",
205 - "age" : "전체관람가",
206 - "homepage" : "빈칸",
207 - "parking" : "빈칸",
208 - "where" : "경기도 시흥시 경기과기대로 182",
209 - "latitude" : 37.3310871,
210 - "longitude" : 126.7309497
211 - },
212 - {
213 - "id" : 11,
214 - "oper_name" : "시립전통예술단과 함께하는 Hello 희희락락 콘서트 3회차",
215 - "oper_place" : "ABC행복학습타운 ABC홀",
216 - "description" : "시립전통예술단 연계 교육기획공연",
217 - "start_day" : "2021/01/01",
218 - "end_day" : "2021/01/01",
219 - "start_time" : "10:00~11:30",
220 - "end_time" : "빈칸",
221 - "is_free" : "무료",
222 - "sponser" : "시립전통예술단",
223 - "spon_region" : "경기도 시흥시",
224 - "phone_num" : "031-310-6738",
225 - "charge" : "무료",
226 - "age" : "초중",
227 - "homepage" : "https://happyedu.siheung.go.kr",
228 - "parking" : "Y",
229 - "where" : "경기도 시흥시 소래산길 11",
230 - "latitude" : 37.44850647,
231 - "longitude" : 126.7846941
232 - },
233 - {
234 - "id" : 12,
235 - "oper_name" : "오페라 사랑의 묘약",
236 - "oper_place" : "시흥시 여성비전센터",
237 - "description" : "오페라 사랑의 묘약공연",
238 - "start_day" : "2021/01/01",
239 - "end_day" : "2021/01/01",
240 - "start_time" : "14:00~22:00",
241 - "end_time" : "빈칸",
242 - "is_free" : "무료",
243 - "sponser" : "시흥심포니오케스트라",
244 - "spon_region" : "경기도 시흥시",
245 - "phone_num" : "031-499-0506",
246 - "charge" : "무료",
247 - "age" : "제한없음",
248 - "homepage" : "빈칸",
249 - "parking" : "빈칸",
250 - "where" : "경기도 시흥시 옥구상가2길 4",
251 - "latitude" : 37.35391394,
252 - "longitude" : 126.7240013
253 - },
254 - {
255 - "id" : 13,
256 - "oper_name" : "아마추어밴드 페스티벌",
257 - "oper_place" : "월곶예술공판장 아트독",
258 - "description" : "아마추어 밴드 공연",
259 - "start_day" : "2021/01/01",
260 - "end_day" : "2021/01/01",
261 - "start_time" : "18:00~20:00",
262 - "end_time" : "빈칸",
263 - "is_free" : "무료",
264 - "sponser" : "경기도 시흥시",
265 - "spon_region" : "경기도 시흥시",
266 - "phone_num" : "031-310-6733",
267 - "charge" : "무료",
268 - "age" : "전체관람가",
269 - "homepage" : "빈칸",
270 - "parking" : "빈칸",
271 - "where" : "경기도 시흥시 월곶해안로 205",
272 - "latitude" : 37.38623378,
273 - "longitude" : 126.7406664
274 - },
275 - {
276 - "id" : 14,
277 - "oper_name" : "오이도박물관에서 예술과 놀다",
278 - "oper_place" : "오이도박물관 야외무대",
279 - "description" : "성악, 대북, 스트릿댄스 등 종합공연",
280 - "start_day" : "2021/01/01",
281 - "end_day" : "2021/01/01",
282 - "start_time" : "18:00~19:30",
283 - "end_time" : "빈칸",
284 - "is_free" : "무료",
285 - "sponser" : "예술누리",
286 - "spon_region" : "경기도 시흥시",
287 - "phone_num" : "070-8635-9228",
288 - "charge" : "무료",
289 - "age" : "제한없음",
290 - "homepage" : "빈칸",
291 - "parking" : "빈칸",
292 - "where" : "경기도 시흥시 중심상가로 349, 916동 502호",
293 - "latitude" : 37.33561466,
294 - "longitude" : 126.7510692
295 - },
296 - {
297 - "id" : 15,
298 - "oper_name" : "오이도 풍어제",
299 - "oper_place" : "오이도 함상전망대",
300 - "description" : "오이도 풍어제를 모티브로 한 창작곡 오케스트라연주 및 성악 공연",
301 - "start_day" : "2021/01/01",
302 - "end_day" : "2021/01/01",
303 - "start_time" : "19:00~21:00",
304 - "end_time" : "빈칸",
305 - "is_free" : "무료",
306 - "sponser" : "플루트콰르텟",
307 - "spon_region" : "경기도 시흥시",
308 - "phone_num" : "031-313-2907",
309 - "charge" : "무료",
310 - "age" : "제한없음",
311 - "homepage" : "빈칸",
312 - "parking" : "빈칸",
313 - "where" : "경기도 시흥시 장현 능곡로 184",
314 - "latitude" : 37.36940183,
315 - "longitude" : 126.81066
316 - },
317 - {
318 - "id" : 16,
319 - "oper_name" : "연극 < 쑥부쟁이>",
320 - "oper_place" : "ABC행복학습타운 어울림 소극장",
321 - "description" : "80대 노부부의 삶의 마감에 대한 성찰연극",
322 - "start_day" : "2021/01/01",
323 - "end_day" : "2021/01/01",
324 - "start_time" : "20:00~21:30",
325 - "end_time" : "빈칸",
326 - "is_free" : "무료",
327 - "sponser" : "극단 기린",
328 - "spon_region" : "경기도 시흥시",
329 - "phone_num" : "빈칸",
330 - "charge" : "무료",
331 - "age" : "제한없음",
332 - "homepage" : "빈칸",
333 - "parking" : "빈칸",
334 - "where" : "경기도 시흥시 매화1로 30, 2층",
335 - "latitude" : 37.41516469,
336 - "longitude" : 126.8117784
337 - },
338 - {
339 - "id" : 17,
340 - "oper_name" : "마을활동가와 함께하는 버스킹",
341 - "oper_place" : "정왕본동 행정복지센터 다목적실",
342 - "description" : "정왕본동 마을활동가가 선보이는 버스킹 공연",
343 - "start_day" : "2021/01/01",
344 - "end_day" : "2021/01/01",
345 - "start_time" : "18:00~19:30",
346 - "end_time" : "빈칸",
347 - "is_free" : "무료",
348 - "sponser" : "정왕본동 행정복지센터",
349 - "spon_region" : "정왕본동 행정복지센터",
350 - "phone_num" : "031-310-4512",
351 - "charge" : "무료",
352 - "age" : "전체관람가",
353 - "homepage" : "빈칸",
354 - "parking" : "빈칸",
355 - "where" : "경기도 시흥시 역전로 228",
356 - "latitude" : 37.34940778,
357 - "longitude" : 126.7460667
358 - },
359 - {
360 - "id" : 18,
361 - "oper_name" : "마을활동가와 함께하는 버스킹",
362 - "oper_place" : "정왕역",
363 - "description" : "정왕본동 마을활동가가 선보이는 버스킹 공연",
364 - "start_day" : "2021/01/01",
365 - "end_day" : "2021/01/01",
366 - "start_time" : "18:00~19:30",
367 - "end_time" : "빈칸",
368 - "is_free" : "무료",
369 - "sponser" : "정왕본동 행정복지센터",
370 - "spon_region" : "정왕본동 행정복지센터",
371 - "phone_num" : "031-310-4512",
372 - "charge" : "무료",
373 - "age" : "전체관람가",
374 - "homepage" : "빈칸",
375 - "parking" : "빈칸",
376 - "where" : "경기도 시흥시 역전로 228",
377 - "latitude" : 37.34940778,
378 - "longitude" : 126.7460667
379 - },
380 - {
381 - "id" : 19,
382 - "oper_name" : "제29회 한국국악협회 시흥시지부 정기연주회",
383 - "oper_place" : "ABC행복학습타운 ABC홀",
384 - "description" : "국악공연",
385 - "start_day" : "2021/01/01",
386 - "end_day" : "2021/01/01",
387 - "start_time" : "미정",
388 - "end_time" : "빈칸",
389 - "is_free" : "무료",
390 - "sponser" : "국악협회",
391 - "spon_region" : "경기도 시흥시",
392 - "phone_num" : "빈칸",
393 - "charge" : "무료",
394 - "age" : "제한없음",
395 - "homepage" : "빈칸",
396 - "parking" : "빈칸",
397 - "where" : "경기도 시흥시 호현로 72",
398 - "latitude" : 37.44623628,
399 - "longitude" : 126.7868839
400 - },
401 - {
402 - "id" : 20,
403 - "oper_name" : "시흥시립소년소녀합창단 송년음악회",
404 - "oper_place" : "ABC행복학습타운 ABC홀",
405 - "description" : "겨울 및 크리스마스와 관련된 곡들로 구성된 합창 공연(사전 관람 신청 필요)",
406 - "start_day" : "2021/01/01",
407 - "end_day" : "2021/01/01",
408 - "start_time" : "19:30~21:00",
409 - "end_time" : "빈칸",
410 - "is_free" : "무료",
411 - "sponser" : "시흥시립소년소녀합창단",
412 - "spon_region" : "경기도 시흥시",
413 - "phone_num" : "031-310-6264",
414 - "charge" : "무료",
415 - "age" : "초등이상",
416 - "homepage" : "http://www.culturesiheung.com/",
417 - "parking" : "Y",
418 - "where" : "경기도 시흥시 소래산길 11 시흥ABC행복학습타운",
419 - "latitude" : 37.44850588,
420 - "longitude" : 126.7846949
421 - },
422 - {
423 - "id" : 21,
424 - "oper_name" : "가족문화나들이 에필로그공연 어메이징 매직쇼",
425 - "oper_place" : "시흥시청 늠내홀",
426 - "description" : "가족과 즐기는 세계대회 수상자들의 마술공연",
427 - "start_day" : "2021/01/01",
428 - "end_day" : "2021/01/01",
429 - "start_time" : "17:00~18:30",
430 - "end_time" : "빈칸",
431 - "is_free" : "무료",
432 - "sponser" : "㈜엠에프컴퍼니",
433 - "spon_region" : "경기도 시흥시",
434 - "phone_num" : "빈칸",
435 - "charge" : "빈칸",
436 - "age" : "전체관람가",
437 - "homepage" : "빈칸",
438 - "parking" : "Y",
439 - "where" : "경기도 시흥시 시흥시청로20",
440 - "latitude" : 37.38042323,
441 - "longitude" : 126.8040654
442 - },
443 - {
444 - "id" : 22,
445 - "oper_name" : "올댓콘서트-홍경섭 Jazz Band",
446 - "oper_place" : "월곶예술공판장 아트독",
447 - "description" : "겨을을 느낄 수 있는 재즈 나잇 콘서트",
448 - "start_day" : "2021/01/01",
449 - "end_day" : "2021/01/01",
450 - "start_time" : "19:30~21:00",
451 - "end_time" : "빈칸",
452 - "is_free" : "무료",
453 - "sponser" : "앙상블온",
454 - "spon_region" : "경기도 시흥시",
455 - "phone_num" : "031-320-6737",
456 - "charge" : "빈칸",
457 - "age" : "제한없음",
458 - "homepage" : "빈칸",
459 - "parking" : "Y",
460 - "where" : "경기도 시흥시 월곶해안로 205",
461 - "latitude" : 37.38623378,
462 - "longitude" : 126.7406664
463 - },
464 - {
465 - "id" : 23,
466 - "oper_name" : "시립합창단 합창뮤지컬 소원택시",
467 - "oper_place" : "시흥시청 늠내홀",
468 - "description" : "시립합창단 뮤지컬 공연",
469 - "start_day" : "2021/01/01",
470 - "end_day" : "2021/01/01",
471 - "start_time" : "15:00+14:00+18:00",
472 - "end_time" : "빈칸",
473 - "is_free" : "무료",
474 - "sponser" : "경기도 시흥시",
475 - "spon_region" : "경기도 시흥시",
476 - "phone_num" : "031-310-6733",
477 - "charge" : "무료",
478 - "age" : "전체관람가",
479 - "homepage" : "http://www.culturesiheung.com/",
480 - "parking" : "Y",
481 - "where" : "경기도 시흥시 시청로 20",
482 - "latitude" : 37.38042164,
483 - "longitude" : 126.8040627
484 - },
485 - {
486 - "id" : 24,
487 - "oper_name" : "시립합창단과 함께하는 청소년합창축제",
488 - "oper_place" : "평생학습센터 대공연장",
489 - "description" : "시립합창단 연계 교육 결과발표회",
490 - "start_day" : "2021/01/01",
491 - "end_day" : "2021/01/01",
492 - "start_time" : "14:00~16:00",
493 - "end_time" : "빈칸",
494 - "is_free" : "무료",
495 - "sponser" : "시립합창단",
496 - "spon_region" : "경기도 시흥시",
497 - "phone_num" : "031-310-6738",
498 - "charge" : "무료",
499 - "age" : "초중",
500 - "homepage" : "빈칸",
501 - "parking" : "Y",
502 - "where" : "경기도 시흥시 은행로 173길 14",
503 - "latitude" : 37.445421,
504 - "longitude" : 126.796807
505 - },
506 - {
507 - "id" : 25,
508 - "oper_name" : "제4회 늠내클래식축제 창작오페라 벼꽃 피다",
509 - "oper_place" : "시흥시청 늠내홀",
510 - "description" : "창작오페라 공연",
511 - "start_day" : "2021/01/01",
512 - "end_day" : "2021/01/01",
513 - "start_time" : "18:00~20:00",
514 - "end_time" : "빈칸",
515 - "is_free" : "무료",
516 - "sponser" : "음악협회",
517 - "spon_region" : "경기도 시흥시",
518 - "phone_num" : "빈칸",
519 - "charge" : "5,000",
520 - "age" : "제한없음",
521 - "homepage" : "빈칸",
522 - "parking" : "빈칸",
523 - "where" : "경기도 시흥시 호현로 72",
524 - "latitude" : 37.44623628,
525 - "longitude" : 126.7868839
526 - },
527 - {
528 - "id" : 26,
529 - "oper_name" : "제4회 시흥시합창페스티벌",
530 - "oper_place" : "ABC행복학습타운",
531 - "description" : "시립합창단 및 지역합창단 공연",
532 - "start_day" : "2021/01/01",
533 - "end_day" : "2021/01/01",
534 - "start_time" : "14:00~16:00",
535 - "end_time" : "빈칸",
536 - "is_free" : "무료",
537 - "sponser" : "경기도 시흥시",
538 - "spon_region" : "경기도 시흥시",
539 - "phone_num" : "031-310-6733",
540 - "charge" : "무료",
541 - "age" : "전체관람가",
542 - "homepage" : "빈칸",
543 - "parking" : "Y",
544 - "where" : "경기도 시흥시 소래산길 11",
545 - "latitude" : 37.44850588,
546 - "longitude" : 126.7846949
547 - },
548 - {
549 - "id" : 27,
550 - "oper_name" : "제야음악회",
551 - "oper_place" : "수성아트피아 용지홀",
552 - "description" : "음악회",
553 - "start_day" : "2020/12/31",
554 - "end_day" : "2020/12/31",
555 - "start_time" : "22:00",
556 - "end_time" : "0:30",
557 - "is_free" : "유료",
558 - "sponser" : "수성아트피아",
559 - "spon_region" : "수성아트피아",
560 - "phone_num" : "053-668-1800",
561 - "charge" : "빈칸",
562 - "age" : "빈칸",
563 - "homepage" : "http://www.ssartpia.kr",
564 - "parking" : "Y",
565 - "where" : "대구광역시 수성구 무학로 180",
566 - "latitude" : 35.82928349,
567 - "longitude" : 128.6282735
568 - },
569 - {
570 - "id" : 28,
571 - "oper_name" : "코로나로 미정(2020 시네마 콘서트)",
572 - "oper_place" : "경기섬유종합지원센터",
573 - "description" : "영화음악 공연",
574 - "start_day" : "2020/12/31",
575 - "end_day" : "2020/12/31",
576 - "start_time" : "19:00",
577 - "end_time" : "20:00",
578 - "is_free" : "무료",
579 - "sponser" : "사단법인 한국영화인협회 양주시지부",
580 - "spon_region" : "사단법인 한국영화인협회 양주시지부",
581 - "phone_num" : "031-836-5141",
582 - "charge" : "빈칸",
583 - "age" : "빈칸",
584 - "homepage" : "빈칸",
585 - "parking" : "Y",
586 - "where" : "경기도 양주시 평화로 1215",
587 - "latitude" : 37.79910946,
588 - "longitude" : 127.0451678
589 - },
590 - {
591 - "id" : 29,
592 - "oper_name" : "제야음악회",
593 - "oper_place" : "웅부홀",
594 - "description" : "복합",
595 - "start_day" : "2020/12/31",
596 - "end_day" : "2020/12/31",
597 - "start_time" : "21:00",
598 - "end_time" : "23:00",
599 - "is_free" : "유료",
600 - "sponser" : "안동문화예술의전당",
601 - "spon_region" : "안동문화예술의전당",
602 - "phone_num" : "054-840-3600",
603 - "charge" : "빈칸",
604 - "age" : "초등학생이상",
605 - "homepage" : "www.andongart.go.kr",
606 - "parking" : "Y",
607 - "where" : "경상북도 안동시 축제장길 66",
608 - "latitude" : 36.5594096,
609 - "longitude" : 128.7250766
610 - },
611 - {
612 - "id" : 30,
613 - "oper_name" : "하우스콘서트 8월",
614 - "oper_place" : "군산예술의전당 대공연장",
615 - "description" : "클래식",
616 - "start_day" : "2020/12/30",
617 - "end_day" : "2020/12/30",
618 - "start_time" : "19:30",
619 - "end_time" : "20:30",
620 - "is_free" : "무료",
621 - "sponser" : "군산예술의전당",
622 - "spon_region" : "전라북도 군산시청",
623 - "phone_num" : "063-454-5535",
624 - "charge" : "무료",
625 - "age" : "초등생이상관람가",
626 - "homepage" : "http://arts.gunsan.go.kr/index.gunsan",
627 - "parking" : "Y",
628 - "where" : "전라북도 군산시 백토로203, (지곡동)",
629 - "latitude" : 35.96078244,
630 - "longitude" : 126.7070385
631 - },
632 - {
633 - "id" : 31,
634 - "oper_name" : "휴 콘서트 5. -노트르아미-",
635 - "oper_place" : "중구문화회관",
636 - "description" : "문화가 있는 날 공연",
637 - "start_day" : "2020/12/30",
638 - "end_day" : "2020/12/30",
639 - "start_time" : "11:00",
640 - "end_time" : "12:00",
641 - "is_free" : "유료",
642 - "sponser" : "인천광역시 중구",
643 - "spon_region" : "인천광역시 중구",
644 - "phone_num" : "032-760-6402",
645 - "charge" : "10,000원",
646 - "age" : "빈칸",
647 - "homepage" : "http://www.icjg.go.kr/artcenter",
648 - "parking" : "Y",
649 - "where" : "인천광역시 중구 축항대로296번길 81",
650 - "latitude" : 37.44017466,
651 - "longitude" : 126.6294074
652 - },
653 - {
654 - "id" : 32,
655 - "oper_name" : "문화가 있는 날 <김준수x두번째달 판소리 춘향가>",
656 - "oper_place" : "강원대학교 백령체육관",
657 - "description" : "퓨전국악",
658 - "start_day" : "2020/12/30",
659 - "end_day" : "2020/12/30",
660 - "start_time" : "19:30",
661 - "end_time" : "21:00",
662 - "is_free" : "유료",
663 - "sponser" : "춘천문화재단",
664 - "spon_region" : "춘천문화재단",
665 - "phone_num" : "033-259-5824",
666 - "charge" : "20,000원",
667 - "age" : "만7세이상",
668 - "homepage" : "http://www.cccf.or.kr",
669 - "parking" : "Y",
670 - "where" : "강원도 춘천시 춘천로 112",
671 - "latitude" : 37.87309646,
672 - "longitude" : 127.727808
673 - },
674 - {
675 - "id" : 33,
676 - "oper_name" : "영도구 청소년오케스트라 정기연주회",
677 - "oper_place" : "영도문화예술회관 대공연장",
678 - "description" : "정기연주회",
679 - "start_day" : "2020/12/29",
680 - "end_day" : "2020/12/29",
681 - "start_time" : "19:30",
682 - "end_time" : "21:00",
683 - "is_free" : "무료",
684 - "sponser" : "영도구청",
685 - "spon_region" : "영도문화예술회관",
686 - "phone_num" : "051-419-5562",
687 - "charge" : "무료",
688 - "age" : "제한없음",
689 - "homepage" : "http://www.yeongdo.go.kr/culture.web",
690 - "parking" : "Y",
691 - "where" : "부산광역시 영도구 함지로79번길 6",
692 - "latitude" : 35.075268,
693 - "longitude" : 129.066862
694 - },
695 - {
696 - "id" : 34,
697 - "oper_name" : "코믹뮤지컬 ''프리즌''",
698 - "oper_place" : "청주아트홀",
699 - "description" : "공연",
700 - "start_day" : "2020/12/29",
701 - "end_day" : "2020/12/31",
702 - "start_time" : "19:00",
703 - "end_time" : "21:00",
704 - "is_free" : "유료",
705 - "sponser" : "극단 가게",
706 - "spon_region" : "극단 가게",
707 - "phone_num" : "빈칸",
708 - "charge" : "빈칸",
709 - "age" : "빈칸",
710 - "homepage" : "빈칸",
711 - "parking" : "Y",
712 - "where" : "충청북도 청주시 서원구 예체로 118-1",
713 - "latitude" : 36.636924,
714 - "longitude" : 127.469428
715 - },
716 - {
717 - "id" : 35,
718 - "oper_name" : "색소폰 연주",
719 - "oper_place" : "백조홀",
720 - "description" : "대중음악",
721 - "start_day" : "2020/12/27",
722 - "end_day" : "2020/12/27",
723 - "start_time" : "14:30",
724 - "end_time" : "16:30",
725 - "is_free" : "무료",
726 - "sponser" : "강변색소폰동우회",
727 - "spon_region" : "강변색소폰동우회",
728 - "phone_num" : "빈칸",
729 - "charge" : "무료",
730 - "age" : "전연령",
731 - "homepage" : "www.andongart.go.kr",
732 - "parking" : "Y",
733 - "where" : "경상북도 안동시 축제장길 66",
734 - "latitude" : 36.5594096,
735 - "longitude" : 128.7250766
736 - },
737 - {
738 - "id" : 36,
739 - "oper_name" : "12월 문화가 있는 날",
740 - "oper_place" : "해동문화예술촌",
741 - "description" : "예술도가, 디지털 캔버스",
742 - "start_day" : "2020/12/26",
743 - "end_day" : "2020/12/26",
744 - "start_time" : "19:00",
745 - "end_time" : "20:30",
746 - "is_free" : "무료",
747 - "sponser" : "(재)담양군문화재단",
748 - "spon_region" : "담양군",
749 - "phone_num" : "061-380-2804",
750 - "charge" : "무료",
751 - "age" : "전연령",
752 - "homepage" : "http://www.damyang.go.kr",
753 - "parking" : "Y",
754 - "where" : "전라남도 담양군 담양읍 지침1길 6",
755 - "latitude" : 35.31755724,
756 - "longitude" : 126.9838342
757 - },
758 - {
759 - "id" : 37,
760 - "oper_name" : "자체제작 뮤지컬 온새미로",
761 - "oper_place" : "대구학생문화센터 대공연장",
762 - "description" : "뮤지컬",
763 - "start_day" : "2020/12/24",
764 - "end_day" : "2020/12/25",
765 - "start_time" : "19:30",
766 - "end_time" : "20:50",
767 - "is_free" : "무료",
768 - "sponser" : "대구학생문화센터",
769 - "spon_region" : "대구학생문화센터",
770 - "phone_num" : "053-231-1333",
771 - "charge" : "0",
772 - "age" : "8세이상",
773 - "homepage" : "www.dccs.go.kr",
774 - "parking" : "Y",
775 - "where" : "대구광역시 달서구 용산로 181",
776 - "latitude" : 35.8530244,
777 - "longitude" : 128.5295222
778 - },
779 - {
780 - "id" : 38,
781 - "oper_name" : "수능콘서트",
782 - "oper_place" : "오산문화예술회관 대공연장",
783 - "description" : "수능을 마친 학생들을 위한 공연",
784 - "start_day" : "2020/12/24",
785 - "end_day" : "2020/12/24",
786 - "start_time" : "미정",
787 - "end_time" : "빈칸",
788 - "is_free" : "무료",
789 - "sponser" : "오산시",
790 - "spon_region" : "오산문화원",
791 - "phone_num" : "031-375-7755",
792 - "charge" : "무료",
793 - "age" : "고3학생",
794 - "homepage" : "http://www.oscc.or.kr/",
795 - "parking" : "Y",
796 - "where" : "경기도 오산시 경기동로 41",
797 - "latitude" : 37.15954961,
798 - "longitude" : 127.0768564
799 - },
800 - {
801 - "id" : 39,
802 - "oper_name" : "국립오페라단",
803 - "oper_place" : "웅부홀",
804 - "description" : "오페라",
805 - "start_day" : "2020/12/24",
806 - "end_day" : "2020/12/26",
807 - "start_time" : "19:30",
808 - "end_time" : "21:10",
809 - "is_free" : "유료",
810 - "sponser" : "안동문화예술의전당",
811 - "spon_region" : "안동문화예술의전당",
812 - "phone_num" : "054-840-3600",
813 - "charge" : "빈칸",
814 - "age" : "초등학생이상",
815 - "homepage" : "www.andongart.go.kr",
816 - "parking" : "Y",
817 - "where" : "경상북도 안동시 축제장길 66",
818 - "latitude" : 36.5594096,
819 - "longitude" : 128.7250766
820 - },
821 - {
822 - "id" : 40,
823 - "oper_name" : "2020 우수창작활동지원사업 연극 ''두 가족 이야기''",
824 - "oper_place" : "청주예술의전당",
825 - "description" : "공연",
826 - "start_day" : "2020/12/24",
827 - "end_day" : "2020/12/27",
828 - "start_time" : "13:00",
829 - "end_time" : "18:00",
830 - "is_free" : "무료",
831 - "sponser" : "극단청사",
832 - "spon_region" : "극단청사",
833 - "phone_num" : "빈칸",
834 - "charge" : "빈칸",
835 - "age" : "빈칸",
836 - "homepage" : "빈칸",
837 - "parking" : "Y",
838 - "where" : "충청북도 청주시 서원구 흥덕로 69",
839 - "latitude" : 36.64209999,
840 - "longitude" : 127.469668
841 - },
842 - {
843 - "id" : 41,
844 - "oper_name" : "연극 ''러브액츄얼리''",
845 - "oper_place" : "청주예술의전당",
846 - "description" : "대중공연",
847 - "start_day" : "2020/12/24",
848 - "end_day" : "2020/12/27",
849 - "start_time" : "19:00",
850 - "end_time" : "21:00",
851 - "is_free" : "유료",
852 - "sponser" : "(주)플레이더부산",
853 - "spon_region" : "(주)플레이더부산",
854 - "phone_num" : "빈칸",
855 - "charge" : "빈칸",
856 - "age" : "빈칸",
857 - "homepage" : "빈칸",
858 - "parking" : "Y",
859 - "where" : "충청북도 청주시 서원구 흥덕로 69",
860 - "latitude" : 36.64209999,
861 - "longitude" : 127.469668
862 - },
863 - {
864 - "id" : 42,
865 - "oper_name" : "스페셜 와인 콘서트",
866 - "oper_place" : "백조홀",
867 - "description" : "클래식",
868 - "start_day" : "2020/12/23",
869 - "end_day" : "2020/12/23",
870 - "start_time" : "19:30",
871 - "end_time" : "21:30",
872 - "is_free" : "유료",
873 - "sponser" : "안동문화예술의전당",
874 - "spon_region" : "안동문화예술의전당",
875 - "phone_num" : "054-840-3600",
876 - "charge" : "3만원",
877 - "age" : "5세이상",
878 - "homepage" : "www.andongart.go.kr",
879 - "parking" : "Y",
880 - "where" : "경상북도 안동시 축제장길 66",
881 - "latitude" : 36.5594096,
882 - "longitude" : 128.7250766
883 - },
884 - {
885 - "id" : 43,
886 - "oper_name" : "문화가있는날",
887 - "oper_place" : "정읍시립중앙도서관",
888 - "description" : "송년음악회",
889 - "start_day" : "2020/12/23",
890 - "end_day" : "2020/12/23",
891 - "start_time" : "17:00",
892 - "end_time" : "18:00",
893 - "is_free" : "무료",
894 - "sponser" : "정읍시립중앙도서관",
895 - "spon_region" : "정읍시",
896 - "phone_num" : "063-539-6435",
897 - "charge" : "무료",
898 - "age" : "전시민",
899 - "homepage" : "https://lib.jeongeup.go.kr/",
900 - "parking" : "Y",
901 - "where" : "전라북도 정읍시 벚꽃로 511",
902 - "latitude" : 35.557377,
903 - "longitude" : 126.8669738
904 - },
905 - {
906 - "id" : 44,
907 - "oper_name" : "지구를 지켜라",
908 - "oper_place" : "청주아트홀",
909 - "description" : "공연",
910 - "start_day" : "2020/12/23",
911 - "end_day" : "2020/12/27",
912 - "start_time" : "19:00",
913 - "end_time" : "21:00",
914 - "is_free" : "유료",
915 - "sponser" : "극단 늘품",
916 - "spon_region" : "극단 늘품",
917 - "phone_num" : "빈칸",
918 - "charge" : "빈칸",
919 - "age" : "빈칸",
920 - "homepage" : "빈칸",
921 - "parking" : "Y",
922 - "where" : "충청북도 청주시 서원구 예체로 118-1",
923 - "latitude" : 36.636924,
924 - "longitude" : 127.469428
925 - },
926 - {
927 - "id" : 45,
928 - "oper_name" : "송년음악회",
929 - "oper_place" : "청주예술의전당",
930 - "description" : "공연",
931 - "start_day" : "2020/12/23",
932 - "end_day" : "2020/12/23",
933 - "start_time" : "19:00",
934 - "end_time" : "21:00",
935 - "is_free" : "무료",
936 - "sponser" : "충북도립교향악단",
937 - "spon_region" : "충북도립교향악단",
938 - "phone_num" : "빈칸",
939 - "charge" : "빈칸",
940 - "age" : "빈칸",
941 - "homepage" : "빈칸",
942 - "parking" : "Y",
943 - "where" : "충청북도 청주시 서원구 흥덕로 69",
944 - "latitude" : 36.64209999,
945 - "longitude" : 127.469668
946 - },
947 - {
948 - "id" : 46,
949 - "oper_name" : "홍지민&박완 찬란한 콘서트",
950 - "oper_place" : "영도문화예술회관 대공연장",
951 - "description" : "뮤지컬",
952 - "start_day" : "2020/12/22",
953 - "end_day" : "2020/12/22",
954 - "start_time" : "19:30",
955 - "end_time" : "21:00",
956 - "is_free" : "무료",
957 - "sponser" : "영도구청",
958 - "spon_region" : "영도문화예술회관",
959 - "phone_num" : "051-419-5571",
960 - "charge" : "일반5만원",
961 - "age" : "8세이상",
962 - "homepage" : "http://www.yeongdo.go.kr/culture.web",
963 - "parking" : "Y",
964 - "where" : "부산광역시 영도구 함지로79번길 6",
965 - "latitude" : 35.075268,
966 - "longitude" : 129.066862
967 - },
968 - {
969 - "id" : 47,
970 - "oper_name" : "2020 (사)한국서예협회 경상북도 초대작가전",
971 - "oper_place" : "전관",
972 - "description" : "서예",
973 - "start_day" : "2020/12/22",
974 - "end_day" : "2020/12/27",
975 - "start_time" : "10:00",
976 - "end_time" : "19:00",
977 - "is_free" : "무료",
978 - "sponser" : "(사)한국서예협회 경상북도지회",
979 - "spon_region" : "(사)한국서예협회 경상북도지회",
980 - "phone_num" : "054-859-8886",
981 - "charge" : "무료",
982 - "age" : "전연령",
983 - "homepage" : "www.andongart.go.kr",
984 - "parking" : "Y",
985 - "where" : "경상북도 안동시 축제장길 66",
986 - "latitude" : 36.5594096,
987 - "longitude" : 128.7250766
988 - },
989 - {
990 - "id" : 48,
991 - "oper_name" : "11시 브런치 콘서트",
992 - "oper_place" : "금정문화회관 소공연장",
993 - "description" : "댄싱 클래식",
994 - "start_day" : "2020/12/22",
995 - "end_day" : "2020/12/22",
996 - "start_time" : "11:00",
997 - "end_time" : "12:20",
998 - "is_free" : "유료",
999 - "sponser" : "금정문화회관",
1000 - "spon_region" : "금정문화회관",
1001 - "phone_num" : "051-519-5661",
1002 - "charge" : "1만5천원",
1003 - "age" : "초등학생 이상",
1004 - "homepage" : "http://art.geumjeong.go.kr/",
1005 - "parking" : "Y",
1006 - "where" : "부산광역시 금정구 체육공원로 7(구서동)",
1007 - "latitude" : 35.24591888,
1008 - "longitude" : 129.094474
1009 - },
1010 - {
1011 - "id" : 49,
1012 - "oper_name" : "제8회 SY chum Company 정기공연",
1013 - "oper_place" : "청주예술의전당",
1014 - "description" : "무용",
1015 - "start_day" : "2020/12/22",
1016 - "end_day" : "2020/12/22",
1017 - "start_time" : "19:00",
1018 - "end_time" : "21:00",
1019 - "is_free" : "무료",
1020 - "sponser" : "SY chum Company",
1021 - "spon_region" : "SY chum Company",
1022 - "phone_num" : "빈칸",
1023 - "charge" : "빈칸",
1024 - "age" : "빈칸",
1025 - "homepage" : "빈칸",
1026 - "parking" : "Y",
1027 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1028 - "latitude" : 36.64209999,
1029 - "longitude" : 127.469668
1030 - },
1031 - {
1032 - "id" : 50,
1033 - "oper_name" : "제4회 아르떼플루트오케스트라 정기연주회",
1034 - "oper_place" : "청주아트홀",
1035 - "description" : "음악",
1036 - "start_day" : "2020/12/22",
1037 - "end_day" : "2020/12/22",
1038 - "start_time" : "19:00",
1039 - "end_time" : "21:00",
1040 - "is_free" : "무료",
1041 - "sponser" : "아르데플루트오케스트라",
1042 - "spon_region" : "아르데플루트오케스트라",
1043 - "phone_num" : "빈칸",
1044 - "charge" : "빈칸",
1045 - "age" : "빈칸",
1046 - "homepage" : "빈칸",
1047 - "parking" : "Y",
1048 - "where" : "충청북도 청주시 서원구 예체로 118-1",
1049 - "latitude" : 36.636924,
1050 - "longitude" : 127.469428
1051 - },
1052 - {
1053 - "id" : 51,
1054 - "oper_name" : "체코소년합창단 보니푸에라 내한 청주공연",
1055 - "oper_place" : "청주예술의전당",
1056 - "description" : "공연",
1057 - "start_day" : "2020/12/22",
1058 - "end_day" : "2020/12/22",
1059 - "start_time" : "19:00",
1060 - "end_time" : "21:00",
1061 - "is_free" : "무료",
1062 - "sponser" : "문화예술기획CHO",
1063 - "spon_region" : "문화예술기획CHO",
1064 - "phone_num" : "빈칸",
1065 - "charge" : "빈칸",
1066 - "age" : "빈칸",
1067 - "homepage" : "빈칸",
1068 - "parking" : "Y",
1069 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1070 - "latitude" : 36.64209999,
1071 - "longitude" : 127.469668
1072 - },
1073 - {
1074 - "id" : 52,
1075 - "oper_name" : "제5회 크리스마스 페스티벌",
1076 - "oper_place" : "영도어린이영어도서관",
1077 - "description" : "크리스마스 주제 도서 전시 및 포토존 운영 등",
1078 - "start_day" : "2020/12/20",
1079 - "end_day" : "2020/12/20",
1080 - "start_time" : "9:00",
1081 - "end_time" : "18:00",
1082 - "is_free" : "무료",
1083 - "sponser" : "영도구청",
1084 - "spon_region" : "영도도서관",
1085 - "phone_num" : "051-419-5672",
1086 - "charge" : "무료",
1087 - "age" : "제한없음",
1088 - "homepage" : "http://www.yeongdo.go.kr/library.web",
1089 - "parking" : "Y",
1090 - "where" : "부산광역시 영도구 절영로71",
1091 - "latitude" : 35.08855631,
1092 - "longitude" : 129.0390522
1093 - },
1094 - {
1095 - "id" : 53,
1096 - "oper_name" : "영화상영",
1097 - "oper_place" : "정읍기적의도서관",
1098 - "description" : "영화상영",
1099 - "start_day" : "2020/12/20",
1100 - "end_day" : "2020/12/20",
1101 - "start_time" : "15:00",
1102 - "end_time" : "16:00",
1103 - "is_free" : "무료",
1104 - "sponser" : "정읍기적의도서관",
1105 - "spon_region" : "정읍시",
1106 - "phone_num" : "063-539-6453",
1107 - "charge" : "무료",
1108 - "age" : "전시민",
1109 - "homepage" : "https://lib.jeongeup.go.kr/",
1110 - "parking" : "Y",
1111 - "where" : "전라북도 정읍시 수성5로 45-5",
1112 - "latitude" : 35.58427178,
1113 - "longitude" : 126.8606536
1114 - },
1115 - {
1116 - "id" : 54,
1117 - "oper_name" : "2020 송년음악회",
1118 - "oper_place" : "청주아트홀",
1119 - "description" : "공연",
1120 - "start_day" : "2020/12/20",
1121 - "end_day" : "2020/12/20",
1122 - "start_time" : "19:00",
1123 - "end_time" : "21:00",
1124 - "is_free" : "무료",
1125 - "sponser" : "충북음악협회",
1126 - "spon_region" : "충북음악협회",
1127 - "phone_num" : "빈칸",
1128 - "charge" : "빈칸",
1129 - "age" : "빈칸",
1130 - "homepage" : "빈칸",
1131 - "parking" : "Y",
1132 - "where" : "충청북도 청주시 서원구 예체로 118-1",
1133 - "latitude" : 36.636924,
1134 - "longitude" : 127.469428
1135 - },
1136 - {
1137 - "id" : 55,
1138 - "oper_name" : "2020 시군 특화지원사업 연극 ''노적활자''",
1139 - "oper_place" : "청주예술의전당",
1140 - "description" : "공연",
1141 - "start_day" : "2020/12/19",
1142 - "end_day" : "2020/12/20",
1143 - "start_time" : "13:00",
1144 - "end_time" : "21:00",
1145 - "is_free" : "무료",
1146 - "sponser" : "극단청사",
1147 - "spon_region" : "극단청사",
1148 - "phone_num" : "빈칸",
1149 - "charge" : "빈칸",
1150 - "age" : "빈칸",
1151 - "homepage" : "빈칸",
1152 - "parking" : "Y",
1153 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1154 - "latitude" : 36.64209999,
1155 - "longitude" : 127.469668
1156 - },
1157 - {
1158 - "id" : 56,
1159 - "oper_name" : "용암숙명바가노바발레무용학원 정기발표회",
1160 - "oper_place" : "청주아트홀",
1161 - "description" : "공연",
1162 - "start_day" : "2020/12/19",
1163 - "end_day" : "2020/12/19",
1164 - "start_time" : "19:00",
1165 - "end_time" : "21:00",
1166 - "is_free" : "무료",
1167 - "sponser" : "용암숙명바가노바발레무용학원",
1168 - "spon_region" : "용암숙명바가노바발레무용학원",
1169 - "phone_num" : "빈칸",
1170 - "charge" : "빈칸",
1171 - "age" : "빈칸",
1172 - "homepage" : "빈칸",
1173 - "parking" : "Y",
1174 - "where" : "충청북도 청주시 서원구 예체로 118-1",
1175 - "latitude" : 36.636924,
1176 - "longitude" : 127.469428
1177 - },
1178 - {
1179 - "id" : 57,
1180 - "oper_name" : "Dance and the music",
1181 - "oper_place" : "싸리재홀",
1182 - "description" : "음악",
1183 - "start_day" : "2020/12/18",
1184 - "end_day" : "2020/12/18",
1185 - "start_time" : "19:00",
1186 - "end_time" : "20:30",
1187 - "is_free" : "유료",
1188 - "sponser" : "인천광역시교육청학생교육문화회관",
1189 - "spon_region" : "인천광역시교육청학생교육문화회관",
1190 - "phone_num" : "032-760-3400",
1191 - "charge" : "6000원",
1192 - "age" : "초등",
1193 - "homepage" : "www.iecs.go.kr/",
1194 - "parking" : "Y",
1195 - "where" : "인천광역시중구자유공원로12(인현동)",
1196 - "latitude" : 37.47571123,
1197 - "longitude" : 126.6296707
1198 - },
1199 - {
1200 - "id" : 58,
1201 - "oper_name" : "2020 송년음악회",
1202 - "oper_place" : "대구학생문화센터 대공연장",
1203 - "description" : "콘서트",
1204 - "start_day" : "2020/12/18",
1205 - "end_day" : "2020/12/18",
1206 - "start_time" : "19:30",
1207 - "end_time" : "21:00",
1208 - "is_free" : "무료",
1209 - "sponser" : "대구학생문화센터",
1210 - "spon_region" : "대구학생문화센터",
1211 - "phone_num" : "053-231-1333",
1212 - "charge" : "0",
1213 - "age" : "8세이상",
1214 - "homepage" : "www.dccs.go.kr",
1215 - "parking" : "Y",
1216 - "where" : "대구광역시 달서구 용산로 181",
1217 - "latitude" : 35.8530244,
1218 - "longitude" : 128.5295222
1219 - },
1220 - {
1221 - "id" : 59,
1222 - "oper_name" : "영도구 소년소녀합창단 정기연주회",
1223 - "oper_place" : "영도문화예술회관 대공연장",
1224 - "description" : "정기연주회",
1225 - "start_day" : "2020/12/18",
1226 - "end_day" : "2020/12/18",
1227 - "start_time" : "19:30",
1228 - "end_time" : "21:00",
1229 - "is_free" : "무료",
1230 - "sponser" : "영도구청",
1231 - "spon_region" : "영도문화예술회관",
1232 - "phone_num" : "051-419-5562",
1233 - "charge" : "무료",
1234 - "age" : "제한없음",
1235 - "homepage" : "http://www.yeongdo.go.kr/culture.web",
1236 - "parking" : "Y",
1237 - "where" : "부산광역시 영도구 함지로79번길 6",
1238 - "latitude" : 35.075268,
1239 - "longitude" : 129.066862
1240 - },
1241 - {
1242 - "id" : 60,
1243 - "oper_name" : "제2회 고운소리합창단 정기합창연주회",
1244 - "oper_place" : "청주아트홀",
1245 - "description" : "음악",
1246 - "start_day" : "2020/12/18",
1247 - "end_day" : "2020/12/18",
1248 - "start_time" : "19:00",
1249 - "end_time" : "21:00",
1250 - "is_free" : "무료",
1251 - "sponser" : "고운소리합창단",
1252 - "spon_region" : "고운소리합창단",
1253 - "phone_num" : "빈칸",
1254 - "charge" : "빈칸",
1255 - "age" : "빈칸",
1256 - "homepage" : "빈칸",
1257 - "parking" : "Y",
1258 - "where" : "충청북도 청주시 서원구 예체로 118-1",
1259 - "latitude" : 36.636924,
1260 - "longitude" : 127.469428
1261 - },
1262 - {
1263 - "id" : 61,
1264 - "oper_name" : "어린이 대상 영양, 위생 뮤지컬",
1265 - "oper_place" : "청주예술의전당",
1266 - "description" : "공연",
1267 - "start_day" : "2020/12/18",
1268 - "end_day" : "2020/12/18",
1269 - "start_time" : "10:00",
1270 - "end_time" : "15:00",
1271 - "is_free" : "무료",
1272 - "sponser" : "청주시흥덕청원어린급식관리지원센터",
1273 - "spon_region" : "청주시흥덕청원어린급식관리지원센터",
1274 - "phone_num" : "빈칸",
1275 - "charge" : "빈칸",
1276 - "age" : "빈칸",
1277 - "homepage" : "빈칸",
1278 - "parking" : "Y",
1279 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1280 - "latitude" : 36.64209999,
1281 - "longitude" : 127.469668
1282 - },
1283 - {
1284 - "id" : 62,
1285 - "oper_name" : "군산시립교향악단 제138회 정기연주회",
1286 - "oper_place" : "군산예술의전당대공연장",
1287 - "description" : "클래식",
1288 - "start_day" : "2020/12/17",
1289 - "end_day" : "2020/12/17",
1290 - "start_time" : "19:30",
1291 - "end_time" : "21:00",
1292 - "is_free" : "무료",
1293 - "sponser" : "군산예술의전당",
1294 - "spon_region" : "전라북도 군산시청",
1295 - "phone_num" : "063-454-5528",
1296 - "charge" : "무료",
1297 - "age" : "초등생이상 관람가",
1298 - "homepage" : "http://arts.gunsan.go.kr/index.gunsan",
1299 - "parking" : "Y",
1300 - "where" : "전라북도 군산시 백토로203, (지곡동)",
1301 - "latitude" : 35.96078244,
1302 - "longitude" : 126.7070385
1303 - },
1304 - {
1305 - "id" : 63,
1306 - "oper_name" : "제5회 크리스마스 페스티벌",
1307 - "oper_place" : "영도어린이영어도서관",
1308 - "description" : "크리스마스 테마도서 전시, 포토존 운영, 공연 등",
1309 - "start_day" : "2020/12/17",
1310 - "end_day" : "2020/12/24",
1311 - "start_time" : "9:00",
1312 - "end_time" : "18:00",
1313 - "is_free" : "무료",
1314 - "sponser" : "영도구청",
1315 - "spon_region" : "영도도서관",
1316 - "phone_num" : "051-419-5674",
1317 - "charge" : "무료",
1318 - "age" : "제한없음",
1319 - "homepage" : "http://www.yeongdo.go.kr/library.web",
1320 - "parking" : "Y",
1321 - "where" : "부산광역시 영도구 절영로71",
1322 - "latitude" : 35.08855631,
1323 - "longitude" : 129.0390522
1324 - },
1325 - {
1326 - "id" : 64,
1327 - "oper_name" : "복병연 플루트 리사이틀 ''In paris''",
1328 - "oper_place" : "청주아트홀",
1329 - "description" : "순수공연",
1330 - "start_day" : "2020/12/17",
1331 - "end_day" : "2020/12/17",
1332 - "start_time" : "19:00",
1333 - "end_time" : "21:00",
1334 - "is_free" : "무료",
1335 - "sponser" : "복병연",
1336 - "spon_region" : "복병연",
1337 - "phone_num" : "빈칸",
1338 - "charge" : "빈칸",
1339 - "age" : "빈칸",
1340 - "homepage" : "빈칸",
1341 - "parking" : "Y",
1342 - "where" : "충청북도 청주시 서원구 예체로 118-1",
1343 - "latitude" : 36.636924,
1344 - "longitude" : 127.469428
1345 - },
1346 - {
1347 - "id" : 65,
1348 - "oper_name" : "춘천시립예술단 2020 송년음악회",
1349 - "oper_place" : "한림대일송아트홀(예정)",
1350 - "description" : "춘천시립예술단 송년음악회",
1351 - "start_day" : "2020/12/17",
1352 - "end_day" : "2020/12/17",
1353 - "start_time" : "19:30",
1354 - "end_time" : "21:30",
1355 - "is_free" : "무료",
1356 - "sponser" : "춘천시립예술단",
1357 - "spon_region" : "춘천시+춘천문화재단",
1358 - "phone_num" : "033-259-5869",
1359 - "charge" : "빈칸",
1360 - "age" : "만 7세 이상 입장가능",
1361 - "homepage" : "http://www.cccf.or.kr",
1362 - "parking" : "Y",
1363 - "where" : "강원도 춘천시 한림대학길 1",
1364 - "latitude" : 37.88542721,
1365 - "longitude" : 127.734959
1366 - },
1367 - {
1368 - "id" : 66,
1369 - "oper_name" : "영도명화극장",
1370 - "oper_place" : "영도문화예술회관 소공연장",
1371 - "description" : "영화",
1372 - "start_day" : "2020/12/16",
1373 - "end_day" : "2020/12/16",
1374 - "start_time" : "19:00",
1375 - "end_time" : "21:00",
1376 - "is_free" : "무료",
1377 - "sponser" : "영도구청",
1378 - "spon_region" : "영도문화예술회관",
1379 - "phone_num" : "051-419-5571",
1380 - "charge" : "무료",
1381 - "age" : "8세이상",
1382 - "homepage" : "http://www.yeongdo.go.kr/culture.web",
1383 - "parking" : "Y",
1384 - "where" : "부산광역시 영도구 함지로79번길 6",
1385 - "latitude" : 35.075268,
1386 - "longitude" : 129.066862
1387 - },
1388 - {
1389 - "id" : 67,
1390 - "oper_name" : "메디컬 콘서트",
1391 - "oper_place" : "백조홀",
1392 - "description" : "복합",
1393 - "start_day" : "2020/12/16",
1394 - "end_day" : "2020/12/16",
1395 - "start_time" : "19:30",
1396 - "end_time" : "20:50",
1397 - "is_free" : "유료",
1398 - "sponser" : "안동문화예술의전당",
1399 - "spon_region" : "안동문화예술의전당",
1400 - "phone_num" : "054-840-3600",
1401 - "charge" : "빈칸",
1402 - "age" : "5세이상",
1403 - "homepage" : "www.andongart.go.kr",
1404 - "parking" : "Y",
1405 - "where" : "경상북도 안동시 축제장길 66",
1406 - "latitude" : 36.5594096,
1407 - "longitude" : 128.7250766
1408 - },
1409 - {
1410 - "id" : 68,
1411 - "oper_name" : "원주시립예술단 정기연주회",
1412 - "oper_place" : "원주백운아트홀",
1413 - "description" : "클래식 연주회",
1414 - "start_day" : "2020/12/16",
1415 - "end_day" : "2020/12/16",
1416 - "start_time" : "19:30",
1417 - "end_time" : "21:30",
1418 - "is_free" : "유료",
1419 - "sponser" : "원주시립예술단",
1420 - "spon_region" : "원주시 문화예술과",
1421 - "phone_num" : "033-766-0067",
1422 - "charge" : "성인5000원+학생3천원",
1423 - "age" : "8세이상",
1424 - "homepage" : "www.arts.wonju.go.kr",
1425 - "parking" : "Y",
1426 - "where" : "강원도 원주시 시청로1 (무실동)",
1427 - "latitude" : 37.34192499,
1428 - "longitude" : 127.9197228
1429 - },
1430 - {
1431 - "id" : 69,
1432 - "oper_name" : "2020상주단체육성지원사업 미래필하모니오케스트라 제17회 정기연주회",
1433 - "oper_place" : "영도문화예술회관 대공연장",
1434 - "description" : "공연",
1435 - "start_day" : "2020/12/15",
1436 - "end_day" : "2020/12/15",
1437 - "start_time" : "19:30",
1438 - "end_time" : "21:00",
1439 - "is_free" : "무료",
1440 - "sponser" : "영도구청",
1441 - "spon_region" : "영도문화예술회관",
1442 - "phone_num" : "051-419-5571",
1443 - "charge" : "일반2만원",
1444 - "age" : "8세이상",
1445 - "homepage" : "http://www.yeongdo.go.kr/culture.web",
1446 - "parking" : "Y",
1447 - "where" : "부산광역시 영도구 함지로79번길 6",
1448 - "latitude" : 35.075268,
1449 - "longitude" : 129.066862
1450 - },
1451 - {
1452 - "id" : 70,
1453 - "oper_name" : "제39회 국립 안동대학교 미술학과 졸업작품전",
1454 - "oper_place" : "전관",
1455 - "description" : "종합",
1456 - "start_day" : "2020/12/15",
1457 - "end_day" : "2020/12/20",
1458 - "start_time" : "10:00",
1459 - "end_time" : "19:00",
1460 - "is_free" : "무료",
1461 - "sponser" : "안동대학교 미술학과",
1462 - "spon_region" : "안동대학교 미술학과",
1463 - "phone_num" : "054-820-5560",
1464 - "charge" : "무료",
1465 - "age" : "전연령",
1466 - "homepage" : "www.andongart.go.kr",
1467 - "parking" : "Y",
1468 - "where" : "경상북도 안동시 축제장길 66",
1469 - "latitude" : 36.5594096,
1470 - "longitude" : 128.7250766
1471 - },
1472 - {
1473 - "id" : 71,
1474 - "oper_name" : "제5회 2020 청소년페스티벌",
1475 - "oper_place" : "청주예술의전당",
1476 - "description" : "공연",
1477 - "start_day" : "2020/12/15",
1478 - "end_day" : "2020/12/15",
1479 - "start_time" : "10:00",
1480 - "end_time" : "18:00",
1481 - "is_free" : "무료",
1482 - "sponser" : "청주시기독교연합회",
1483 - "spon_region" : "청주시기독교연합회",
1484 - "phone_num" : "빈칸",
1485 - "charge" : "빈칸",
1486 - "age" : "빈칸",
1487 - "homepage" : "빈칸",
1488 - "parking" : "Y",
1489 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1490 - "latitude" : 36.64209999,
1491 - "longitude" : 127.469668
1492 - },
1493 - {
1494 - "id" : 72,
1495 - "oper_name" : "코믹연극 ''죽여주는 이야기''",
1496 - "oper_place" : "청주아트홀",
1497 - "description" : "공연",
1498 - "start_day" : "2020/12/15",
1499 - "end_day" : "2020/12/16",
1500 - "start_time" : "19:00",
1501 - "end_time" : "21:00",
1502 - "is_free" : "유료",
1503 - "sponser" : "극단 가게",
1504 - "spon_region" : "극단 가게",
1505 - "phone_num" : "빈칸",
1506 - "charge" : "빈칸",
1507 - "age" : "빈칸",
1508 - "homepage" : "빈칸",
1509 - "parking" : "Y",
1510 - "where" : "충청북도 청주시 서원구 예체로 118-1",
1511 - "latitude" : 36.636924,
1512 - "longitude" : 127.469428
1513 - },
1514 - {
1515 - "id" : 73,
1516 - "oper_name" : "국립발레단 호두까기인형",
1517 - "oper_place" : "수성아트피아 용지홀",
1518 - "description" : "발레",
1519 - "start_day" : "2020/12/14",
1520 - "end_day" : "2020/12/15",
1521 - "start_time" : "19:30",
1522 - "end_time" : "21:30",
1523 - "is_free" : "유료",
1524 - "sponser" : "수성아트피아",
1525 - "spon_region" : "수성아트피아",
1526 - "phone_num" : "053-668-1800",
1527 - "charge" : "빈칸",
1528 - "age" : "빈칸",
1529 - "homepage" : "http://www.ssartpia.kr",
1530 - "parking" : "Y",
1531 - "where" : "대구광역시 수성구 무학로 180",
1532 - "latitude" : 35.82928349,
1533 - "longitude" : 128.6282735
1534 - },
1535 - {
1536 - "id" : 74,
1537 - "oper_name" : "어린이뮤지컬 ''렛잇고2''",
1538 - "oper_place" : "청주예술의전당",
1539 - "description" : "공연",
1540 - "start_day" : "2020/12/13",
1541 - "end_day" : "2020/12/13",
1542 - "start_time" : "10:00",
1543 - "end_time" : "16:00",
1544 - "is_free" : "유료",
1545 - "sponser" : "극단예일",
1546 - "spon_region" : "극단예일",
1547 - "phone_num" : "빈칸",
1548 - "charge" : "빈칸",
1549 - "age" : "빈칸",
1550 - "homepage" : "빈칸",
1551 - "parking" : "Y",
1552 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1553 - "latitude" : 36.64209999,
1554 - "longitude" : 127.469668
1555 - },
1556 - {
1557 - "id" : 75,
1558 - "oper_name" : "뮤지컬 ''호두까기 인형''",
1559 - "oper_place" : "청주예술의전당",
1560 - "description" : "뮤지컬",
1561 - "start_day" : "2020/12/13",
1562 - "end_day" : "2020/12/13",
1563 - "start_time" : "19:00",
1564 - "end_time" : "21:00",
1565 - "is_free" : "유료",
1566 - "sponser" : "진엔터컴",
1567 - "spon_region" : "진엔터컴",
1568 - "phone_num" : "빈칸",
1569 - "charge" : "빈칸",
1570 - "age" : "빈칸",
1571 - "homepage" : "빈칸",
1572 - "parking" : "Y",
1573 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1574 - "latitude" : 36.64209999,
1575 - "longitude" : 127.469668
1576 - },
1577 - {
1578 - "id" : 76,
1579 - "oper_name" : "송년콘서트",
1580 - "oper_place" : "군산예술의전당 대공연장",
1581 - "description" : "콘서트",
1582 - "start_day" : "2020/12/12",
1583 - "end_day" : "2020/12/12",
1584 - "start_time" : "19:30",
1585 - "end_time" : "21:00",
1586 - "is_free" : "유료",
1587 - "sponser" : "군산예술의전당",
1588 - "spon_region" : "전라북도 군산시청",
1589 - "phone_num" : "063-454-5535",
1590 - "charge" : "유료",
1591 - "age" : "초등생이상관람가",
1592 - "homepage" : "http://arts.gunsan.go.kr/index.gunsan",
1593 - "parking" : "Y",
1594 - "where" : "전라북도 군산시 백토로203, (지곡동)",
1595 - "latitude" : 35.96078244,
1596 - "longitude" : 126.7070385
1597 - },
1598 - {
1599 - "id" : 77,
1600 - "oper_name" : "진주국제재즈페스티벌",
1601 - "oper_place" : "경남문화예술회관",
1602 - "description" : "국내외 재즈공연, 아트마켓, 재즈갤러리 등",
1603 - "start_day" : "2020/12/12",
1604 - "end_day" : "2020/12/12",
1605 - "start_time" : "19:30",
1606 - "end_time" : "21:30",
1607 - "is_free" : "유료",
1608 - "sponser" : "경남문화예술진흥원,진주국제재즈페스티벌추진위원회",
1609 - "spon_region" : "한국문화예술위원회,한국메세나협회",
1610 - "phone_num" : "빈칸",
1611 - "charge" : "책정중",
1612 - "age" : "제한없음",
1613 - "homepage" : "http://www.jinjujazz.com",
1614 - "parking" : "Y",
1615 - "where" : "경상남도 진주시 강남로 215",
1616 - "latitude" : 35.18727536,
1617 - "longitude" : 128.0917424
1618 - },
1619 - {
1620 - "id" : 78,
1621 - "oper_name" : "청주콘서트윈드오케스트라 제30회 정기연주회",
1622 - "oper_place" : "청주예술의전당",
1623 - "description" : "공연",
1624 - "start_day" : "2020/12/12",
1625 - "end_day" : "2020/12/12",
1626 - "start_time" : "19:00",
1627 - "end_time" : "21:00",
1628 - "is_free" : "무료",
1629 - "sponser" : "청주콘서트 윈드오케스트라",
1630 - "spon_region" : "청주콘서트 윈드오케스트라",
1631 - "phone_num" : "빈칸",
1632 - "charge" : "빈칸",
1633 - "age" : "빈칸",
1634 - "homepage" : "빈칸",
1635 - "parking" : "Y",
1636 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1637 - "latitude" : 36.64209999,
1638 - "longitude" : 127.469668
1639 - },
1640 - {
1641 - "id" : 79,
1642 - "oper_name" : "아리솔이 베토벤을 만나다",
1643 - "oper_place" : "청주예술의전당",
1644 - "description" : "공연",
1645 - "start_day" : "2020/12/12",
1646 - "end_day" : "2020/12/12",
1647 - "start_time" : "19:00",
1648 - "end_time" : "21:00",
1649 - "is_free" : "유료",
1650 - "sponser" : "아리솔",
1651 - "spon_region" : "아리솔",
1652 - "phone_num" : "빈칸",
1653 - "charge" : "빈칸",
1654 - "age" : "빈칸",
1655 - "homepage" : "빈칸",
1656 - "parking" : "Y",
1657 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1658 - "latitude" : 36.64209999,
1659 - "longitude" : 127.469668
1660 - },
1661 - {
1662 - "id" : 80,
1663 - "oper_name" : "국제탈공연예술촌 12월정기공연",
1664 - "oper_place" : "남해국제탈공연예술촌",
1665 - "description" : "연극실험실 늘 연극 공연 우주인 생존기",
1666 - "start_day" : "2020/12/12",
1667 - "end_day" : "2020/12/13",
1668 - "start_time" : "14:00",
1669 - "end_time" : "15:00",
1670 - "is_free" : "유료",
1671 - "sponser" : "경상남도 남해군",
1672 - "spon_region" : "남해국제탈공연예술촌",
1673 - "phone_num" : "055-860-3790",
1674 - "charge" : "성인 3,000원+청소년 2,000원+어린이 1,000원",
1675 - "age" : "12세 이상",
1676 - "homepage" : "http://tour.namhae.go.kr/00002875/00003544/00002878.web",
1677 - "parking" : "Y",
1678 - "where" : "경상남도 남해군 이동면 남해대로 2412",
1679 - "latitude" : 34.81773051,
1680 - "longitude" : 127.927175
1681 - },
1682 - {
1683 - "id" : 81,
1684 - "oper_name" : "윤봉길의사 창작뮤지컬 '워치'",
1685 - "oper_place" : "예산군 문예회관",
1686 - "description" : "뮤지컬공연",
1687 - "start_day" : "2020/12/11",
1688 - "end_day" : "2020/11/12",
1689 - "start_time" : "9:00",
1690 - "end_time" : "18:00",
1691 - "is_free" : "무료",
1692 - "sponser" : "(재)충남문화재단",
1693 - "spon_region" : "충청남도, 예산군",
1694 - "phone_num" : "빈칸",
1695 - "charge" : "무료",
1696 - "age" : "전군민",
1697 - "homepage" : "빈칸",
1698 - "parking" : "Y",
1699 - "where" : "충청남도 예산군 예산읍 아리랑로 185-14",
1700 - "latitude" : 36.68548186,
1701 - "longitude" : 126.8491782
1702 - },
1703 - {
1704 - "id" : 82,
1705 - "oper_name" : "2020 송년 콘서트",
1706 - "oper_place" : "서천문예의 전당 대강당",
1707 - "description" : "서천군민을 위한 송년음악회",
1708 - "start_day" : "2020/12/11",
1709 - "end_day" : "2020/12/11",
1710 - "start_time" : "18:20",
1711 - "end_time" : "21:00",
1712 - "is_free" : "무료",
1713 - "sponser" : "서천군",
1714 - "spon_region" : "서천군",
1715 - "phone_num" : "빈칸",
1716 - "charge" : "빈칸",
1717 - "age" : "빈칸",
1718 - "homepage" : "빈칸",
1719 - "parking" : "Y",
1720 - "where" : "충청남도 서천군 서천읍 서천로14번길 20",
1721 - "latitude" : 36.07636677,
1722 - "longitude" : 126.6983685
1723 - },
1724 - {
1725 - "id" : 83,
1726 - "oper_name" : "절영아리랑 영도의 사계절을 노래하다 ''봉래산의 겨울이야기''",
1727 - "oper_place" : "영도문화예술회관 대공연장",
1728 - "description" : "공연",
1729 - "start_day" : "2020/12/11",
1730 - "end_day" : "2020/12/11",
1731 - "start_time" : "19:30",
1732 - "end_time" : "21:00",
1733 - "is_free" : "유료",
1734 - "sponser" : "영도구청",
1735 - "spon_region" : "영도문화예술회관",
1736 - "phone_num" : "051-419-5571",
1737 - "charge" : "일반1만원",
1738 - "age" : "8세이상",
1739 - "homepage" : "http://www.yeongdo.go.kr/culture.web",
1740 - "parking" : "Y",
1741 - "where" : "부산광역시 영도구 함지로79번길 6",
1742 - "latitude" : 35.075268,
1743 - "longitude" : 129.066862
1744 - },
1745 - {
1746 - "id" : 84,
1747 - "oper_name" : "제54회 숲속의 열린음악회 <송년음악회>",
1748 - "oper_place" : "동래문화회관 대극장",
1749 - "description" : "음악",
1750 - "start_day" : "2020/12/11",
1751 - "end_day" : "2020/12/11",
1752 - "start_time" : "19:30",
1753 - "end_time" : "21:30",
1754 - "is_free" : "유료",
1755 - "sponser" : "한국문화예술회관연합회",
1756 - "spon_region" : "동래문화회관",
1757 - "phone_num" : "051-550-6611",
1758 - "charge" : "미정",
1759 - "age" : "13세이상",
1760 - "homepage" : "http://www.dongnae.go.kr/culture",
1761 - "parking" : "Y",
1762 - "where" : "부산광역시 동래구 문화로 80 (명륜동)",
1763 - "latitude" : 35.21195193,
1764 - "longitude" : 129.0905499
1765 - },
1766 - {
1767 - "id" : 85,
1768 - "oper_name" : "뮤지컬배우 양준모와 함께하는 ''영화속에서 만나는 클래식''",
1769 - "oper_place" : "청주예술의전당",
1770 - "description" : "대중공연",
1771 - "start_day" : "2020/12/11",
1772 - "end_day" : "2020/12/11",
1773 - "start_time" : "19:00",
1774 - "end_time" : "21:00",
1775 - "is_free" : "무료",
1776 - "sponser" : "콘서트하우스",
1777 - "spon_region" : "콘서트하우스",
1778 - "phone_num" : "빈칸",
1779 - "charge" : "빈칸",
1780 - "age" : "빈칸",
1781 - "homepage" : "빈칸",
1782 - "parking" : "Y",
1783 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1784 - "latitude" : 36.64209999,
1785 - "longitude" : 127.469668
1786 - },
1787 - {
1788 - "id" : 86,
1789 - "oper_name" : "2020 송년음악회",
1790 - "oper_place" : "홍주문화회관 대공연장",
1791 - "description" : "음악",
1792 - "start_day" : "2020/12/11",
1793 - "end_day" : "2020/12/11",
1794 - "start_time" : "19:00",
1795 - "end_time" : "20:30",
1796 - "is_free" : "유료",
1797 - "sponser" : "홍성군역사문화시설관리사업소",
1798 - "spon_region" : "홍성군",
1799 - "phone_num" : "041-634-0021",
1800 - "charge" : "20,000원/10,000원",
1801 - "age" : "8세 이상",
1802 - "homepage" : "http://art.hongseung.go.kr",
1803 - "parking" : "Y",
1804 - "where" : "충청남도 홍성군 홍성읍 내포로 164",
1805 - "latitude" : 36.5947715,
1806 - "longitude" : 126.6518941
1807 - },
1808 - {
1809 - "id" : 87,
1810 - "oper_name" : "KBS교향악단",
1811 - "oper_place" : "웅부홀",
1812 - "description" : "클래식",
1813 - "start_day" : "2020/12/10",
1814 - "end_day" : "2020/12/10",
1815 - "start_time" : "19:30",
1816 - "end_time" : "21:00",
1817 - "is_free" : "유료",
1818 - "sponser" : "안동문화예술의전당",
1819 - "spon_region" : "안동문화예술의전당",
1820 - "phone_num" : "054-840-3600",
1821 - "charge" : "빈칸",
1822 - "age" : "초등학생이상",
1823 - "homepage" : "www.andongart.go.kr",
1824 - "parking" : "Y",
1825 - "where" : "경상북도 안동시 축제장길 66",
1826 - "latitude" : 36.5594096,
1827 - "longitude" : 128.7250766
1828 - },
1829 - {
1830 - "id" : 88,
1831 - "oper_name" : "루돌프와 산타클로스",
1832 - "oper_place" : "청주아트홀",
1833 - "description" : "공연",
1834 - "start_day" : "2020/12/10",
1835 - "end_day" : "2020/12/13",
1836 - "start_time" : "19:00",
1837 - "end_time" : "21:00",
1838 - "is_free" : "유료",
1839 - "sponser" : "동그라미그리기",
1840 - "spon_region" : "동그라미그리기",
1841 - "phone_num" : "빈칸",
1842 - "charge" : "빈칸",
1843 - "age" : "빈칸",
1844 - "homepage" : "빈칸",
1845 - "parking" : "Y",
1846 - "where" : "충청북도 청주시 서원구 예체로 118-1",
1847 - "latitude" : 36.636924,
1848 - "longitude" : 127.469428
1849 - },
1850 - {
1851 - "id" : 89,
1852 - "oper_name" : "2020 연극의 해 ''수험생을 위한 특별공연''",
1853 - "oper_place" : "청주예술의전당",
1854 - "description" : "공연",
1855 - "start_day" : "2020/12/10",
1856 - "end_day" : "2020/12/11",
1857 - "start_time" : "10:00",
1858 - "end_time" : "16:00",
1859 - "is_free" : "무료",
1860 - "sponser" : "(사)청주예총",
1861 - "spon_region" : "(사)청주예총",
1862 - "phone_num" : "빈칸",
1863 - "charge" : "빈칸",
1864 - "age" : "빈칸",
1865 - "homepage" : "빈칸",
1866 - "parking" : "Y",
1867 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1868 - "latitude" : 36.64209999,
1869 - "longitude" : 127.469668
1870 - },
1871 - {
1872 - "id" : 90,
1873 - "oper_name" : "원주시립합창단 제93회 정기연주회",
1874 - "oper_place" : "원주치악예술관",
1875 - "description" : "합창 공연",
1876 - "start_day" : "2020/12/10",
1877 - "end_day" : "2020/12/10",
1878 - "start_time" : "19:30",
1879 - "end_time" : "21:30",
1880 - "is_free" : "유료",
1881 - "sponser" : "원주시립합창단",
1882 - "spon_region" : "원주시",
1883 - "phone_num" : "033-766-6980",
1884 - "charge" : "성인5000원+학생3천원",
1885 - "age" : "8세이상",
1886 - "homepage" : "www.arts.wonju.go.kr",
1887 - "parking" : "Y",
1888 - "where" : "강원도 원주시 시청로1 (무실동)",
1889 - "latitude" : 37.34192499,
1890 - "longitude" : 127.9197228
1891 - },
1892 - {
1893 - "id" : 91,
1894 - "oper_name" : "<볼라레> 12월",
1895 - "oper_place" : "축제극장 몸짓",
1896 - "description" : "클래식",
1897 - "start_day" : "2020/12/10",
1898 - "end_day" : "2020/12/10",
1899 - "start_time" : "19:30",
1900 - "end_time" : "20:30",
1901 - "is_free" : "유료",
1902 - "sponser" : "춘천문화재단",
1903 - "spon_region" : "춘천문화재단",
1904 - "phone_num" : "033-259-5821",
1905 - "charge" : "20,000원",
1906 - "age" : "만7세이상",
1907 - "homepage" : "http://www.cccf.or.kr",
1908 - "parking" : "Y",
1909 - "where" : "강원도 춘천시 춘천로 112",
1910 - "latitude" : 37.8730965,
1911 - "longitude" : 127.7278377
1912 - },
1913 - {
1914 - "id" : 92,
1915 - "oper_name" : "12월 브런치 콘서트",
1916 - "oper_place" : "백조홀",
1917 - "description" : "클래식",
1918 - "start_day" : "2020/12/09",
1919 - "end_day" : "2020/12/09",
1920 - "start_time" : "11:00",
1921 - "end_time" : "12:00",
1922 - "is_free" : "유료",
1923 - "sponser" : "안동문화예술의전당",
1924 - "spon_region" : "안동문화예술의전당",
1925 - "phone_num" : "054-840-3600",
1926 - "charge" : "1만원",
1927 - "age" : "5세이상",
1928 - "homepage" : "www.andongart.go.kr",
1929 - "parking" : "Y",
1930 - "where" : "경상북도 안동시 축제장길 66",
1931 - "latitude" : 36.5594096,
1932 - "longitude" : 128.7250766
1933 - },
1934 - {
1935 - "id" : 93,
1936 - "oper_name" : "농심",
1937 - "oper_place" : "청주예술의전당",
1938 - "description" : "순수공연",
1939 - "start_day" : "2020/12/09",
1940 - "end_day" : "2020/12/09",
1941 - "start_time" : "19:00",
1942 - "end_time" : "21:00",
1943 - "is_free" : "무료",
1944 - "sponser" : "연희패 벼리",
1945 - "spon_region" : "연희패 벼리",
1946 - "phone_num" : "빈칸",
1947 - "charge" : "빈칸",
1948 - "age" : "빈칸",
1949 - "homepage" : "빈칸",
1950 - "parking" : "Y",
1951 - "where" : "충청북도 청주시 서원구 흥덕로 69",
1952 - "latitude" : 36.64209999,
1953 - "longitude" : 127.469668
1954 - },
1955 - {
1956 - "id" : 94,
1957 - "oper_name" : "수험생을 위한 특별 프로그램",
1958 - "oper_place" : "홍주문화회관 대공연장",
1959 - "description" : "전통",
1960 - "start_day" : "2020/12/09",
1961 - "end_day" : "2020/12/09",
1962 - "start_time" : "14:00",
1963 - "end_time" : "15:00",
1964 - "is_free" : "무료",
1965 - "sponser" : "홍성군역사문화시설관리사업소",
1966 - "spon_region" : "홍성군",
1967 - "phone_num" : "041-634-0021",
1968 - "charge" : "무료",
1969 - "age" : "수험생",
1970 - "homepage" : "http://art.hongseung.go.kr",
1971 - "parking" : "Y",
1972 - "where" : "충청남도 홍성군 홍성읍 내포로 164",
1973 - "latitude" : 36.5947715,
1974 - "longitude" : 126.6518941
1975 - },
1976 - {
1977 - "id" : 95,
1978 - "oper_name" : "Pop con",
1979 - "oper_place" : "광산문화예술회관",
1980 - "description" : "풍선이벤트, 마술쇼와 함께 전 연령층이 즐길 수 있는 클래식 공연",
1981 - "start_day" : "2020/12/08",
1982 - "end_day" : "2020/12/08",
1983 - "start_time" : "19:30",
1984 - "end_time" : "20:30",
1985 - "is_free" : "무료",
1986 - "sponser" : "팝페라 사과나무",
1987 - "spon_region" : "광주광역시 광산구",
1988 - "phone_num" : "빈칸",
1989 - "charge" : "빈칸",
1990 - "age" : "빈칸",
1991 - "homepage" : "빈칸",
1992 - "parking" : "빈칸",
1993 - "where" : "광주광역시 광산구 광산로68번길 13",
1994 - "latitude" : 35.14050122,
1995 - "longitude" : 126.7992317
1996 - },
1997 - {
1998 - "id" : 96,
1999 - "oper_name" : "2020 문화가 있는 날 영도051콘서트 - 수능생맞춤공연 뮤지컬''복순이할배''(예정)",
2000 - "oper_place" : "영도문화예술회관 대공연장",
2001 - "description" : "공연",
2002 - "start_day" : "2020/12/08",
2003 - "end_day" : "2020/12/09",
2004 - "start_time" : "10:00",
2005 - "end_time" : "11:30",
2006 - "is_free" : "무료",
2007 - "sponser" : "영도구청",
2008 - "spon_region" : "영도문화예술회관",
2009 - "phone_num" : "051-419-5571",
2010 - "charge" : "무료",
2011 - "age" : "8세이상",
2012 - "homepage" : "http://www.yeongdo.go.kr/culture.web",
2013 - "parking" : "Y",
2014 - "where" : "부산광역시 영도구 함지로79번길 6",
2015 - "latitude" : 35.075268,
2016 - "longitude" : 129.066862
2017 - },
2018 - {
2019 - "id" : 97,
2020 - "oper_name" : "제40회 국립 안동대학교 미술학과 교수작품전",
2021 - "oper_place" : "34갤러리",
2022 - "description" : "종합",
2023 - "start_day" : "2020/12/08",
2024 - "end_day" : "2020/12/13",
2025 - "start_time" : "10:00",
2026 - "end_time" : "19:00",
2027 - "is_free" : "무료",
2028 - "sponser" : "안동대학교 미술학과",
2029 - "spon_region" : "안동대학교 미술학과",
2030 - "phone_num" : "054-820-5560",
2031 - "charge" : "무료",
2032 - "age" : "전연령",
2033 - "homepage" : "www.andongart.go.kr",
2034 - "parking" : "Y",
2035 - "where" : "경상북도 안동시 축제장길 66",
2036 - "latitude" : 36.5594096,
2037 - "longitude" : 128.7250766
2038 - },
2039 - {
2040 - "id" : 98,
2041 - "oper_name" : "천아트. 핸드페인팅 그림 전시",
2042 - "oper_place" : "5갤러리",
2043 - "description" : "텍스타일",
2044 - "start_day" : "2020/12/08",
2045 - "end_day" : "2020/12/13",
2046 - "start_time" : "10:00",
2047 - "end_time" : "19:00",
2048 - "is_free" : "무료",
2049 - "sponser" : "구삼상 핸드페인팅",
2050 - "spon_region" : "구삼상 핸드페인팅",
2051 - "phone_num" : "빈칸",
2052 - "charge" : "무료",
2053 - "age" : "전연령",
2054 - "homepage" : "www.andongart.go.kr",
2055 - "parking" : "Y",
2056 - "where" : "경상북도 안동시 축제장길 66",
2057 - "latitude" : 36.5594096,
2058 - "longitude" : 128.7250766
2059 - },
2060 - {
2061 - "id" : 99,
2062 - "oper_name" : "제82회 안동미술협회전",
2063 - "oper_place" : "35갤러리",
2064 - "description" : "복합",
2065 - "start_day" : "2020/12/08",
2066 - "end_day" : "2020/12/13",
2067 - "start_time" : "10:00",
2068 - "end_time" : "19:00",
2069 - "is_free" : "무료",
2070 - "sponser" : "한국미술협회 안동지부",
2071 - "spon_region" : "한국미술협회 안동지부",
2072 - "phone_num" : "054-848-8809",
2073 - "charge" : "무료",
2074 - "age" : "전연령",
2075 - "homepage" : "www.andongart.go.kr",
2076 - "parking" : "Y",
2077 - "where" : "경상북도 안동시 축제장길 66",
2078 - "latitude" : 36.5594096,
2079 - "longitude" : 128.7250766
2080 - },
2081 - {
2082 - "id" : 100,
2083 - "oper_name" : "어린이연극 ''크리스마스캐롤 스쿠루지''",
2084 - "oper_place" : "청주예술의전당",
2085 - "description" : "공연",
2086 - "start_day" : "2020/12/08",
2087 - "end_day" : "2020/12/08",
2088 - "start_time" : "10:00",
2089 - "end_time" : "16:00",
2090 - "is_free" : "유료",
2091 - "sponser" : "극단유니콘",
2092 - "spon_region" : "극단유니콘",
2093 - "phone_num" : "빈칸",
2094 - "charge" : "빈칸",
2095 - "age" : "빈칸",
2096 - "homepage" : "빈칸",
2097 - "parking" : "Y",
2098 - "where" : "충청북도 청주시 서원구 흥덕로 69",
2099 - "latitude" : 36.64209999,
2100 - "longitude" : 127.469668
2101 - },
2102 - {
2103 - "id" : 101,
2104 - "oper_name" : "연극 ''쉬어매드니스''",
2105 - "oper_place" : "청주아트홀",
2106 - "description" : "공연",
2107 - "start_day" : "2020/12/08",
2108 - "end_day" : "2020/12/09",
2109 - "start_time" : "19:00",
2110 - "end_time" : "21:00",
2111 - "is_free" : "유료",
2112 - "sponser" : "예술나눔",
2113 - "spon_region" : "예술나눔",
2114 - "phone_num" : "빈칸",
2115 - "charge" : "빈칸",
2116 - "age" : "빈칸",
2117 - "homepage" : "빈칸",
2118 - "parking" : "Y",
2119 - "where" : "충청북도 청주시 서원구 예체로 118-1",
2120 - "latitude" : 36.636924,
2121 - "longitude" : 127.469428
2122 - },
2123 - {
2124 - "id" : 102,
2125 - "oper_name" : "이은미 플루트 독주회 ''Interpreter''",
2126 - "oper_place" : "청주예술의전당",
2127 - "description" : "순수공연",
2128 - "start_day" : "2020/12/08",
2129 - "end_day" : "2020/12/08",
2130 - "start_time" : "19:00",
2131 - "end_time" : "21:00",
2132 - "is_free" : "무료",
2133 - "sponser" : "이은미",
2134 - "spon_region" : "이은미",
2135 - "phone_num" : "빈칸",
2136 - "charge" : "빈칸",
2137 - "age" : "빈칸",
2138 - "homepage" : "빈칸",
2139 - "parking" : "Y",
2140 - "where" : "충청북도 청주시 서원구 흥덕로 69",
2141 - "latitude" : 36.64209999,
2142 - "longitude" : 127.469668
2143 - },
2144 - {
2145 - "id" : 103,
2146 - "oper_name" : "유자 왕 피아노 리사이틀",
2147 - "oper_place" : "수성아트피아 용지홀",
2148 - "description" : "클래식",
2149 - "start_day" : "2020/12/06",
2150 - "end_day" : "2020/12/06",
2151 - "start_time" : "17:00",
2152 - "end_time" : "19:00",
2153 - "is_free" : "유료",
2154 - "sponser" : "수성아트피아",
2155 - "spon_region" : "수성아트피아",
2156 - "phone_num" : "053-668-1800",
2157 - "charge" : "빈칸",
2158 - "age" : "빈칸",
2159 - "homepage" : "http://www.ssartpia.kr",
2160 - "parking" : "Y",
2161 - "where" : "대구광역시 수성구 무학로 180",
2162 - "latitude" : 35.82928349,
2163 - "longitude" : 128.6282735
2164 - },
2165 - {
2166 - "id" : 104,
2167 - "oper_name" : "안동 MBC 창사 50주년 기념 어린이합창단 정기발표회",
2168 - "oper_place" : "웅부홀",
2169 - "description" : "클래식",
2170 - "start_day" : "2020/12/06",
2171 - "end_day" : "2020/12/06",
2172 - "start_time" : "19:00",
2173 - "end_time" : "21:00",
2174 - "is_free" : "무료",
2175 - "sponser" : "안동 MBC",
2176 - "spon_region" : "안동 MBC",
2177 - "phone_num" : "054-851-7046",
2178 - "charge" : "무료",
2179 - "age" : "전연령",
2180 - "homepage" : "www.andongart.go.kr",
2181 - "parking" : "Y",
2182 - "where" : "경상북도 안동시 축제장길 66",
2183 - "latitude" : 36.5594096,
2184 - "longitude" : 128.7250766
2185 - },
2186 - {
2187 - "id" : 105,
2188 - "oper_name" : "영화상영",
2189 - "oper_place" : "정읍기적의도서관",
2190 - "description" : "영화상영",
2191 - "start_day" : "2020/12/06",
2192 - "end_day" : "2020/12/06",
2193 - "start_time" : "15:00",
2194 - "end_time" : "16:00",
2195 - "is_free" : "무료",
2196 - "sponser" : "정읍기적의도서관",
2197 - "spon_region" : "정읍시",
2198 - "phone_num" : "063-539-6453",
2199 - "charge" : "무료",
2200 - "age" : "전시민",
2201 - "homepage" : "https://lib.jeongeup.go.kr/",
2202 - "parking" : "Y",
2203 - "where" : "전라북도 정읍시 수성5로 45-5",
2204 - "latitude" : 35.58427178,
2205 - "longitude" : 126.8606536
2206 - },
2207 - {
2208 - "id" : 106,
2209 - "oper_name" : "서영은 콘서트 ''만9,900원의 행복''",
2210 - "oper_place" : "청주예술의전당",
2211 - "description" : "공연",
2212 - "start_day" : "2020/12/06",
2213 - "end_day" : "2020/12/06",
2214 - "start_time" : "19:00",
2215 - "end_time" : "21:00",
2216 - "is_free" : "유료",
2217 - "sponser" : "(주)피아트엔터테인먼트",
2218 - "spon_region" : "(주)피아트엔터테인먼트",
2219 - "phone_num" : "빈칸",
2220 - "charge" : "빈칸",
2221 - "age" : "빈칸",
2222 - "homepage" : "빈칸",
2223 - "parking" : "Y",
2224 - "where" : "충청북도 청주시 서원구 흥덕로 69",
2225 - "latitude" : 36.64209999,
2226 - "longitude" : 127.469668
2227 - },
2228 - {
2229 - "id" : 107,
2230 - "oper_name" : "청주악성, 박팔괘",
2231 - "oper_place" : "청주예술의전당",
2232 - "description" : "순수공연",
2233 - "start_day" : "2020/12/06",
2234 - "end_day" : "2020/12/06",
2235 - "start_time" : "19:00",
2236 - "end_time" : "21:00",
2237 - "is_free" : "무료",
2238 - "sponser" : "예미향",
2239 - "spon_region" : "예미향",
2240 - "phone_num" : "빈칸",
2241 - "charge" : "빈칸",
2242 - "age" : "빈칸",
2243 - "homepage" : "빈칸",
2244 - "parking" : "Y",
2245 - "where" : "충청북도 청주시 서원구 흥덕로 69",
2246 - "latitude" : 36.64209999,
2247 - "longitude" : 127.469668
2248 - },
2249 - {
2250 - "id" : 108,
2251 - "oper_name" : "제4회 무심콰이어합창단 정기연주회",
2252 - "oper_place" : "청주아트홀",
2253 - "description" : "공연",
2254 - "start_day" : "2020/12/06",
2255 - "end_day" : "2020/12/06",
2256 - "start_time" : "19:00",
2257 - "end_time" : "21:00",
2258 - "is_free" : "무료",
2259 - "sponser" : "무심콰이어",
2260 - "spon_region" : "무심콰이어",
2261 - "phone_num" : "빈칸",
2262 - "charge" : "빈칸",
2263 - "age" : "빈칸",
2264 - "homepage" : "빈칸",
2265 - "parking" : "Y",
2266 - "where" : "충청북도 청주시 서원구 예체로 118-1",
2267 - "latitude" : 36.636924,
2268 - "longitude" : 127.469428
2269 - },
2270 - {
2271 - "id" : 109,
2272 - "oper_name" : "아카펠라DIA",
2273 - "oper_place" : "싸리재홀",
2274 - "description" : "아카펠라",
2275 - "start_day" : "2020/12/05",
2276 - "end_day" : "2020/12/05",
2277 - "start_time" : "16:00",
2278 - "end_time" : "17:00",
2279 - "is_free" : "유료",
2280 - "sponser" : "인천광역시교육청학생교육문화회관",
2281 - "spon_region" : "인천광역시교육청학생교육문화회관",
2282 - "phone_num" : "032-760-3400",
2283 - "charge" : "6000원",
2284 - "age" : "5세",
2285 - "homepage" : "www.iecs.go.kr/",
2286 - "parking" : "Y",
2287 - "where" : "인천광역시중구자유공원로12(인현동)",
2288 - "latitude" : 37.47571123,
2289 - "longitude" : 126.6296707
2290 - },
2291 - {
2292 - "id" : 110,
2293 - "oper_name" : "송년음악회",
2294 - "oper_place" : "공주문예회관 대공연장",
2295 - "description" : "기획공연",
2296 - "start_day" : "2020/12/05",
2297 - "end_day" : "2020/12/05",
2298 - "start_time" : "19:00",
2299 - "end_time" : "21:00",
2300 - "is_free" : "유료",
2301 - "sponser" : "공주문예회관",
2302 - "spon_region" : "공주문예회관",
2303 - "phone_num" : "041-840-2203",
2304 - "charge" : "미정",
2305 - "age" : "초등학생 이상",
2306 - "homepage" : "www.gongju.go.kr",
2307 - "parking" : "Y",
2308 - "where" : "충청남도 공주시 고마나루길 5",
2309 - "latitude" : 36.460177,
2310 - "longitude" : 127.1117218
2311 - },
2312 - {
2313 - "id" : 111,
2314 - "oper_name" : "크리스마스 선물로 목걸이가 언제나 옳아요",
2315 - "oper_place" : "서울특별시 강북구 강북문화예술회관 대공연장",
2316 - "description" : "뮤지컬",
2317 - "start_day" : "2020/12/05",
2318 - "end_day" : "2020/12/05",
2319 - "start_time" : "0:00",
2320 - "end_time" : "0:00",
2321 - "is_free" : "유료",
2322 - "sponser" : "서울특별시 강북구청(문화관광체육과)",
2323 - "spon_region" : "서울특별시 강북구청(문화관광체육과)+서울시",
2324 - "phone_num" : "02-901-6232",
2325 - "charge" : "무료",
2326 - "age" : "8세 이상",
2327 - "homepage" : "빈칸",
2328 - "parking" : "Y",
2329 - "where" : "서울특별시 강북구 삼각산로 85",
2330 - "latitude" : 37.64098943,
2331 - "longitude" : 127.0138774
2332 - },
2333 - {
2334 - "id" : 112,
2335 - "oper_name" : "해설이 있는 동화발레 오즈의 마법사 도로시의 모험",
2336 - "oper_place" : "화랑관",
2337 - "description" : "무용",
2338 - "start_day" : "2020/12/05",
2339 - "end_day" : "2020/12/05",
2340 - "start_time" : "19:30",
2341 - "end_time" : "21:00",
2342 - "is_free" : "무료",
2343 - "sponser" : "전북발레시어터",
2344 - "spon_region" : "진천군",
2345 - "phone_num" : "043-539-3603",
2346 - "charge" : "무료",
2347 - "age" : "전체관람가능",
2348 - "homepage" : "http://www.jincheon.go.kr",
2349 - "parking" : "Y",
2350 - "where" : "충청북도 진천군 진천읍 문화로 69-4",
2351 - "latitude" : 36.8495432,
2352 - "longitude" : 127.440132
2353 - },
2354 - {
2355 - "id" : 113,
2356 - "oper_name" : "국제탈공연예술촌 12월정기공연",
2357 - "oper_place" : "남해국제탈공연예술촌",
2358 - "description" : "경기도립국악단 전통국악 공연",
2359 - "start_day" : "2020/12/05",
2360 - "end_day" : "2020/12/06",
2361 - "start_time" : "14:00",
2362 - "end_time" : "15:00",
2363 - "is_free" : "유료",
2364 - "sponser" : "경상남도 남해군",
2365 - "spon_region" : "남해국제탈공연예술촌",
2366 - "phone_num" : "055-860-3790",
2367 - "charge" : "성인 3,000원+청소년 2,000원+어린이 1,000원",
2368 - "age" : "12세 이상",
2369 - "homepage" : "http://tour.namhae.go.kr/00002875/00003544/00002878.web",
2370 - "parking" : "Y",
2371 - "where" : "경상남도 남해군 이동면 남해대로 2412",
2372 - "latitude" : 34.81773051,
2373 - "longitude" : 127.927175
2374 - },
2375 - {
2376 - "id" : 114,
2377 - "oper_name" : "베토벤 탄생 250주년 갈라콘서트",
2378 - "oper_place" : "청주아트홀",
2379 - "description" : "공연",
2380 - "start_day" : "2020/12/05",
2381 - "end_day" : "2020/12/05",
2382 - "start_time" : "19:00",
2383 - "end_time" : "21:00",
2384 - "is_free" : "무료",
2385 - "sponser" : "청주챔버오케스트라",
2386 - "spon_region" : "청주챔버오케스트라",
2387 - "phone_num" : "빈칸",
2388 - "charge" : "빈칸",
2389 - "age" : "빈칸",
2390 - "homepage" : "빈칸",
2391 - "parking" : "Y",
2392 - "where" : "충청북도 청주시 서원구 예체로 118-1",
2393 - "latitude" : 36.636924,
2394 - "longitude" : 127.469428
2395 - },
2396 - {
2397 - "id" : 115,
2398 - "oper_name" : "어울림 상설Series21 수요상설공연 - 레자미와 함께하는 베토벤 낭만여행",
2399 - "oper_place" : "영도문화예술회관 소공연장",
2400 - "description" : "공연",
2401 - "start_day" : "2020/12/04",
2402 - "end_day" : "2020/12/04",
2403 - "start_time" : "19:30",
2404 - "end_time" : "21:00",
2405 - "is_free" : "유료",
2406 - "sponser" : "영도구청",
2407 - "spon_region" : "영도문화예술회관",
2408 - "phone_num" : "051-419-5571",
2409 - "charge" : "일반1만원",
2410 - "age" : "8세이상",
2411 - "homepage" : "http://www.yeongdo.go.kr/culture.web",
2412 - "parking" : "Y",
2413 - "where" : "부산광역시 영도구 함지로79번길 6",
2414 - "latitude" : 35.075268,
2415 - "longitude" : 129.066862
2416 - },
2417 - {
2418 - "id" : 116,
2419 - "oper_name" : "2020 강서구립극단 제38회 정기공연",
2420 - "oper_place" : "강서구민회관",
2421 - "description" : "2020 강서구립극단 제38회 정기공연",
2422 - "start_day" : "2020/12/04",
2423 - "end_day" : "2020/12/06",
2424 - "start_time" : "16:00",
2425 - "end_time" : "21:00",
2426 - "is_free" : "유료",
2427 - "sponser" : "강서구청",
2428 - "spon_region" : "강서구청",
2429 - "phone_num" : "02-2600-6634",
2430 - "charge" : "2000",
2431 - "age" : "빈칸",
2432 - "homepage" : "빈칸",
2433 - "parking" : "빈칸",
2434 - "where" : "서울특별시 강서구 우장산로 66",
2435 - "latitude" : 37.55343651,
2436 - "longitude" : 126.8436485
2437 - },
2438 - {
2439 - "id" : 117,
2440 - "oper_name" : "60분간의 음악일주",
2441 - "oper_place" : "금산다락원 생명의집",
2442 - "description" : "어린이 권장도서 및 베스트셀러 작품을 음악화한 공연",
2443 - "start_day" : "2020/12/04",
2444 - "end_day" : "2020/12/04",
2445 - "start_time" : "10:30",
2446 - "end_time" : "11:30",
2447 - "is_free" : "무료",
2448 - "sponser" : "금산군 금산다락원",
2449 - "spon_region" : "한국문화예술회관연합회",
2450 - "phone_num" : "014-750-4424",
2451 - "charge" : "-",
2452 - "age" : "전체관람가",
2453 - "homepage" : "빈칸",
2454 - "parking" : "Y",
2455 - "where" : "충청남도 금산군 금산읍 금산로 1559",
2456 - "latitude" : 36.11206754,
2457 - "longitude" : 127.4916373
2458 - },
2459 - {
2460 - "id" : 118,
2461 - "oper_name" : "연극시리즈",
2462 - "oper_place" : "백조홀",
2463 - "description" : "연극",
2464 - "start_day" : "2020/12/04",
2465 - "end_day" : "2020/12/05",
2466 - "start_time" : "19:30",
2467 - "end_time" : "21:00",
2468 - "is_free" : "유료",
2469 - "sponser" : "안동문화예술의전당",
2470 - "spon_region" : "안동문화예술의전당",
2471 - "phone_num" : "054-840-3600",
2472 - "charge" : "2만원",
2473 - "age" : "5세이상",
2474 - "homepage" : "www.andongart.go.kr",
2475 - "parking" : "Y",
2476 - "where" : "경상북도 안동시 축제장길 66",
2477 - "latitude" : 36.5594096,
2478 - "longitude" : 128.7250766
2479 - },
2480 - {
2481 - "id" : 119,
2482 - "oper_name" : "지역작가 회고전",
2483 - "oper_place" : "상설",
2484 - "description" : "평면",
2485 - "start_day" : "2020/12/04",
2486 - "end_day" : "2020/12/27",
2487 - "start_time" : "10:00",
2488 - "end_time" : "19:00",
2489 - "is_free" : "무료",
2490 - "sponser" : "안동문화예술의전당",
2491 - "spon_region" : "안동문화예술의전당",
2492 - "phone_num" : "054-840-3601",
2493 - "charge" : "무료",
2494 - "age" : "전연령",
2495 - "homepage" : "www.andongart.go.kr",
2496 - "parking" : "Y",
2497 - "where" : "경상북도 안동시 축제장길 66",
2498 - "latitude" : 36.5594096,
2499 - "longitude" : 128.7250766
2500 - },
2501 - {
2502 - "id" : 120,
2503 - "oper_name" : "김범수 콘서트",
2504 - "oper_place" : "청주예술의전당",
2505 - "description" : "공연",
2506 - "start_day" : "2020/12/04",
2507 - "end_day" : "2020/12/05",
2508 - "start_time" : "19:00",
2509 - "end_time" : "21:00",
2510 - "is_free" : "유료",
2511 - "sponser" : "(주)충북일보",
2512 - "spon_region" : "(주)충북일보",
2513 - "phone_num" : "빈칸",
2514 - "charge" : "빈칸",
2515 - "age" : "빈칸",
2516 - "homepage" : "빈칸",
2517 - "parking" : "Y",
2518 - "where" : "충청북도 청주시 서원구 흥덕로 69",
2519 - "latitude" : 36.64209999,
2520 - "longitude" : 127.469668
2521 - },
2522 - {
2523 - "id" : 121,
2524 - "oper_name" : "국제로타리3740 로타리합창단 제5회 정기연주회 및 자선공연",
2525 - "oper_place" : "청주아트홀",
2526 - "description" : "공연",
2527 - "start_day" : "2020/12/04",
2528 - "end_day" : "2020/12/04",
2529 - "start_time" : "19:00",
2530 - "end_time" : "21:00",
2531 - "is_free" : "무료",
2532 - "sponser" : "국제로타리3740지구 로타리합창단",
2533 - "spon_region" : "국제로타리3740지구 로타리합창단",
2534 - "phone_num" : "빈칸",
2535 - "charge" : "빈칸",
2536 - "age" : "빈칸",
2537 - "homepage" : "빈칸",
2538 - "parking" : "Y",
2539 - "where" : "충청북도 청주시 서원구 예체로 118-1",
2540 - "latitude" : 36.636924,
2541 - "longitude" : 127.469428
2542 - },
2543 - {
2544 - "id" : 122,
2545 - "oper_name" : "춘천시립인형극단 창단공연 1회차",
2546 - "oper_place" : "춘천인형극장",
2547 - "description" : "시립인형극단 창단공연",
2548 - "start_day" : "2020/12/04",
2549 - "end_day" : "2020/12/05",
2550 - "start_time" : "15:00",
2551 - "end_time" : "16:30",
2552 - "is_free" : "유료",
2553 - "sponser" : "춘천시립예술단",
2554 - "spon_region" : "춘천시+춘천문화재단",
2555 - "phone_num" : "070-4633-5746",
2556 - "charge" : "창단 공연에 따른 티켓가격 및 할인내용 협의 중",
2557 - "age" : "빈칸",
2558 - "homepage" : "http://www.cccf.or.kr",
2559 - "parking" : "Y",
2560 - "where" : "강원도 춘천시 영서로 3017",
2561 - "latitude" : 37.92101552,
2562 - "longitude" : 127.7201052
2563 - },
2564 - {
2565 - "id" : 123,
2566 - "oper_name" : "춘천시립인형극단 창단공연 2회차",
2567 - "oper_place" : "춘천인형극장",
2568 - "description" : "시립인형극단 창단공연",
2569 - "start_day" : "2020/12/04",
2570 - "end_day" : "2020/12/05",
2571 - "start_time" : "19:30",
2572 - "end_time" : "20:30",
2573 - "is_free" : "유료",
2574 - "sponser" : "춘천시립예술단",
2575 - "spon_region" : "춘천시+춘천문화재단",
2576 - "phone_num" : "070-4633-5746",
2577 - "charge" : "창단 공연에 따른 티켓가격 및 할인내용 협의 중",
2578 - "age" : "빈칸",
2579 - "homepage" : "http://www.cccf.or.kr",
2580 - "parking" : "Y",
2581 - "where" : "강원도 춘천시 영서로 3017",
2582 - "latitude" : 37.92101552,
2583 - "longitude" : 127.7201052
2584 - }
2585 -]
1 -var mysql = require('mysql');
2 -var near_show_list = [];
3 -var connection = mysql.createConnection({
4 - "host": "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
5 - "user": "root",
6 - "password": "dldbwp1207",
7 - "port": "3306",
8 - "database": "showdata"
9 -});
10 -
11 -connection.connect();
12 -
13 -// 데이터 길이 파악 //
14 -var dataNum=0;
15 -connection.query('SELECT COUNT (*) AS cnt FROM SHOW_DATA', function (error, results, field) {
16 - if (error) {
17 - console.log(error);
18 - }
19 - dataNum = results[0].cnt;
20 - console.log(dataNum);
21 -});
22 -
23 -connection.query('SELECT start_day FROM SHOW_DATA WHERE start_day>=2021/01/01 ORDER BY start_day',function(error,results,field){
24 - if(error){
25 - console.log(error);
26 - }
27 - console.log(results);
28 -})
29 -
30 -connection.end();
...\ No newline at end of file ...\ No newline at end of file
1 -var mysql = require('mysql');
2 -
3 -module.exports = {
4 - nearShow: function (lat, lon) {
5 - var near_show_list = [];
6 - var connection = mysql.createConnection({
7 - "host": "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
8 - "user": "root",
9 - "password": "dldbwp1207",
10 - "port": "3306",
11 - "database": "showdata"
12 - });
13 -
14 - connection.connect();
15 - var dataNum = 0;
16 - connection.query('SELECT COUNT (*) AS cnt FROM SHOW_DATA', function (error, results, field) {
17 - if (error) {
18 - console.log(error);
19 - }
20 - console.log(results[0].cnt);
21 - dataNum = results[0].cnt;
22 - });
23 -
24 - connection.query('SELECT id,latitude,longitude FROM SHOW_DATA', function (error, results, field) {
25 - if (error) {
26 - console.log(error);
27 - }
28 - console.log([lat, lon]);
29 - for (var i = 0; i < dataNum; i++) {
30 - var latgap = (lat - results[i].latitude) * 110;
31 - var longap = (lon - results[i].longitude) * 91;
32 - var cal = latgap * latgap + longap * longap;
33 - if (cal <= 1600) {
34 - console.log(results[i].id);
35 - near_show_list.push([results[i].id, results[i].latitude, results[i].longitude]);
36 - }
37 - }
38 - });
39 -
40 - connection.end();
41 - // return near_show_list;
42 - }
43 -}
1 +@import url('https://fonts.googleapis.com/css?family=Poppins:400,500,600,700&display=swap');
2 +*{
3 + margin: 0;
4 + padding: 0;
5 + box-sizing: border-box;
6 + font-family: 'Poppins', sans-serif;
7 +}
8 +html,body{
9 + display: grid;
10 + height: 100%;
11 + place-items: center;
12 + background: #664AFF;
13 +}
14 +::selection{
15 + color: #fff;
16 + background: #664AFF;
17 +}
18 +.search-box{
19 + position: relative;
20 + height: 60px;
21 + width: 60px;
22 + border-radius: 50%;
23 + box-shadow: 5px 5px 30px rgba(0,0,0,.2);
24 + transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
25 +}
26 +.search-box.active{
27 + width: 350px;
28 +}
29 +.search-box input{
30 + width: 100%;
31 + height: 100%;
32 + border: none;
33 + border-radius: 50px;
34 + background: #fff;
35 + outline: none;
36 + padding: 0 60px 0 20px;
37 + font-size: 18px;
38 + opacity: 0;
39 + transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
40 +}
41 +.search-box input.active{
42 + opacity: 1;
43 +}
44 +.search-box input::placeholder{
45 + color: #a6a6a6;
46 +}
47 +.search-box .search-icon{
48 + position: absolute;
49 + right: 0px;
50 + top: 50%;
51 + transform: translateY(-50%);
52 + height: 60px;
53 + width: 60px;
54 + background: #fff;
55 + border-radius: 50%;
56 + text-align: center;
57 + line-height: 60px;
58 + font-size: 22px;
59 + color: #664AFF;
60 + cursor: pointer;
61 + z-index: 1;
62 + transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
63 +}
64 +.search-box .search-icon.active{
65 + right: 5px;
66 + height: 50px;
67 + line-height: 50px;
68 + width: 50px;
69 + font-size: 20px;
70 + background: #664AFF;
71 + color: #fff;
72 + transform: translateY(-50%) rotate(360deg);
73 +}
74 +.search-box .cancel-icon{
75 + position: absolute;
76 + right: 20px;
77 + top: 50%;
78 + transform: translateY(-50%);
79 + font-size: 25px;
80 + color: #fff;
81 + cursor: pointer;
82 + transition: all 0.5s 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55);
83 +}
84 +.search-box .cancel-icon.active{
85 + right: -40px;
86 + transform: translateY(-50%) rotate(360deg);
87 +}
88 +.search-box .search-data{
89 + text-align: center;
90 + padding-top: 7px;
91 + color: #fff;
92 + font-size: 18px;
93 + word-wrap: break-word;
94 +}
95 +.search-box .search-data.active{
96 + display: none;
97 +}
1 -* 1 +@import url('https://fonts.googleapis.com/css?family=Poppins:400,500,600,700&display=swap');
2 -{ 2 +*{
3 - margin: 0; 3 + margin: 0;
4 - padding: 0; 4 + padding: 0;
5 + box-sizing: border-box;
6 + font-family: 'Poppins', sans-serif;
5 } 7 }
6 - 8 +.search-box{
9 + position: relative;
10 + height: 60px;
11 + width: 60px;
12 + border-radius: 50%;
13 + transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
14 + }
15 + /* //박스 길이 조절 */
16 + .search-box.active{
17 + width: 700px;
18 + }
19 + .search-box input{
20 + width: 100%;
21 + height: 100%;
22 + border: none;
23 + border-radius: 50px;
24 + background: #fff;
25 + outline: none;
26 + padding: 0 60px 0 20px;
27 + font-size: 18px;
28 + opacity: 0;
29 + transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
30 + }
31 + /* 불투명도 */
32 + .search-box input.active{
33 + opacity: 1;
34 + }
35 + .search-box input::placeholder{
36 + color: #a6a6a6;
37 + }
38 + .search-box .search-icon{
39 + position: absolute;
40 + /* 버튼위치 */
41 + right: -380px;
42 + top: 50%;
43 + transform: translateY(-50%);
44 + height: 60px;
45 + width: 60px;
46 + background: #fff;
47 + border-radius: 50%;
48 + text-align: center;
49 + line-height: 60px;
50 + font-size: 22px;
51 + color: #CB25FF;
52 + cursor: pointer;
53 + z-index: 1;
54 + /* transition: all 0.5s cubic-bezier(0.6, -0.28, 0.74, 0.05); */
55 + /* transition: cubic-bezier(0.39, 0.575, 0.565, 1); */
56 + transition-timing-function: linear;
57 + }
58 + .search-box .search-icon.active{
59 + right: 5px;
60 + height: 50px;
61 + line-height: 50px;
62 + width: 50px;
63 + font-size: 20px;
64 + background: #CB25FF;
65 + color: #fff;
66 + transform: translateY(-50%) rotate(360deg);
67 + }
68 + .search-box .cancel-icon{
69 + position: absolute;
70 + right: -380px;
71 + top: 50%;
72 + transform: translateY(-50%);
73 + font-size: 25px;
74 + color: #fff;
75 + cursor: pointer;
76 + /* transition: all 0.5s 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55); */
77 + /* transition: cubic-bezier(0.39, 0.575, 0.565, 1); */
78 + transition-timing-function: linear;
79 + }
80 + .search-box .cancel-icon.active{
81 + right: -40px;
82 + }
83 + .search-box .search-data{
84 + text-align: center;
85 + padding-top: 7px;
86 + color: #fff;
87 + font-size: 18px;
88 + word-wrap: break-word;
89 + }
90 + .search-box .search-data.active{
91 + display: none;
92 + }
7 header 93 header
8 { 94 {
9 background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(/images/back1.jpg); 95 background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(/images/back1.jpg);
...@@ -73,11 +159,15 @@ header ...@@ -73,11 +159,15 @@ header
73 } 159 }
74 160
75 .welcome{ 161 .welcome{
76 - position:relative; 162 + position: absolute;
163 + top:50%;
164 + left: 50%;
165 + width: 700px; height: 160px;
166 + margin-top: -80px;
167 + margin-left: -350px;
77 text-align:center; 168 text-align:center;
78 font-family: sans-serif; 169 font-family: sans-serif;
79 color:#fff; 170 color:#fff;
80 - top: 30%;
81 } 171 }
82 172
83 .welcome h1{ 173 .welcome h1{
...@@ -102,4 +192,5 @@ header ...@@ -102,4 +192,5 @@ header
102 background: #fff; 192 background: #fff;
103 color: #000; 193 color: #000;
104 transition: .4s; 194 transition: .4s;
105 -}
...\ No newline at end of file ...\ No newline at end of file
195 +}
196 +
......
1 +
1 * 2 *
2 { 3 {
3 - margin: 0; 4 + margin: 0;
4 - padding: 0; 5 + padding: 0;
6 + box-sizing: border-box;
7 + font-family: 'Poppins', sans-serif;
5 } 8 }
6 9
7 -
8 .nav-bar 10 .nav-bar
9 { 11 {
10 - background: #000; 12 + position: relative;
13 + background: rgb(0,0,0,0.5);
11 height: 80px; 14 height: 80px;
12 } 15 }
13 16
...@@ -44,15 +47,12 @@ ...@@ -44,15 +47,12 @@
44 } 47 }
45 48
46 .welcome{ 49 .welcome{
47 - position:relative; 50 + position: absolute;
51 + top:20%;
52 + left: 50%;
53 + width: 700px; height: 160px;
54 +
48 text-align:center; 55 text-align:center;
49 font-family: sans-serif; 56 font-family: sans-serif;
50 color:#000; 57 color:#000;
51 - top: 300px; 58 +}
52 -}
53 -
54 -.welcome h1{
55 - font-size: 42px;
56 - margin: 25px;
57 -}
58 -
...\ No newline at end of file ...\ No newline at end of file
......
1 +var mysql = require('mysql');
2 +
3 +var database = mysql.createConnection({
4 + host: "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
5 + user: "root",
6 + password: "dldbwp1207",
7 + port: 3306,
8 + database: "showdata"
9 +});
10 +database.connect();
11 +module.exports = database;
...\ No newline at end of file ...\ No newline at end of file
1 var express = require('express'); 1 var express = require('express');
2 var router = express.Router(); 2 var router = express.Router();
3 +var mysql = require('mysql');
4 +var fs = require('fs');
5 +var ejs = require('ejs');
6 +
7 +//추후 key 암호화 필요함
8 +var connection = mysql.createConnection({
9 + "host": "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
10 + "user": "root",
11 + "password": "dldbwp1207",
12 + "port": "3306",
13 + "database": "showdata"
14 +})
15 +connection.connect();
16 +
17 +var mapPage = fs.readFileSync('routes/mapPage.ejs', 'utf8');
18 +var dataNum = 0;
19 +
20 +router.get('/mappage', (req, res) => {
21 + connection.query('SELECT COUNT (*) AS cnt FROM SHOW_DATA', function (error, results, field) {
22 + if (error) {
23 + console.log(error);
24 + }
25 + console.log(results[0].cnt);
26 + dataNum = results[0].cnt;
27 + });
28 + ////
29 + connection.query('SELECT id,oper_name,latitude,longitude FROM SHOW_DATA', function (error, results, field) {
30 + if (error) {
31 + console.log(error);
32 + } else {
33 + var show_list = [];
34 + for (var i = 0; i < dataNum; i++) {
35 + show_list.push([results[i].id, results[i].oper_name, results[i].latitude, results[i].longitude]);
36 + var page = ejs.render(mapPage, {
37 + title: "show data",
38 + data: show_list,
39 + dataNum: dataNum,
40 + });
41 +
42 + }
43 + res.send(page);
44 + }
45 +
46 + });
47 +});
48 +
3 49
4 //루트 페이지 (메인페이지)에서 실행됨 : title 할당하고 main.html 띄워줌. 50 //루트 페이지 (메인페이지)에서 실행됨 : title 할당하고 main.html 띄워줌.
5 router.get('/', function (req, res, next) { 51 router.get('/', function (req, res, next) {
...@@ -12,14 +58,13 @@ router.get('/login', function (req, res, next) { ...@@ -12,14 +58,13 @@ router.get('/login', function (req, res, next) {
12 res.render('login.html', { title: 'Login' }); 58 res.render('login.html', { title: 'Login' });
13 console.log('로그인 페이지 접속 성공'); 59 console.log('로그인 페이지 접속 성공');
14 }); 60 });
15 - 61 +router.get('/search', function (req, res, next) {
16 -// router.get('/login/:id', function (req, res) { 62 + res.render('search.html', { title: '검색 결과' });
17 -// var id = req.params.id; 63 + console.log('검색 결과 페이지 접속 성공');
18 -// console.log('id 할당 접속 성공'); 64 +})
19 -// });
20 -
21 router.get('/send', function (req, res, next) { 65 router.get('/send', function (req, res, next) {
22 res.render('send.html', { title: 'Send message' }); 66 res.render('send.html', { title: 'Send message' });
23 console.log('카카오톡 공유 메시지 접속 성공'); 67 console.log('카카오톡 공유 메시지 접속 성공');
24 }) 68 })
69 +
25 module.exports = router; 70 module.exports = router;
...\ No newline at end of file ...\ No newline at end of file
......
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 -<head> 3 + <head>
4 - <meta charset="utf-8"> 4 + <title>
5 - <title>geolocation으로 마커 표시하기</title> 5 + <%= title%>
6 - 6 + </title>
7 -</head> 7 + <link rel="stylesheet" href='/stylesheets/mapPage_style.css' type="text/css">
8 -<body>
9 -<p style="margin-top:-12px">
10 - <b>Chrome 브라우저는 https 환경에서만 geolocation을 지원합니다.</b> 참고해주세요.
11 -</p>
12 -<div id="map" style="width:500px;height:350px;"></div>
13 8
14 -<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=a3386042ab2e0550ea06d265855b452c">//kakao map api 주소 받아옴</script> 9 + </head>
15 -<script> 10 + <body>
11 + <header>
12 + <div class="nav-bar">
13 + <img src="../images/camera.png" alt="" class="logo">
14 + <ul class="menu">
15 + <li><a href="">Home</a></li>
16 + <li><a href="">Services</a></li>
17 + <li><a href="">Portfolio</a></li>
18 + <li><a href="">Testimonimal</a></li>
19 + <li><a href="">Career</a></li>
20 + <li><a href="">Contact</a></li>
21 + </ul>
22 + </div>
23 + <div class="welcome">
24 + <h1>어떤 공연을 찾으시나요?</h1>
25 + <a href="mappage" class="btn btn1">나의 근처 공연</a>
26 + <a href="#" class="btn btn2">검색하기</a>
27 + <a href="login" class="btn btn3">로그인</a>
28 + </div>
29 + </header>
30 +
31 + <div id="map"
32 + style="
33 + position: absolute;
34 + border-radius: 5%;
35 + width:500px; height:350px;
36 + top:50%;
37 + left: 50%;
38 + "></div>
39 + <div>
40 + </div>
41 + <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=a3386042ab2e0550ea06d265855b452c"></script>
42 +<script>
16 var mapContainer = document.getElementById('map'), // 지도를 표시할 div 43 var mapContainer = document.getElementById('map'), // 지도를 표시할 div
17 mapOption = { 44 mapOption = {
18 center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표 45 center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
...@@ -29,13 +56,32 @@ if (navigator.geolocation) { ...@@ -29,13 +56,32 @@ if (navigator.geolocation) {
29 56
30 var lat = position.coords.latitude, // 위도 57 var lat = position.coords.latitude, // 위도
31 lon = position.coords.longitude; // 경도 58 lon = position.coords.longitude; // 경도
32 - console.log(lat); 59 +
33 - console.log(lon);
34 var locPosition = new kakao.maps.LatLng(lat, lon), // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다 60 var locPosition = new kakao.maps.LatLng(lat, lon), // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다
35 message = '<div style="padding:5px;">여기에 계신가요?!</div>'; // 인포윈도우에 표시될 내용입니다 61 message = '<div style="padding:5px;">여기에 계신가요?!</div>'; // 인포윈도우에 표시될 내용입니다
36 - 62 + displayMarker(locPosition, message);
63 +
64 + var data=[];
65 + var strData = "<%= data %>";
66 + var splitData=strData.split(',');
67 + for(var i=0;i<splitData.length;i+=4){
68 + data.push([Number(splitData[i]),splitData[i+1],Number(splitData[i+2]),Number(splitData[i+3])]);
69 + }
70 + for (var i = 0; i < data.length; i++) {
71 + var latgap = (lat - data[i][2]) * 110;
72 + var longap = (lon - data[i][3]) * 91;
73 + var cal = latgap * latgap + longap * longap;
74 + if (cal <= 1600) {
75 + var locP=new kakao.maps.LatLng(data[i][2], data[i][3]),
76 + message = data[i][1];
77 + displayShowMarker(locP,message);
78 +
79 + console.log("near_show:"+data[i]);
80 + }
81 + }
82 +
37 // 마커와 인포윈도우를 표시합니다 83 // 마커와 인포윈도우를 표시합니다
38 - displayMarker(locPosition, message); 84 +
39 85
40 }); 86 });
41 87
...@@ -46,36 +92,24 @@ if (navigator.geolocation) { ...@@ -46,36 +92,24 @@ if (navigator.geolocation) {
46 92
47 displayMarker(locPosition, message); 93 displayMarker(locPosition, message);
48 } 94 }
49 - 95 +function displayShowMarker(locPosition,message){
50 - 96 + var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
51 -var positions = [
52 - {
53 - title: '카카오',
54 - latlng: new kakao.maps.LatLng(37.2427865, 127.106767)
55 - }
56 -];
57 -
58 -
59 -displayShows(positions);
60 -function displayShows(positions){
61 - var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
62 -
63 -for (var i = 0; i < positions.length; i ++) {
64 97
65 - // 마커 이미지의 이미지 크기 입니다 98 +
66 var imageSize = new kakao.maps.Size(24, 35); 99 var imageSize = new kakao.maps.Size(24, 35);
100 +
101 +// 마커 이미지를 생성합니다
102 +var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize);
103 + var marker = new kakao.maps.Marker({
104 + map: map,
105 + position: locPosition,
106 + title: message,
107 + image: markerImage
108 + });
67 109
68 - // 마커 이미지를 생성합니다 110 + // 지도 중심좌표를 접속위치로 변경합니다
69 - var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize); 111 + map.setCenter(locPosition);
70 - 112 +
71 - // 마커를 생성합니다
72 - var marker = new kakao.maps.Marker({
73 - map: map, // 마커를 표시할 지도
74 - position: positions[i].latlng, // 마커를 표시할 위치
75 - title : positions[i].title, // 마커의 타이틀, 마커에 마우스를 올리면 타이틀이 표시됩니다
76 - image : markerImage // 마커 이미지
77 - });
78 - }
79 } 113 }
80 // 지도에 마커와 인포윈도우를 표시하는 함수입니다 114 // 지도에 마커와 인포윈도우를 표시하는 함수입니다
81 function displayMarker(locPosition, message) { 115 function displayMarker(locPosition, message) {
...@@ -100,7 +134,7 @@ function displayMarker(locPosition, message) { ...@@ -100,7 +134,7 @@ function displayMarker(locPosition, message) {
100 134
101 // 지도 중심좌표를 접속위치로 변경합니다 135 // 지도 중심좌표를 접속위치로 변경합니다
102 map.setCenter(locPosition); 136 map.setCenter(locPosition);
103 -} 137 +}
104 </script> 138 </script>
105 -</body> 139 + </body>
106 </html> 140 </html>
...\ No newline at end of file ...\ No newline at end of file
......
1 +<!DOCTYPE html>
2 +<html lang="ko">
3 +
4 +<head>
5 + <meta charset="UTF-8">
6 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 + <title>Culture Gallery</title>
8 + <link rel="stylesheet" href='/stylesheets/login_style.css' type="text/css">
9 + <script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
10 +</head>
11 +
12 +<body>
13 + <header>
14 + <div class="nav-bar">
15 + <img src="../images/camera.png" alt="" class="logo">
16 + <ul class="menu">
17 + <li><a href="/">Home</a></li>
18 + <li><a href="">Services</a></li>
19 + <li><a href="">Portfolio</a></li>
20 + <li><a href="">Testimonimal</a></li>
21 + <li><a href="">Career</a></li>
22 + <li><a href="">Contact</a></li>
23 + </ul>
24 + </div>
25 + </header>
26 + <h1>검색하기</h1>
27 + <hr>
28 + <form action="/search" method="POST">
29 + <table>
30 + <tr>
31 + <td><input type="text" name="name" placeholder="장소를 입력하세요."></td>
32 + </tr>
33 + <tr>
34 + <td><input type="text" name="modelnumber" placeholder="모델넘버를 입력하세요."></td>
35 + </tr>
36 + <tr>
37 + <td><input type="text" name="series" placeholder="시리즈를 입력하세요."></td>
38 + </tr>
39 + </table>
40 + <input type="submit" value="전송하기">
41 + </form>
42 +</body>
43 +
44 +</html>
...\ No newline at end of file ...\ No newline at end of file
1 +var template = require('./template.js');
2 +var qs = require('querystring');
3 +var db = require('./database.js');
4 +
5 +exports.foodInfo = function (request, response) {
6 + var title = '식품 영양정보';
7 + var description = '입력한 음식의 영양 정보(칼로리, 단백질, 지방, 탄수화물, 나트륨)를 알려드립니다!';
8 + var html = template.html(title, `
9 + <div style= "font-size:25px; background-color:#ffffff">
10 + <h2><font color="black">${title}<div style= "font-size:10px;"><br><div style= "font-size:20px;">${description}</font></div></h2>
11 + <form action="/foodInfo_search" method="post">
12 + <input type = 'text' name = 'search' placeholder = '검색어 입력' maxlength = 255 value = "" autocomplete = "off" style="width:300px;height:20px;font-size:20px;">
13 + <button type = "submit" name = "click" style="font-size:20px;">검색</button>
14 + </form>
15 + </div>
16 +
17 + `);
18 + response.writeHead(200);
19 + response.end(html);
20 +}
21 +function foodTable(foodInfo, list, num) {
22 + var tag = '';
23 + tag += `<table style='width:100%;'`;
24 + tag += `
25 + <tr>
26 + <td>이름</td>
27 + <td>종류</td>
28 + <td>지역/제조사</td>
29 + <td>1회 제공량(g)</td>
30 + <td>칼로리(kcal)</td>
31 + <td>단백질(g)</td>
32 + <td>지방(g)</td>
33 + <td>탄수화물(g)</td>
34 + <td>나트륨(mg)</td>
35 + </tr>
36 + `
37 + for (var i = 0; i < num; i++) {
38 + tag += `
39 + <tr>
40 + <td>${foodInfo[list[i]].name}</td>
41 + <td>${foodInfo[list[i]].type}</td>
42 + <td>${foodInfo[list[i]].company}</td>
43 + <td>${foodInfo[list[i]].servingSize}</td>
44 + <td>${foodInfo[list[i]].kcal}</td>
45 + <td>${foodInfo[list[i]].protein}</td>
46 + <td>${foodInfo[list[i]].fat}</td>
47 + <td>${foodInfo[list[i]].carbohydrate}</td>
48 + <td>${foodInfo[list[i]].natrium}</td>
49 + </tr>
50 + `
51 + }
52 + tag += `</table>
53 + <style>
54 + table{
55 + border-collapse: collapse;
56 + }
57 + td{
58 + border:1px solid black;
59 + }
60 + </style>
61 + `;
62 + return tag;
63 +}
64 +
65 +
66 +
67 +exports.foodInfo_search = function (request, response) {
68 + var body = '';
69 + request.on('data', function (data) {
70 + body = body + data;
71 + });
72 + request.on('end', function () {
73 + var post = qs.parse(body);
74 + db.query(`SELECT * FROM fooddb`, function (error, foodInfo) {
75 + var title = '식품 영양정보';
76 + var description = '입력한 음식의 영양 정보(칼로리, 단백질, 지방, 탄수화물, 나트륨)를 알려드립니다!';
77 + var search = post.search; // 검색어
78 + var num = 0; // 검색된 개수
79 + var foodName = '';
80 + var list = [];
81 + //console.log(foodInfo[0]);
82 + for (var i = 0; i < foodInfo.length; i++) {
83 + foodName = foodInfo[i].name;
84 + if (foodName.indexOf(search) >= 0) {
85 + list.push(i);
86 + num += 1;
87 + }
88 + }
89 + var html = template.html(title, `
90 + <div style= "font-size:25px; background-color:#ffffff">
91 + <h2><font color="black">${title}<div style= "font-size:10px;"><br><div style= "font-size:20px;">${description}</font></div></h2>
92 + <form action="/foodInfo_search" method="post">
93 + <input type = 'text' name = 'search' placeholder = '검색어 입력' maxlength = 255 value = "" autocomplete = "off" style="width:300px;height:20px;font-size:20px;">
94 + <button type = "submit" name = "click" style="font-size:20px;">검색</button>
95 + </form>
96 + <p style= "font-size:20px;">${search}(으)로 검색된 결과 : ${num}개</p>
97 + </div>
98 + ${foodTable(foodInfo, list, num)}
99 + <br><br>
100 + `);
101 + response.writeHead(200);
102 + response.end(html);
103 +
104 + });
105 + });
106 +}
...\ No newline at end of file ...\ No newline at end of file
1 <html> 1 <html>
2 2
3 <head> 3 <head>
4 - <title>로그인 페이지</title> 4 + <title>Culture Gallery</title>
5 <link rel="stylesheet" href='/stylesheets/login_style.css' type="text/css"> 5 <link rel="stylesheet" href='/stylesheets/login_style.css' type="text/css">
6 <script src="https://developers.kakao.com/sdk/js/kakao.js"></script> 6 <script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
7 7
......
1 -<!DOCTYPE html>
2 -<html>
3 - <head>
4 - <title>login main page title</title>
5 - </head>
6 -</html>
...\ No newline at end of file ...\ No newline at end of file
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
9 <header> 9 <header>
10 <div class="nav-bar"> 10 <div class="nav-bar">
11 <img src="../images/camera.png" alt="" class="logo"> 11 <img src="../images/camera.png" alt="" class="logo">
12 -
13 <ul class="menu"> 12 <ul class="menu">
14 <li><a href="">Home</a></li> 13 <li><a href="">Home</a></li>
15 <li><a href="">Services</a></li> 14 <li><a href="">Services</a></li>
...@@ -18,17 +17,14 @@ ...@@ -18,17 +17,14 @@
18 <li><a href="">Career</a></li> 17 <li><a href="">Career</a></li>
19 <li><a href="">Contact</a></li> 18 <li><a href="">Contact</a></li>
20 </ul> 19 </ul>
21 -
22 </div> 20 </div>
23 - <div class="welcome">
24 -
25 - <h1>어떤 공연을 찾으시나요?</h1>
26 - <a href="#" class="btn btn1">나의 근처 공연</a>
27 - <a href="#" class="btn btn2">검색하기</a>
28 - <a href="login" class="btn btn3">로그인</a>
29 - </div>
30 -
31 </header> 21 </header>
22 + <div class="welcome">
23 + <h1>어떤 공연을 찾으시나요?</h1>
24 + <a href="mappage" class="btn btn1">나의 근처 공연</a>
25 + <a href="#" class="btn btn2">검색하기</a>
26 + <a href="login" class="btn btn3">로그인</a>
27 + </div>
32 </body> 28 </body>
33 29
34 </html> 30 </html>
...\ No newline at end of file ...\ No newline at end of file
......
1 -<!DOCTYPE html>
2 -<html>
3 -
4 -<head>
5 - <meta charset="utf-8">
6 - <title>geolocation으로 마커 표시하기</title>
7 -
8 -</head>
9 -
10 -<body>
11 - <p style="margin-top:-12px">
12 - <b>Chrome 브라우저는 https 환경에서만 geolocation을 지원합니다.</b> 참고해주세요.
13 - </p>
14 - <div id="map" style="width:500px;height:350px;"></div>
15 -
16 - <script type="text/javascript"
17 - src="//dapi.kakao.com/v2/maps/sdk.js?appkey=a3386042ab2e0550ea06d265855b452c">//kakao map api 주소 받아옴</script>
18 - <script>
19 - var mysql = require('mysql');
20 -
21 - var mapContainer = document.getElementById('map'), // 지도를 표시할 div
22 - mapOption = {
23 - center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
24 - level: 10 // 지도의 확대 레벨
25 - };
26 -
27 - var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
28 -
29 - // HTML5의 geolocation으로 사용할 수 있는지 확인합니다
30 - if (navigator.geolocation) {
31 -
32 - // GeoLocation을 이용해서 접속 위치를 얻어옵니다
33 - navigator.geolocation.getCurrentPosition(function (position) {
34 -
35 - var lat = position.coords.latitude, // 위도
36 - lon = position.coords.longitude; // 경도
37 - console.log(lat);
38 - console.log(lon);
39 - var locPosition = new kakao.maps.LatLng(lat, lon), // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다
40 - message = '<div style="padding:5px;">여기에 계신가요?!</div>'; // 인포윈도우에 표시될 내용입니다
41 -
42 - // 마커와 인포윈도우를 표시합니다
43 - displayMarker(locPosition, message);
44 - });
45 -
46 - } else { // HTML5의 GeoLocation을 사용할 수 없을때 마커 표시 위치와 인포윈도우 내용을 설정합니다
47 -
48 - var locPosition = new kakao.maps.LatLng(33.450701, 126.570667),
49 - message = 'geolocation을 사용할수 없어요..'
50 -
51 - displayMarker(locPosition, message);
52 - }
53 -
54 - /////////// sql 데이터 불러옴 /////////////////
55 - var near_show_list = [];
56 - var connection = mysql.createConnection({
57 - "host": "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
58 - "user": "root",
59 - "password": "dldbwp1207",
60 - "port": "3306",
61 - "database": "showdata"
62 - });
63 -
64 - connection.connect();
65 - var dataNum = 0;
66 - connection.query('SELECT COUNT (*) AS cnt FROM SHOW_DATA', function (error, results, field) {
67 - if (error) {
68 - console.log(error);
69 - }
70 - console.log(results[0].cnt);
71 - dataNum = results[0].cnt;
72 - });
73 -
74 - connection.query('SELECT id,latitude,longitude FROM SHOW_DATA', function (error, results, field) {
75 - if (error) {
76 - console.log(error);
77 - }
78 - console.log([lat, lon]);
79 - for (var i = 0; i < dataNum; i++) {
80 - var latgap = (lat - results[i].latitude) * 110;
81 - var longap = (lon - results[i].longitude) * 91;
82 - var cal = latgap * latgap + longap * longap;
83 -
84 - //내 위치 반경 키로수 ^ 2만큼 cal 값 push -> content 위치
85 - if (cal <= 1600) {
86 - console.log(results[i].id);
87 - near_show_list.push([results[i].id, results[i].latitude, results[i].longitude]);
88 - }
89 - }
90 - });
91 -
92 - connection.end();
93 - ////////////////////////////////////////////////
94 -
95 -
96 - displayShows(near_show_list);
97 - //// displayShows() 정의 ////
98 - function displayShows(near_list) {
99 - var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
100 - var kakao_near_list = [];
101 - for (var i = 0; i < near_list.length; i++) {
102 - kakao_near_list.push({
103 - title: id,
104 - lating: new kakao.maps.Lating(near_list[i][1], near_list[i][2])
105 - })
106 - }
107 - for (var i = 0; i < kakao_near_list.length; i++) {
108 -
109 - // 마커 이미지의 이미지 크기 입니다
110 - var imageSize = new kakao.maps.Size(24, 35);
111 -
112 - // 마커 이미지를 생성합니다
113 - var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize);
114 -
115 - // 마커를 생성합니다
116 - var marker = new kakao.maps.Marker({
117 - map: map, // 마커를 표시할 지도
118 - position: kakao_near_list[i].latlng, // 마커를 표시할 위치
119 - title: kakao_near_list[i].title, // 마커의 타이틀, 마커에 마우스를 올리면 타이틀이 표시됩니다
120 - image: markerImage // 마커 이미지
121 - });
122 - }
123 - }
124 -
125 - /// displayMarker 함수 정의 ///
126 - // 지도에 마커와 인포윈도우를 표시하는 함수입니다
127 - function displayMarker(locPosition, message) {
128 -
129 - // 마커를 생성합니다
130 - var marker = new kakao.maps.Marker({
131 - map: map,
132 - position: locPosition
133 - });
134 -
135 - var iwContent = message, // 인포윈도우에 표시할 내용
136 - iwRemoveable = true;
137 -
138 - // 인포윈도우를 생성합니다
139 - var infowindow = new kakao.maps.InfoWindow({
140 - content: iwContent,
141 - removable: iwRemoveable
142 - });
143 -
144 - // 인포윈도우를 마커위에 표시합니다
145 - infowindow.open(map, marker);
146 -
147 - // 지도 중심좌표를 접속위치로 변경합니다
148 - map.setCenter(locPosition);
149 - }
150 - </script>
151 -</body>
152 -
153 -</html>
...\ No newline at end of file ...\ No newline at end of file