diff --git a/backend/Pipfile b/backend/Pipfile
index dacfe5f5..56af6a1d 100644
--- a/backend/Pipfile
+++ b/backend/Pipfile
@@ -1,16 +1,24 @@
[[source]]
+
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
+
[dev-packages]
+
black = "==19.3b0"
+
[packages]
+
django = "==2.2.3"
-psycopg2-binary = "==2.8.3"
+"psycopg2-binary" = "==2.8.3"
djangorestframework = "==3.9.2"
python-dotenv = "==0.10.3"
+requests = "*"
+
[requires]
+
python_version = "3.7"
diff --git a/backend/Pipfile.lock b/backend/Pipfile.lock
index 4ed4cb87..f2097ac4 100644
--- a/backend/Pipfile.lock
+++ b/backend/Pipfile.lock
@@ -1,7 +1,20 @@
{
"_meta": {
"hash": {
- "sha256": "b12c2913a332b88450c418bf00e9e7bd2ac86b6fac05432df3b16372fe96c93f"
+ "sha256": "a2cc53ba7d525b3f53f0518e64c3d20a7c5f88e0e6a7ef1929e7904161292146"
+ },
+ "host-environment-markers": {
+ "implementation_name": "cpython",
+ "implementation_version": "3.7.3",
+ "os_name": "posix",
+ "platform_machine": "x86_64",
+ "platform_python_implementation": "CPython",
+ "platform_release": "18.7.0",
+ "platform_system": "Darwin",
+ "platform_version": "Darwin Kernel Version 18.7.0: Tue Aug 20 16:57:14 PDT 2019; root:xnu-4903.271.2~2/RELEASE_X86_64",
+ "python_full_version": "3.7.3",
+ "python_version": "3.7",
+ "sys_platform": "darwin"
},
"pipfile-spec": 6,
"requires": {
@@ -16,114 +29,75 @@
]
},
"default": {
+ "certifi": {
+ "hashes": [],
+ "version": "==2019.9.11"
+ },
+ "chardet": {
+ "hashes": [],
+ "version": "==3.0.4"
+ },
"django": {
- "hashes": [
- "sha256:4d23f61b26892bac785f07401bc38cbf8fa4cec993f400e9cd9ddf28fd51c0ea",
- "sha256:6e974d4b57e3b29e4882b244d40171d6a75202ab8d2402b8e8adbd182e25cf0c"
- ],
- "index": "pypi",
+ "hashes": [],
"version": "==2.2.3"
},
"djangorestframework": {
- "hashes": [
- "sha256:8a435df9007c8b7d8e69a21ef06650e3c0cbe0d4b09e55dd1bd74c89a75a9fcd",
- "sha256:f7a266260d656e1cf4ca54d7a7349609dc8af4fe2590edd0ecd7d7643ea94a17"
- ],
- "index": "pypi",
+ "hashes": [],
"version": "==3.9.2"
},
+ "idna": {
+ "hashes": [],
+ "version": "==2.8"
+ },
"psycopg2-binary": {
- "hashes": [
- "sha256:080c72714784989474f97be9ab0ddf7b2ad2984527e77f2909fcd04d4df53809",
- "sha256:110457be80b63ff4915febb06faa7be002b93a76e5ba19bf3f27636a2ef58598",
- "sha256:171352a03b22fc099f15103959b52ee77d9a27e028895d7e5fde127aa8e3bac5",
- "sha256:19d013e7b0817087517a4b3cab39c084d78898369e5c46258aab7be4f233d6a1",
- "sha256:249b6b21ae4eb0f7b8423b330aa80fab5f821b9ffc3f7561a5e2fd6bb142cf5d",
- "sha256:2ac0731d2d84b05c7bb39e85b7e123c3a0acd4cda631d8d542802c88deb9e87e",
- "sha256:2b6d561193f0dc3f50acfb22dd52ea8c8dfbc64bcafe3938b5f209cc17cb6f00",
- "sha256:2bd23e242e954214944481124755cbefe7c2cf563b1a54cd8d196d502f2578bf",
- "sha256:3e1239242ca60b3725e65ab2f13765fc199b03af9eaf1b5572f0e97bdcee5b43",
- "sha256:3eb70bb697abbe86b1d2b1316370c02ba320bfd1e9e35cf3b9566a855ea8e4e5",
- "sha256:51a2fc7e94b98bd1bb5d4570936f24fc2b0541b63eccadf8fdea266db8ad2f70",
- "sha256:52f1bdafdc764b7447e393ed39bb263eccb12bfda25a4ac06d82e3a9056251f6",
- "sha256:5b3581319a3951f1e866f4f6c5e42023db0fae0284273b82e97dfd32c51985cd",
- "sha256:63c1b66e3b2a3a336288e4bcec499e0dc310cd1dceaed1c46fa7419764c68877",
- "sha256:8123a99f24ecee469e5c1339427bcdb2a33920a18bb5c0d58b7c13f3b0298ba3",
- "sha256:85e699fcabe7f817c0f0a412d4e7c6627e00c412b418da7666ff353f38e30f67",
- "sha256:8dbff4557bbef963697583366400822387cccf794ccb001f1f2307ed21854c68",
- "sha256:908d21d08d6b81f1b7e056bbf40b2f77f8c499ab29e64ec5113052819ef1c89b",
- "sha256:af39d0237b17d0a5a5f638e9dffb34013ce2b1d41441fd30283e42b22d16858a",
- "sha256:af51bb9f055a3f4af0187149a8f60c9d516cf7d5565b3dac53358796a8fb2a5b",
- "sha256:b2ecac57eb49e461e86c092761e6b8e1fd9654dbaaddf71a076dcc869f7014e2",
- "sha256:cd37cc170678a4609becb26b53a2bc1edea65177be70c48dd7b39a1149cabd6e",
- "sha256:d17e3054b17e1a6cb8c1140f76310f6ede811e75b7a9d461922d2c72973f583e",
- "sha256:d305313c5a9695f40c46294d4315ed3a07c7d2b55e48a9010dad7db7a66c8b7f",
- "sha256:dd0ef0eb1f7dd18a3f4187226e226a7284bda6af5671937a221766e6ef1ee88f",
- "sha256:e1adff53b56db9905db48a972fb89370ad5736e0450b96f91bcf99cadd96cfd7",
- "sha256:f0d43828003c82dbc9269de87aa449e9896077a71954fbbb10a614c017e65737",
- "sha256:f78e8b487de4d92640105c1389e5b90be3496b1d75c90a666edd8737cc2dbab7"
- ],
- "index": "pypi",
+ "hashes": [],
"version": "==2.8.3"
},
"python-dotenv": {
- "hashes": [
- "sha256:debd928b49dbc2bf68040566f55cdb3252458036464806f4094487244e2a4093",
- "sha256:f157d71d5fec9d4bd5f51c82746b6344dffa680ee85217c123f4a0c8117c4544"
- ],
- "index": "pypi",
+ "hashes": [],
"version": "==0.10.3"
},
"pytz": {
- "hashes": [
- "sha256:26c0b32e437e54a18161324a2fca3c4b9846b74a8dccddd843113109e1116b32",
- "sha256:c894d57500a4cd2d5c71114aaab77dbab5eabd9022308ce5ac9bb93a60a6f0c7"
- ],
- "version": "==2019.2"
+ "hashes": [],
+ "version": "==2019.3"
+ },
+ "requests": {
+ "hashes": [],
+ "version": "==2.22.0"
},
"sqlparse": {
- "hashes": [
- "sha256:40afe6b8d4b1117e7dff5504d7a8ce07d9a1b15aeeade8a2d10f130a834f8177",
- "sha256:7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873"
- ],
+ "hashes": [],
"version": "==0.3.0"
+ },
+ "typing": {
+ "hashes": [],
+ "markers": "python_version < '3.5'",
+ "version": "==3.7.4.1"
+ },
+ "urllib3": {
+ "hashes": [],
+ "version": "==1.25.6"
}
},
"develop": {
"appdirs": {
- "hashes": [
- "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92",
- "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
- ],
+ "hashes": [],
"version": "==1.4.3"
},
"attrs": {
- "hashes": [
- "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79",
- "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"
- ],
- "version": "==19.1.0"
+ "hashes": [],
+ "version": "==19.2.0"
},
"black": {
- "hashes": [
- "sha256:09a9dcb7c46ed496a9850b76e4e825d6049ecd38b611f1224857a79bd985a8cf",
- "sha256:68950ffd4d9169716bcb8719a56c07a2f4485354fec061cdd5910aa07369731c"
- ],
- "index": "pypi",
+ "hashes": [],
"version": "==19.3b0"
},
"click": {
- "hashes": [
- "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
- "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
- ],
+ "hashes": [],
"version": "==7.0"
},
"toml": {
- "hashes": [
- "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c",
- "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"
- ],
+ "hashes": [],
"version": "==0.10.0"
}
}
diff --git a/backend/easymap.py b/backend/easymap.py
new file mode 100644
index 00000000..a03f7ca0
--- /dev/null
+++ b/backend/easymap.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+
+import requests
+import re
+
+def get_session():
+ easymap_url = "http://easymap.land.moi.gov.tw/P02/Index"
+ sess = requests.Session()
+ sess.headers.update({"User-Agent": "Mozilla/5.0"})
+ del sess.headers["Accept-Encoding"]
+ del sess.headers["Accept"]
+ del sess.headers["Connection"]
+ sess.get(easymap_url)
+ return sess
+
+def get_point_city(sess, x, y):
+ point_city_url = "http://easymap.land.moi.gov.tw/P02/Query_json_getPointCity"
+ # point_city_url = "http://localhost:1234"
+ data = { "wgs84x": x, "wgs84y": y }
+ r = sess.post(point_city_url, data=data)
+ return r.json()
+
+def get_token(sess):
+ set_token_url = "http://easymap.land.moi.gov.tw/P02/pages/setToken.jsp"
+ token_re = re.compile('')
+ r = sess.post(set_token_url)
+ return dict([
+ (m.group(1), m.group(2))
+ for m in token_re.finditer(r.text)
+ ])
+
+def get_land_number(sess, x, y, city, token):
+ get_door_json_url = "http://easymap.land.moi.gov.tw/P02/Door_json_getDoorInfoByXY"
+ data = { "city": city["cityCode"], "coordX": x, "coordY": y, **token }
+ resp = sess.post(get_door_json_url,
+ data=data)
+ return resp
+
+def main(x, y):
+ sess = get_session()
+ city = get_point_city(sess, x=x, y=y)
+ token = get_token(sess)
+ r = get_land_number(sess, x=x, y=y, city=city, token=token)
+ print(r.text)
+
+if __name__ == "__main__":
+ import sys
+ if len(sys.argv) != 3:
+ print("Usage: easymap.py ")
+ sys.exit(-1)
+ x = sys.argv[1]
+ y = sys.argv[2]
+ main(x=x, y=y)