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)