[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: 回報錯誤\ntitle: 摘要一下問題吧\nlabels: bug\nassignees: virus-warnning\n\n---\n\n**問題描述**\n\n盡可能清楚地描述狀況，讓我觀落陰不會走火入魔\n\n**重現方法**\n\n用下列步驟可以讓程式爆掉\n1. python3 -m twnews ...\n2. ...\n\n**預期行為**\n\n我本來覺得應該會這樣 ...\n\n**實際行為**\n\n結果變成這樣 ...\n```bash\n$ python3 -m twnews soup \n---------------------------------------------------------------------------\n路徑: https://tw.news.appledaily.com/local/realtime/20181025/1453825\n頻道: appledaily\n標題: 男子疑久病厭世　學校圍牆上吊輕生亡\n日期: 2018-10-25 12:03:00\n記者: None\n內文:\n台北市北投區西安街二段\n```\n\n**系統環境**\n\n - Python: [至少要 3.5 以上喔]\n - OS: [例如 Ubuntu 18.04]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: 許個願望\ntitle: 想要一個神奇的功能\nlabels: enhancement\nassignees: virus-warnning\n\n---\n\n**許願動機**\n\n描述一下這個願望能滿足什麼需求，或是對大家有什麼貢獻，現有功能無法滿足的原因等\n\n**具體用法**\n\n描述一下這個願望想做成什麼樣的形式，例如 function 定義，或是 command 用法\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/improvement.md",
    "content": "---\nname: Improvement\nabout: 現有功能改善\ntitle: OOO效能改善\nlabels: improvement\nassignees: virus-warnning\n\n---\n\n**問題摘要**\n\n描述一下現有功能的問題，例如效能不佳，誤判率太高\n\n**改善方式**\n\n例如調整 SQL 語法，調整 Regex Pattern，或是改用OO演算法等\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/magic.md",
    "content": "---\nname: Magic\nabout: 變個魔法 (不提供訪客使用)\ntitle: 變個魔法\nlabels: magic\nassignees: virus-warnning\n\n---\n\n**咒語內容**\n\n希望機器人可以自己發現八卦，然後自動告訴主人\n\n**施法細節**\n\n* [ ] 首先要 OOO\n* [ ] 然後要 XXX\n"
  },
  {
    "path": ".gitignore",
    "content": "# Python 3\n*.pyc\n__pycache__\n\n# Testing report\n.coverage\n\n# setup.py\ndist\nbuild\ntwnews.egg-info\n\n# virtualenv\nsandbox\n\n# vim\n*.swp\n\n# MacOS\n.DS_Store\n"
  },
  {
    "path": ".pylintrc",
    "content": "[MASTER]\n\n# A comma-separated list of package or module names from where C extensions may\n# be loaded. Extensions are loading into the active Python interpreter and may\n# run arbitrary code.\nextension-pkg-whitelist=\n\n# Add files or directories to the blacklist. They should be base names, not\n# paths.\nignore=CVS\n\n# Add files or directories matching the regex patterns to the blacklist. The\n# regex matches against base names, not paths.\nignore-patterns=\n\n# Python code to execute, usually for sys.path manipulation such as\n# pygtk.require().\n#init-hook=\n\n# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the\n# number of processors available to use.\njobs=1\n\n# Control the amount of potential inferred values when inferring a single\n# object. This can help the performance when dealing with large functions or\n# complex, nested conditions.\nlimit-inference-results=100\n\n# List of plugins (as comma separated values of python modules names) to load,\n# usually to register additional checkers.\nload-plugins=\n\n# Pickle collected data for later comparisons.\npersistent=yes\n\n# Specify a configuration file.\n#rcfile=\n\n# When enabled, pylint would attempt to guess common misconfiguration and emit\n# user-friendly hints instead of false-positive error messages.\nsuggestion-mode=yes\n\n# Allow loading of arbitrary C extensions. Extensions are imported into the\n# active Python interpreter and may run arbitrary code.\nunsafe-load-any-extension=no\n\n\n[MESSAGES CONTROL]\n\n# Only show warnings with the listed confidence levels. Leave empty to show\n# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED.\nconfidence=\n\n# Disable the message, report, category or checker with the given id(s). You\n# can either give multiple identifiers separated by comma (,) or put this\n# option multiple times (only on the command line, not in the configuration\n# file where it should appear only once). You can also use \"--disable=all\" to\n# disable everything first and then reenable specific checks. For example, if\n# you want to run only the similarities checker, you can use \"--disable=all\n# --enable=similarities\". If you want to run only the classes checker, but have\n# no Warning level messages displayed, use \"--disable=all --enable=classes\n# --disable=W\".\ndisable=print-statement,\n        parameter-unpacking,\n        unpacking-in-except,\n        old-raise-syntax,\n        backtick,\n        long-suffix,\n        old-ne-operator,\n        old-octal-literal,\n        import-star-module-level,\n        non-ascii-bytes-literal,\n        raw-checker-failed,\n        bad-inline-option,\n        locally-disabled,\n        file-ignored,\n        suppressed-message,\n        useless-suppression,\n        deprecated-pragma,\n        use-symbolic-message-instead,\n        apply-builtin,\n        basestring-builtin,\n        buffer-builtin,\n        cmp-builtin,\n        coerce-builtin,\n        execfile-builtin,\n        file-builtin,\n        long-builtin,\n        raw_input-builtin,\n        reduce-builtin,\n        standarderror-builtin,\n        unicode-builtin,\n        xrange-builtin,\n        coerce-method,\n        delslice-method,\n        getslice-method,\n        setslice-method,\n        no-absolute-import,\n        old-division,\n        dict-iter-method,\n        dict-view-method,\n        next-method-called,\n        metaclass-assignment,\n        indexing-exception,\n        raising-string,\n        reload-builtin,\n        oct-method,\n        hex-method,\n        nonzero-method,\n        cmp-method,\n        input-builtin,\n        round-builtin,\n        intern-builtin,\n        unichr-builtin,\n        map-builtin-not-iterating,\n        zip-builtin-not-iterating,\n        range-builtin-not-iterating,\n        filter-builtin-not-iterating,\n        using-cmp-argument,\n        eq-without-hash,\n        div-method,\n        idiv-method,\n        rdiv-method,\n        exception-message-attribute,\n        invalid-str-codec,\n        sys-max-int,\n        bad-python3-import,\n        deprecated-string-function,\n        deprecated-str-translate-call,\n        deprecated-itertools-function,\n        deprecated-types-field,\n        next-method-defined,\n        dict-items-not-iterating,\n        dict-keys-not-iterating,\n        dict-values-not-iterating,\n        deprecated-operator-function,\n        deprecated-urllib-function,\n        xreadlines-attribute,\n        deprecated-sys-function,\n        exception-escape,\n        comprehension-escape,\n        duplicate-code,\n        fixme\n\n# Enable the message, report, category or checker with the given id(s). You can\n# either give multiple identifier separated by comma (,) or put this option\n# multiple time (only on the command line, not in the configuration file where\n# it should appear only once). See also the \"--disable\" option for examples.\nenable=c-extension-no-member\n\n\n[REPORTS]\n\n# Python expression which should return a note less than 10 (10 is the highest\n# note). You have access to the variables errors warning, statement which\n# respectively contain the number of errors / warnings messages and the total\n# number of statements analyzed. This is used by the global evaluation report\n# (RP0004).\nevaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)\n\n# Template used to display messages. This is a python new-style format string\n# used to format the message information. See doc for all details.\n#msg-template=\n\n# Set the output format. Available formats are text, parseable, colorized, json\n# and msvs (visual studio). You can also give a reporter class, e.g.\n# mypackage.mymodule.MyReporterClass.\noutput-format=text\n\n# Tells whether to display a full report or only the messages.\nreports=no\n\n# Activate the evaluation score.\nscore=yes\n\n\n[REFACTORING]\n\n# Maximum number of nested blocks for function / method body\nmax-nested-blocks=5\n\n# Complete name of functions that never returns. When checking for\n# inconsistent-return-statements if a never returning function is called then\n# it will be considered as an explicit return statement and no message will be\n# printed.\nnever-returning-functions=sys.exit\n\n\n[LOGGING]\n\n# Format style used to check logging format string. `old` means using %\n# formatting, while `new` is for `{}` formatting.\nlogging-format-style=old\n\n# Logging modules to check that the string format arguments are in logging\n# function parameter format.\nlogging-modules=logging\n\n\n[SPELLING]\n\n# Limits count of emitted suggestions for spelling mistakes.\nmax-spelling-suggestions=4\n\n# Spelling dictionary name. Available dictionaries: none. To make it working\n# install python-enchant package..\nspelling-dict=\n\n# List of comma separated words that should not be checked.\nspelling-ignore-words=\n\n# A path to a file that contains private dictionary; one word per line.\nspelling-private-dict-file=\n\n# Tells whether to store unknown words to indicated private dictionary in\n# --spelling-private-dict-file option instead of raising a message.\nspelling-store-unknown-words=no\n\n\n[MISCELLANEOUS]\n\n# List of note tags to take in consideration, separated by a comma.\nnotes=FIXME,\n      XXX,\n      TODO\n\n\n[TYPECHECK]\n\n# List of decorators that produce context managers, such as\n# contextlib.contextmanager. Add to this list to register other decorators that\n# produce valid context managers.\ncontextmanager-decorators=contextlib.contextmanager\n\n# List of members which are set dynamically and missed by pylint inference\n# system, and so shouldn't trigger E1101 when accessed. Python regular\n# expressions are accepted.\ngenerated-members=\n\n# Tells whether missing members accessed in mixin class should be ignored. A\n# mixin class is detected if its name ends with \"mixin\" (case insensitive).\nignore-mixin-members=yes\n\n# Tells whether to warn about missing members when the owner of the attribute\n# is inferred to be None.\nignore-none=yes\n\n# This flag controls whether pylint should warn about no-member and similar\n# checks whenever an opaque object is returned when inferring. The inference\n# can return multiple potential results while evaluating a Python object, but\n# some branches might not be evaluated, which results in partial inference. In\n# that case, it might be useful to still emit no-member and other checks for\n# the rest of the inferred objects.\nignore-on-opaque-inference=yes\n\n# List of class names for which member attributes should not be checked (useful\n# for classes with dynamically set attributes). This supports the use of\n# qualified names.\nignored-classes=optparse.Values,thread._local,_thread._local\n\n# List of module names for which member attributes should not be checked\n# (useful for modules/projects where namespaces are manipulated during runtime\n# and thus existing member attributes cannot be deduced by static analysis. It\n# supports qualified module names, as well as Unix pattern matching.\nignored-modules=\n\n# Show a hint with possible names when a member name was not found. The aspect\n# of finding the hint is based on edit distance.\nmissing-member-hint=yes\n\n# The minimum edit distance a name should have in order to be considered a\n# similar match for a missing member name.\nmissing-member-hint-distance=1\n\n# The total number of similar names that should be taken in consideration when\n# showing a hint for a missing member.\nmissing-member-max-choices=1\n\n\n[VARIABLES]\n\n# List of additional names supposed to be defined in builtins. Remember that\n# you should avoid defining new builtins when possible.\nadditional-builtins=\n\n# Tells whether unused global variables should be treated as a violation.\nallow-global-unused-variables=yes\n\n# List of strings which can identify a callback function by name. A callback\n# name must start or end with one of those strings.\ncallbacks=cb_,\n          _cb\n\n# A regular expression matching the name of dummy variables (i.e. expected to\n# not be used).\ndummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_\n\n# Argument names that match this expression will be ignored. Default to name\n# with leading underscore.\nignored-argument-names=_.*|^ignored_|^unused_\n\n# Tells whether we should check for unused import in __init__ files.\ninit-import=no\n\n# List of qualified module names which can have objects that can redefine\n# builtins.\nredefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io\n\n\n[FORMAT]\n\n# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.\nexpected-line-ending-format=\n\n# Regexp for a line that is allowed to be longer than the limit.\nignore-long-lines=^\\s*(# )?<?https?://\\S+>?$\n\n# Number of spaces of indent required inside a hanging or continued line.\nindent-after-paren=4\n\n# String used as indentation unit. This is usually \"    \" (4 spaces) or \"\\t\" (1\n# tab).\nindent-string='    '\n\n# Maximum number of characters on a single line.\nmax-line-length=100\n\n# Maximum number of lines in a module.\nmax-module-lines=1000\n\n# List of optional constructs for which whitespace checking is disabled. `dict-\n# separator` is used to allow tabulation in dicts, etc.: {1  : 1,\\n222: 2}.\n# `trailing-comma` allows a space between comma and closing bracket: (a, ).\n# `empty-line` allows space-only lines.\nno-space-check=trailing-comma,\n               dict-separator\n\n# Allow the body of a class to be on the same line as the declaration if body\n# contains single statement.\nsingle-line-class-stmt=no\n\n# Allow the body of an if to be on the same line as the test if there is no\n# else.\nsingle-line-if-stmt=no\n\n\n[SIMILARITIES]\n\n# Ignore comments when computing similarities.\nignore-comments=yes\n\n# Ignore docstrings when computing similarities.\nignore-docstrings=yes\n\n# Ignore imports when computing similarities.\nignore-imports=no\n\n# Minimum lines number of a similarity.\nmin-similarity-lines=4\n\n\n[BASIC]\n\n# Naming style matching correct argument names.\nargument-naming-style=snake_case\n\n# Regular expression matching correct argument names. Overrides argument-\n# naming-style.\n#argument-rgx=\n\n# Naming style matching correct attribute names.\nattr-naming-style=snake_case\n\n# Regular expression matching correct attribute names. Overrides attr-naming-\n# style.\n#attr-rgx=\n\n# Bad variable names which should always be refused, separated by a comma.\nbad-names=foo,\n          bar,\n          baz,\n          toto,\n          tutu,\n          tata\n\n# Naming style matching correct class attribute names.\nclass-attribute-naming-style=any\n\n# Regular expression matching correct class attribute names. Overrides class-\n# attribute-naming-style.\n#class-attribute-rgx=\n\n# Naming style matching correct class names.\nclass-naming-style=PascalCase\n\n# Regular expression matching correct class names. Overrides class-naming-\n# style.\n#class-rgx=\n\n# Naming style matching correct constant names.\nconst-naming-style=UPPER_CASE\n\n# Regular expression matching correct constant names. Overrides const-naming-\n# style.\n#const-rgx=\n\n# Minimum line length for functions/classes that require docstrings, shorter\n# ones are exempt.\ndocstring-min-length=-1\n\n# Naming style matching correct function names.\nfunction-naming-style=snake_case\n\n# Regular expression matching correct function names. Overrides function-\n# naming-style.\n#function-rgx=\n\n# Good variable names which should always be accepted, separated by a comma.\ngood-names=i,\n           j,\n           k,\n           ex,\n           Run,\n           _\n\n# Include a hint for the correct naming format with invalid-name.\ninclude-naming-hint=no\n\n# Naming style matching correct inline iteration names.\ninlinevar-naming-style=any\n\n# Regular expression matching correct inline iteration names. Overrides\n# inlinevar-naming-style.\n#inlinevar-rgx=\n\n# Naming style matching correct method names.\nmethod-naming-style=snake_case\n\n# Regular expression matching correct method names. Overrides method-naming-\n# style.\n#method-rgx=\n\n# Naming style matching correct module names.\nmodule-naming-style=snake_case\n\n# Regular expression matching correct module names. Overrides module-naming-\n# style.\n#module-rgx=\n\n# Colon-delimited sets of names that determine each other's naming style when\n# the name regexes allow several styles.\nname-group=\n\n# Regular expression which should only match function or class names that do\n# not require a docstring.\nno-docstring-rgx=^_\n\n# List of decorators that produce properties, such as abc.abstractproperty. Add\n# to this list to register other decorators that produce valid properties.\n# These decorators are taken in consideration only for invalid-name.\nproperty-classes=abc.abstractproperty\n\n# Naming style matching correct variable names.\nvariable-naming-style=snake_case\n\n# Regular expression matching correct variable names. Overrides variable-\n# naming-style.\n#variable-rgx=\n\n\n[STRING]\n\n# This flag controls whether the implicit-str-concat-in-sequence should\n# generate a warning on implicit string concatenation in sequences defined over\n# several lines.\ncheck-str-concat-over-line-jumps=no\n\n\n[IMPORTS]\n\n# Allow wildcard imports from modules that define __all__.\nallow-wildcard-with-all=no\n\n# Analyse import fallback blocks. This can be used to support both Python 2 and\n# 3 compatible code, which means that the block might have code that exists\n# only in one or another interpreter, leading to false positives when analysed.\nanalyse-fallback-blocks=no\n\n# Deprecated modules which should not be used, separated by a comma.\ndeprecated-modules=optparse,tkinter.tix\n\n# Create a graph of external dependencies in the given file (report RP0402 must\n# not be disabled).\next-import-graph=\n\n# Create a graph of every (i.e. internal and external) dependencies in the\n# given file (report RP0402 must not be disabled).\nimport-graph=\n\n# Create a graph of internal dependencies in the given file (report RP0402 must\n# not be disabled).\nint-import-graph=\n\n# Force import order to recognize a module as part of the standard\n# compatibility libraries.\nknown-standard-library=\n\n# Force import order to recognize a module as part of a third party library.\nknown-third-party=enchant\n\n\n[CLASSES]\n\n# List of method names used to declare (i.e. assign) instance attributes.\ndefining-attr-methods=__init__,\n                      __new__,\n                      setUp\n\n# List of member names, which should be excluded from the protected access\n# warning.\nexclude-protected=_asdict,\n                  _fields,\n                  _replace,\n                  _source,\n                  _make\n\n# List of valid names for the first argument in a class method.\nvalid-classmethod-first-arg=cls\n\n# List of valid names for the first argument in a metaclass class method.\nvalid-metaclass-classmethod-first-arg=cls\n\n\n[DESIGN]\n\n# Maximum number of arguments for function / method.\nmax-args=5\n\n# Maximum number of attributes for a class (see R0902).\nmax-attributes=7\n\n# Maximum number of boolean expressions in an if statement.\nmax-bool-expr=5\n\n# Maximum number of branch for function / method body.\nmax-branches=12\n\n# Maximum number of locals for function / method body.\nmax-locals=15\n\n# Maximum number of parents for a class (see R0901).\nmax-parents=7\n\n# Maximum number of public methods for a class (see R0904).\nmax-public-methods=20\n\n# Maximum number of return / yield for function / method body.\nmax-returns=6\n\n# Maximum number of statements in function / method body.\nmax-statements=50\n\n# Minimum number of public methods for a class (see R0903).\nmin-public-methods=2\n\n\n[EXCEPTIONS]\n\n# Exceptions that will emit a warning when being caught. Defaults to\n# \"BaseException, Exception\".\novergeneral-exceptions=BaseException,\n                       Exception\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Raymond Wu (小璋丸)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "PULL_REQUEST_TEMPLATE.md",
    "content": "**目的與用途**\n\n描述一下這個 PR 的目的與用途\n\n**被刪除的功能**\n\n如果有刪除某些功能，請說明刪除原因以及效益\n\n**被刪除的測試程式**\n\n如果有刪除測試程式，請說明為何不再需要測試，以及對應的替代方案\n"
  },
  {
    "path": "README.md",
    "content": "台灣新聞拆拆樂的用來蒐集或處理大眾感興趣的資訊，目前著重在新聞和市場情報，希望能藉由這個工具讓其他人變出各種好玩的衍生應用，目前提供這些功能：\n\n* 將新聞網頁拆出標題，內文，報導時間，記者\n* 關鍵字查新聞，並且可接續拆新聞或新聞數\n* 蒐集三大法人，信用交易，借券賣出，股權分散表等市場資訊\n\n## 為什麼做這個？\n\n最早的開發動機，是希望能做個工具能快速找到最新的凶宅，用來輔助我的另一個專案[鄉民風水師](https://geomancer.tacosync.com/)，實現資料自動更新，所以做了拆站工具和搜尋爬蟲。做了一段時間也開始有話題性，就修了一些大家反應的問題。然後希望維護這專案的負擔不要太重，又寫了一些能發財的東西，然後就變成現在的樣子。如果想了解更多以前的事，可以參考[版本異動紀錄](docs/changelog.md)。\n\n如果你是來找發財工具，另一個乏人問津的專案[群益證券聽牌機](https://github.com/virus-warnning/skcom)也歡迎來關注一下。 \n\n## 怎麼用？\n\n**系統需求**\n\n* OS: 不限\n* Python: 3.5 ~ 3.7\n\n**安裝**\n\n```sh\n# Windows (只有 Python 3.x 的環境)\npip install twnews\n\n# macOS, Linux (Python 2.x 與 3.x 並存的環境)\npip3 install twnews\n```\n\n**體驗**\n\n為了方便有緣人使用，開發了一些 console 工具讓人可以不用寫程式就立即體驗\n\n例如朝聖一則凶宅新聞：\n\n```bash\npython3 -m twnews soup https://www.setn.com/News.aspx?NewsID=490688&From=Search&Key=%E5%8F%B0%E4%B8%AD%E6%9C%80%E7%8C%9B%E5%85%87%E5%AE%85%EF%BC%81%E9%80%A36%E5%90%8D%E6%88%BF%E5%AE%A2%E5%90%8C%E4%BD%8D%E7%BD%AE%E4%B8%8A%E5%90%8A\n---------------------------------------------------------------------------\n原始路徑: https://www.setn.com/News.aspx?NewsID=490688\n最終路徑: https://www.setn.com/m/news.aspx?newsid=490688\n頻道: setn\n標題: 堪稱台中最猛兇宅！連續6名房客上吊　竟都死在相同位置\n日期: 2019-02-07 20:00:00\n記者: 林盈君\n內文:\n記者林盈君／台中報導許多人不論是租屋、購屋，都擔心會碰上兇宅，有位職業為房仲的網友，就在PTT上，分享他曾經遇過的詭異事件！\n他說約在幾年前，接到一個同行介紹的案子，是一間位於台中沙鹿的頂樓老公寓，當時他看到房屋價格時，簡直低到讓他不敢相信，詢問過\n屋主之後，屋主表示屋內曾有人上吊死亡，而且是「連續6名房客」，且竟然都在「同一位置」選擇輕生！▲該公寓曾發生6名租客上吊事件\n。（圖／示意圖／翻攝pixabay）據悉，幾年前曾有一名房客，在屋內上吊自殺，屋主之後請了法師來超渡誦經，就低價再次租給其他房客\n，不料6個月後，該房客卻遲遲沒有交租金，就連簡訊電話都無回應，他只好請警察協助開門，沒想到進到屋內就發現，房客已經上吊死亡\n，而且死亡的位置，跟第一個房客上吊的地方「一模一樣」，實在令人毛骨悚然。▲許多人認為這根本是「抓交替」。（圖／示意圖／翻攝\npixabay）在那之後，屋主連續租給其他幾位房客，但卻頻頻發生意外，6位租客全都選擇在屋內上吊自殺，上吊的位置也全部一模一樣，\n這樣詭異的情況，也讓轄區員警懷疑，屋主是不是殺害租客後，用上吊來掩蓋罪行，讓屋主相當崩潰！屋主曾無奈表示「1、2個就算了，是\n連續6個租客你知道嗎？」、「這6個租客我根本不知道為什麼他們最後都上吊死了，而且上吊的位置全都一模一樣」。更加詭異的是，連續\n6名房客上吊身亡後，屋主有2年多都沒再把房子出租，屋內空無一人，但對面鄰居卻跟他表示，看到有人進出他的房子，樓下的住戶也說，\n上面常常傳來很用力踩地板、拖著椅子及摔東西的聲音，甚至連一樓的住戶，都說看到房子的陽台上有人，但等到屋主拿鑰匙進屋查看時，\n發現從門口到陽台都是厚厚的灰塵，完全沒有任何人走動的跡象。因為發生過命案，再加上接連詭異的情況，讓對面鄰居和樓下住戶都陸續\n搬走，也有房仲找投資客來看房，但大家都覺得這房子太邪門，認為根本是「抓交替」。後來有位投資客表示意願想買，但到簽約當天屋主\n卻反悔，表示不想讓對方成為上吊身亡的「第七個人」，所以直到現在，那間房子依然空在那裡，也沒有其他房客入住。\n★ 三立新聞網提醒您：勇敢求救並非弱者，生命一定可以找到出路。透過守門123步驟-1問2應3轉介，你我都可以成為自殺防治守門人。\n※ 安心專線：0800-788-995（0800-請幫幫-救救我）\n※ 張老師專線：1980\n※ 生命線專線：1995\n※ 反霸凌專線：0800-200-885\n有效內容率: 2.16%\n---------------------------------------------------------------------------\n```\n\n## 深入了解\n\n* [新聞 Console 工具](https://github.com/virus-warnning/twnews/wiki/01.%E6%96%B0%E8%81%9E-Console-%E5%B7%A5%E5%85%B7)\n* [新聞 API](https://github.com/virus-warnning/twnews/wiki/02.%E6%96%B0%E8%81%9E-API)\n* [股市情報蒐集工具](https://github.com/virus-warnning/twnews/wiki/03.%E8%82%A1%E5%B8%82%E6%83%85%E5%A0%B1%E8%92%90%E9%9B%86%E5%B7%A5%E5%85%B7)\n"
  },
  {
    "path": "README.rst",
    "content": "台灣新聞拆拆樂 (twnews) 用來分解台灣各大新聞網站，取出重要的純文字內容\n\n功能\n====\n\n- 支援蘋果日報、中時電子報、中央社、東森新聞雲、自由時報、三立新聞網、聯合新聞網\n- 使用行動版網頁與快取機制節省流量\n- 盡可能找出記者姓名\n- 利用 BeautifulSoup 的 CSS selector 功能搭配設定檔分解，容易同步網站改版\n- 解決 Python for Windows CP950 編碼問題，節省處理鳥事的時間\n- 每週執行自動化測試檢查分解程式的時效性\n\n0.3.2 新功能\n\n- 更新東森新聞爬蟲設定\n- 解決自由地產、自由時尚因 lxml 版本太舊而拆失敗的問題\n- 新增證交所資料蒐集程式 (三大法人、信用交易、借券賣出、鉅額交易、ETF淨值溢價率)\n- 改善集保中心資料蒐集程式 (股權分散表)\n\n0.3.1 新功能\n\n- 跟進中時電子報的排版變更\n- 支援蘋果地產\n- 股權分散表資料表結構改善\n- 股權分散表資料表日期改為 ISO 格式\n\n0.3.0 新功能\n\n- 股權分散表 CSV 檔蒐集程式\n- 修正自由時報娛樂新聞分解問題 `#50 <https://github.com/virus-warnning/twnews/issues/50>`_ (回報者: `CpOuyang <https://github.com/CpOuyang>`_)\n\n0.2.4 新功能\n\n- 改善記者姓名辨識能力\n- 自由時報分類新聞自動切換手機版\n- 修正自由時報部分新聞無法取得日期問題\n- 修正中國時報部分新聞無法取得記者問題\n- 修正蘋果日報搜尋功能自動翻頁問題\n- 增加測試項目\n\n安裝\n====\n\n.. code:: bash\n\n  pip3 install twnews\n\n工具程式\n========\n\n.. code:: bash\n\n  # 拆新聞\n  python3 -m twnews soup https://tw.news.appledaily.com/local/realtime/20181025/1453825\n\n  # 搜尋\n  python3 -m twnews search 韓國瑜 udn\n\n  # 搜尋 + 拆\n  python3 -m twnews snsp 酒駕\n\n  # 統計關鍵字出現在標題的次數\n  python3 -m twnews cpkw 柯文哲\n\n  # 查看用法\n  python3 -m twnews help\n\n範例 - 分解新聞\n===============\n\n.. code:: python\n\n  from twnews.soup import NewsSoup\n\n  nsoup = NewsSoup('https://tw.news.appledaily.com/local/realtime/20181025/1453825')\n  print('頻道: {}'.format(nsoup.channel))\n  print('標題: {}'.format(nsoup.title()))\n  print('日期: {}'.format(nsoup.date()))\n  print('記者: {}'.format(nsoup.author()))\n  print('內文:')\n  print(nsoup.contents())\n  print('有效內容率: {:.2f}%'.format(nsoup.effective_text_rate() * 100))\n\n.. code:: text\n\n  頻道: appledaily\n  標題: 男子疑久病厭世　學校圍牆上吊輕生亡│即時新聞│20181025│蘋果日報\n  日期: 2018-10-25 12:03:00\n  記者: 江宏倫\n  內文:\n  台北市北投區西安街二段，昨晚10時許，1名游姓男子（約80歲）坐在學校圍牆邊上吊輕生，路過民眾驚見嚇得趕緊報案，警消趕抵，時發現輕生男子已經沒有生命跡象，緊急送醫搶救仍宣告不治，警方初步調查排除外力介入，輕生原因仍有待釐清。\n\n  警消表示，抵達現場時，發現游男坐在某國中圍牆邊上吊輕生，立即將他救下，但已無呼吸心跳，立即進行CPR並送醫搶救，家屬接獲通知趕抵醫院，同意放棄急救。警方調查，年約80多歲的游男，疑似因長期洗腎又患有心臟疾病、糖尿病才會想不開，現場並無打鬥痕跡，初步已排除外力介入，詳細輕生原因仍待調查釐清。（突發中心江宏倫／台北報導）《蘋果》關心你自殺解決不了問題，卻留給家人無比悲痛。請珍惜生命。再給自己一次機會自殺防治諮詢安心專線：0800-788995（24小時） 生命線協談專線：1995 張老師專線：1980出版時間02：07更新時間12：03\n\n\n  >>加入蘋果日報粉絲團94即時94狂！\n  有效內容率: 1.37%\n\n範例 - 關鍵字搜尋 + 分解新聞\n============================\n\n.. code:: python\n\n  from twnews.search import NewsSearch\n\n  nsearch = NewsSearch(\n    'ltn',\n    limit=10,\n    beg_date='2018-08-03', # 自由時報的日期範圍只能在 90 天以內\n    end_date='2018-11-01'\n  )\n  nsoups = nsearch.by_keyword('上吊', title_only=True).to_soup_list()\n\n  for (i, nsoup) in enumerate(nsoups):\n      print('{:03d}: {}'.format(i, nsoup.path))\n      if nsoup.title() is not None:\n          print('     記者: {} / 日期: {}'.format(nsoup.author(), nsoup.date()))\n          print('     標題: {}'.format(nsoup.title()))\n          print('     {} ...'.format(nsoup.contents()[0:30]))\n      else:\n          print('     新聞分解失敗，無法識別 DOM 結構')\n\n.. code:: text\n\n  000: http://m.ltn.com.tw/news/society/breakingnews/2581807\n       記者: None / 日期: 2018-10-15 23:51:00\n       標題: 疑因病厭世 男子國小圖書館上吊身亡\n       〔即時新聞／綜合報導〕台北市萬華區的老松國小今（15）日早上 ...\n  001: http://m.ltn.com.tw/news/society/breakingnews/2579780\n       記者: None / 日期: 2018-10-13 16:52:00\n       標題: 汐止五指山驚傳男子上吊 水管繞頸陳屍樹林\n       〔記者林嘉東、吳昇儒／新北報導〕台北市郭姓男子今天午後被發現 ...\n  002: http://m.ltn.com.tw/news/entertainment/breakingnews/2579590\n       新聞分解失敗，無法識別 DOM 結構\n  003: http://m.ltn.com.tw/news/society/breakingnews/2577987\n       記者: 謝武雄 / 日期: 2018-10-11 18:10:00\n       標題: 議員尿急樹林解放赫見白骨 男子上吊這天正好滿七...\n       ［記者謝武雄／桃園報導］桃園市大園選區市議員游吾和昨天在臉書 ...\n  004: http://m.ltn.com.tw/news/entertainment/breakingnews/2577596\n       新聞分解失敗，無法識別 DOM 結構\n  005: http://m.ltn.com.tw/news/society/breakingnews/2570595\n       記者: 吳仁捷 / 日期: 2018-10-04 13:40:00\n       標題: 疑借貸千萬翻身失敗 公墓上吊嚇壞爬山男\n       〔記者吳仁捷／新北報導〕章姓男子今天上午到新北市樹林大同山區 ...\n  006: http://m.ltn.com.tw/news/entertainment/breakingnews/2567740\n       新聞分解失敗，無法識別 DOM 結構\n  007: http://m.ltn.com.tw/news/life/breakingnews/2567637\n       記者: None / 日期: 2018-10-01 23:35:00\n       標題: 「肉粽」難送！ 員林三合院連5人在「同條樑」上吊\n       〔即時新聞／綜合報導〕在彰化沿海一帶，為上吊身亡者「送肉棕」 ...\n  008: http://m.ltn.com.tw/news/society/breakingnews/2561962\n       記者: None / 日期: 2018-09-26 11:08:00\n       標題: 男子北美館樹林上吊亡 警到場調查\n       〔即時新聞／綜合報導〕今天上午10時許，台北市立美術館停車場 ...\n  009: http://m.ltn.com.tw/news/society/breakingnews/2561566\n       記者: 黃良傑 / 日期: 2018-09-25 18:05:00\n       標題: 美籍女師上吊租屋處身亡 美籍男友：房內發現遺書\n       〔記者黃良傑／高雄報導〕一名美籍女老師今午被男友發現陳屍租屋 ...\n"
  },
  {
    "path": "bin/busm_failed.py",
    "content": "import os\nimport sys\nimport threading\n\nsys.path.append(os.path.realpath('.'))\n\nimport twnews.common as cm\n\n# 這一行搭配 logger.error() 可以讓程式在 Mac 環境爆掉\n#   objc[70893]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called.\n#   objc[70893]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.\n# 但目前找不到具體原因\nimport twnews.finance.twse as twse\n\ndef main():\n    if os.fork() > 0:\n        exit(0)\n\n    logger = cm.get_logger('finance')\n    logger.error('test')\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "bin/fin_schedule.py",
    "content": "import logging\nimport os\nimport schedule\nimport signal\nimport sys\nimport threading\nimport time\nfrom datetime import datetime, timedelta\n\nsys.path.append(os.path.realpath('.'))\n\nimport twnews.common as cm\nimport twnews.finance.twse as twse\nimport twnews.finance.tpex as tpex\nimport twnews.finance.tdcc as tdcc\n\nclass JustDaemon:\n    \"\"\"\n    定型化 Daemon\n    TODO: 分割成獨立套件\n    \"\"\"\n\n    def __init__(self, init_task=None, loop_task=None, stdout='/dev/null', stderr='/dev/null', background=True):\n        if background and os.fork() > 0:\n            exit(0)\n\n        self.init_task = init_task if init_task is not None else self.do_nothing\n        self.loop_task = loop_task if loop_task is not None else self.do_nothing\n        self.stdout = stdout\n        self.stderr = stderr\n        self.background = background\n        self.close_requested = False\n\n    def do_nothing(self):\n        pass\n\n    def on_quit(self, signum, frame):\n        self.close_requested = True\n\n    def listen_sys_signals(self):\n        ACCEPTED_SIGNALS = [\n            signal.SIGHUP,  # 1\n            signal.SIGINT,  # 2\n            signal.SIGQUIT, # 3\n            signal.SIGABRT, # 6\n            signal.SIGTERM  # 15\n        ]\n        for sig in ACCEPTED_SIGNALS:\n            signal.signal(sig, self.on_quit)\n\n    def stream_redirect(self):\n        if self.background:\n            outpath = os.path.expanduser(self.stdout)\n            sys.stdout = open(outpath, 'w')\n            errpath = os.path.expanduser(self.stderr)\n            sys.stderr = open(errpath, 'w')\n\n    def stream_flush(self):\n        if self.background:\n            sys.stdout.flush()\n            sys.stderr.flush()\n\n    def stream_close(self):\n        if self.background:\n            sys.stdout.close()\n            sys.stderr.close()\n\n    def pidfile_create(self):\n        # 產生 pid file\n        self.pid_file = os.path.expanduser('~/.twnews/fin_schedule.pid')\n        pid_base = os.path.dirname(self.pid_file)\n        if not os.path.isdir(pid_base):\n            os.makedirs(pid_base)\n        with open(self.pid_file, 'w') as pid_stream:\n            pid_stream.write('%s' % os.getpid())\n\n    def pidfile_remove(self):\n        # 移除 pid file\n        os.remove(self.pid_file)\n\n    def run(self):\n        self.listen_sys_signals()\n        self.stream_redirect()\n        self.pidfile_create()\n\n        attrs = {}\n        self.init_task(attrs)\n        while not self.close_requested:\n            self.loop_task(attrs)\n            self.stream_flush()\n\n            # Make the next waking near 0 second.\n            t = time.time()\n            delay = 1 - (t - int(t))\n            time.sleep(delay)\n\n        self.pidfile_remove()\n        self.stream_close()\n\nclass ScheduleDaemon(JustDaemon):\n    \"\"\"\n    排程型 Daemon\n    TODO: 分割成獨立套件\n    \"\"\"\n\n    def __init__(self, schedule_table, stdout='/dev/null', stderr='/dev/null', background=True):\n        self.schedule_table = schedule_table\n        super().__init__(\n            init_task = self.init_task,\n            loop_task = self.loop_task,\n            stdout = stdout,\n            stderr = stderr,\n            background = background\n        )\n\n    def init_task(self, attrs):\n        for run_at in self.schedule_table:\n            func = self.schedule_table[run_at]['func']\n            args = self.schedule_table[run_at]['args']\n            weekend = True\n            if 'weekend' in self.schedule_table[run_at]:\n                weekend = self.schedule_table[run_at]['weekend']\n\n            if weekend:\n                schedule.every().day.at(run_at).do(self.run_parallel, func, args)\n            else:\n                schedule.every().monday.at(run_at).do(self.run_parallel, func, args)\n                schedule.every().tuesday.at(run_at).do(self.run_parallel, func, args)\n                schedule.every().wednesday.at(run_at).do(self.run_parallel, func, args)\n                schedule.every().thursday.at(run_at).do(self.run_parallel, func, args)\n                schedule.every().friday.at(run_at).do(self.run_parallel, func, args)\n\n    def loop_task(self, attrs):\n        schedule.run_pending()\n\n    def run_parallel(self, func, args):\n        th = threading.Thread(target=func, args=args)\n        th.start()\n\ndef im_fine():\n    logger = cm.get_logger('finance')\n    logger.info('I\\'m fine. (%s)', __file__)\n\ndef tpe_at(timestr):\n    hh_adjust = (time.altzone / -3600) - 8\n    hh = (int(timestr[0:2]) + hh_adjust) % 24\n    mm = int(timestr[3:5])\n    return '%02d:%02d' % (hh, mm)\n\ndef main():\n    # 注意!! args 要用 list 不可以用 tuple，否則傳遞一個字串時，會把每個字元當成一個參數傳遞\n    ScheduleDaemon(\n        schedule_table = {\n            # 每日健康回報\n            tpe_at('09:30'): { 'func': im_fine, 'args': [] },\n            tpe_at('14:00'): { 'func': im_fine, 'args': [] },\n            # 證交所\n            tpe_at('14:09'): { 'func': twse.sync_dataset, 'args': ['borrowed'], 'weekend': False },\n            tpe_at('15:57'): { 'func': twse.sync_dataset, 'args': ['etfnet'], 'weekend': False },\n            tpe_at('16:44'): { 'func': twse.sync_dataset, 'args': ['institution'], 'weekend': False },\n            tpe_at('17:33'): { 'func': twse.sync_dataset, 'args': ['block'], 'weekend': False },\n            tpe_at('21:41'): { 'func': twse.sync_dataset, 'args': ['margin'], 'weekend': False },\n            tpe_at('21:42'): { 'func': twse.sync_dataset, 'args': ['selled'], 'weekend': False },\n            # 櫃買中心\n            tpe_at('16:49'): { 'func': tpex.sync_dataset, 'args': ['institution'], 'weekend': False },\n            tpe_at('17:48'): { 'func': tpex.sync_dataset, 'args': ['block'], 'weekend': False },\n            tpe_at('21:47'): { 'func': tpex.sync_dataset, 'args': ['margin'], 'weekend': False },\n            tpe_at('21:48'): { 'func': tpex.sync_dataset, 'args': ['selled'], 'weekend': False },\n            # 集保中心\n            tpe_at('07:01'): { 'func': tdcc.sync_dataset, 'args': [] },\n        },\n        # background = False\n    ).run()\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "bin/getnews.sh",
    "content": "# 製作新聞離線範本\nSAMPLE_DIR='twnews/samples'\nUSER_AGENT='Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'\n\nwget -U \"$USER_AGENT\" -O $SAMPLE_DIR/appledaily.html https://tw.news.appledaily.com/local/realtime/20160521/867195\nwget -U \"$USER_AGENT\" -O $SAMPLE_DIR/chinatimes.html https://www.chinatimes.com/realtimenews/20180916001767-260402\nwget -U \"$USER_AGENT\" -O $SAMPLE_DIR/cna.html https://www.cna.com.tw/news/asoc/201603190029-1.aspx\nwget -U \"$USER_AGENT\" -O $SAMPLE_DIR/ettoday.html https://www.ettoday.net/news/20171209/1069025.htm\nwget -U \"$USER_AGENT\" -O $SAMPLE_DIR/ltn.html https://m.ltn.com.tw/news/life/breakingnews/2504351\nwget -U \"$USER_AGENT\" -O $SAMPLE_DIR/setn.html https://www.setn.com/m/News.aspx?NewsID=350370\nwget -U \"$USER_AGENT\" -O $SAMPLE_DIR/udn.html https://udn.com/news/story/7315/3705102\n\n# $WGET -O $SAMPLE_DIR/judicial-cp950.html http://aomp.judicial.gov.tw/abbs/wkw/WHD2ASHOW.jsp?rowid=%2Fsld%2F10703%2F09162840289.020\n# iconv -f cp950 -t utf8 $SAMPLE_DIR/judicial-cp950.html > $SAMPLE_DIR/judicial.html\n# rm -f $SAMPLE_DIR/judicial-cp950.html\n\nxz -f $SAMPLE_DIR/*.html\n"
  },
  {
    "path": "bin/publish.py",
    "content": "#!/usr/bin/env python3\n#\n# 必要工具套件:\n# * pylint\n# * rstcheck\n# * setuptools\n\nimport configparser\nimport os\nimport re\nimport subprocess\nimport sys\n\ndef get_wheel():\n    \"\"\" 製作 wheel 檔案與取得檔名 \"\"\"\n    comp = subprocess.run(['python3', 'setup.py', 'bdist_wheel'], capture_output=True)\n    if comp.returncode != 0:\n        return False\n\n    wheel = False\n    stdout = comp.stdout.decode('utf-8').split('\\n')\n    for line in stdout:\n        match = re.search('dist/twnews-.+\\.whl', line)\n        if match is not None:\n            wheel = match.group(0)\n            break\n\n    return wheel\n\ndef get_latest_python():\n    \"\"\" 選擇 pyenv 環境中 3.5 ~ 3.8 的最新版本 \"\"\"\n    detected_ver = {\n        '3.5': -1,\n        '3.6': -1,\n        '3.7': -1,\n        '3.8': -1\n    }\n\n    comp = subprocess.run(['pyenv', 'versions'], capture_output=True)\n    stdout = comp.stdout.decode('utf-8').strip().split('\\n')\n    for line in stdout:\n        match = re.match('  (\\d\\.\\d)\\.(\\d+)', line)\n        if match is not None:\n            minor_ver = match.group(1)\n            patch_ver = int(match.group(2))\n            if minor_ver in detected_ver and \\\n                patch_ver > detected_ver[minor_ver]:\n                detected_ver[minor_ver] = patch_ver\n\n    latest_ver = []\n    for minor_ver in detected_ver:\n        if detected_ver[minor_ver] > -1:\n            full_ver = '%s.%d' % (minor_ver, detected_ver[minor_ver])\n            latest_ver.append(full_ver)\n\n    return latest_ver\n\ndef test_in_virtualenv(pyver, wheel):\n    \"\"\" 配置 virtualenv 並執行測試程式 \"\"\"\n\n    # 安裝 virtualenv\n    src = os.path.expanduser('~/.pyenv/versions/%s/bin/python' % pyver)\n    dst = 'sandbox/%s' % pyver\n    comp = subprocess.run(['virtualenv', '-p', src, dst])\n    if comp.returncode != 0:\n        return False\n\n    # 測試 wheel 包\n    # 1. 安裝 wheel\n    # 2. 安裝 green\n    # 3. 執行測試程式\n    os.chdir(dst)\n    wheel = '../../' + wheel\n    comp = subprocess.run(['bin/pip', 'install', wheel, 'green'])\n    if comp.returncode == 0:\n        comp = subprocess.run(['bin/green', '-vv', 'twnews'])\n    os.chdir('../..')\n\n    return (comp.returncode == 0)\n\ndef wheel_check():\n    \"\"\" 檢查 wheel 是否能正常運作在各個 Python 版本環境上 \"\"\"\n\n    \"\"\"\n    print('檢查 logging.ini')\n    config = configparser.ConfigParser()\n    config.read('twnews/conf/logging.ini')\n    if config['handler_stdout']['level'] != 'CRITICAL':\n        print('handler_stdout 忘記切換成 CRITICAL level')\n        exit(1)\n    \"\"\"\n\n    print('檢查程式碼品質')\n    ret = os.system('pylint -f colorized twnews')\n    if ret != 0:\n        print('檢查沒通過，停止封裝')\n        exit(ret)\n\n    print('檢查 README.rst')\n    ret = os.system('rstcheck README.rst')\n    if ret != 0:\n        print('檢查沒通過，停止封裝')\n        exit(ret)\n\n    print('偵測可用的測試環境')\n    os.system('rm -rf sandbox/*')\n    wheel = get_wheel()\n    latest_python = get_latest_python()\n    if len(latest_python) == 0:\n        print('沒有任何可用的測試環境')\n        exit(1)\n\n    for pyver in latest_python:\n        print('測試 Python %s' % pyver)\n        test_in_virtualenv(pyver, wheel)\n\ndef upload_to_pypi(test=False):\n    \"\"\" 上傳 wheel 到 PyPi \"\"\"\n\n    # 檢查 ~/.pypirc 是否存在\n    if not os.path.isfile(os.path.expanduser('~/.pypirc')):\n        print('缺少 pypi 設定檔 ~/.pypirc')\n        print('參考: https://gist.github.com/ibrahim12/c6a296c1e8f409dbed2f')\n\n    # 重新產生 wheel 與上傳前確認\n    wheel = get_wheel()\n    prompt = '準備上傳的檔案是 %s, 確定上傳嗎 [y/n]? ' % wheel\n    print(prompt, end='', flush=True)\n    ans = sys.stdin.readline().strip()\n    if ans != 'y':\n        print('取消上傳')\n        return\n\n    # 上傳 wheel\n    cmd = ['twine', 'upload']\n    if test:\n        cmd.append('--repository')\n        cmd.append('testpypi')\n    cmd.append('--verbose')\n    cmd.append(wheel)\n    comp = subprocess.run(cmd)\n    if comp.returncode == 0:\n        print('上傳成功')\n    else:\n        print('上傳失敗')\n\ndef main():\n    # 確保不在 repo 目錄也能正常執行\n    TWNEWS_HOME = os.path.realpath(os.path.dirname(__file__) + '/..')\n    os.chdir(TWNEWS_HOME)\n\n    action = 'wheel'\n    if len(sys.argv) > 1:\n        action = sys.argv[1]\n\n    if action == 'release':\n        upload_to_pypi()\n    elif action == 'test':\n        upload_to_pypi(True)\n    elif action == 'wheel':\n        wheel_check()\n    else:\n        print('Unknown action \"%s\".' % action)\n        exit(1)\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "bin/weekly.py",
    "content": "#!/usr/bin/env python3\n\nimport json\nimport os\nimport os.path\nimport re\n\nimport smtplib\nfrom email.header import Header\nfrom email.mime.text import MIMEText\n\n# 載入隱私設定\nconf = None\nCONF_PATH = os.path.expanduser('~/.twnews/weekly.json')\nif os.path.isfile(CONF_PATH):\n    with open(CONF_PATH, 'r') as conf_file:\n        conf = json.load(conf_file)\n\nif conf is None:\n    print('Cannot load \"{}\".'.format(CONF_PATH))\n    exit(1)\n\n# 測試\nworking_dir = os.path.realpath(os.path.dirname(__file__) + '/..')\ncmd = 'cd {} && python3 -m unittest discover -v 2>&1 1>/dev/null'.format(working_dir)\npipe = os.popen(cmd, 'r')\ndetail = pipe.read()\nret = pipe.close()\n\n# 組信\nif ret is None:\n    subject = '[twnews] 每週測試 - 成功 ⭕️'\n    contents = re.sub(r'\\n\\s+\\| ', '\\n', '''\n        | <h3 style=\"color:#00f;\">每週測試成功</h3>\n        | <p>詳細內容：</p>\n        | <pre style=\"border:1px solid #aaa; background:#eee; padding:10px;\">\n        | {}\n        | </pre>\n        ''', re.M).strip().format(detail)\nelse:\n    subject = '[twnews] 每週測試 - 失敗 ❌'\n    contents = re.sub(r'\\n\\s+\\| ', '\\n', '''\n        | <h3 style=\"color:#f00;\">每週測試失敗 ({})</h3>\n        | <p>詳細內容：</p>\n        | <pre style=\"border:1px solid #aaa; background:#eee; padding:10px;\">\n        | {}\n        | </pre>\n        ''', re.M).strip().format(ret, detail)\n\nmsg = MIMEText(contents, 'html', 'utf-8')\nmsg['Subject'] = Header(subject)\nmsg['From'] = '{} <{}>'.format(Header(conf['from_name']).encode(), conf['from_mail'])\nmsg['To'] = '{} <{}>'.format(Header(conf['to_name']).encode(), conf['to_mail'])\nsmtp_data = msg.as_string()\n\n# 發信\ntry:\n    server = smtplib.SMTP(conf['smtp_host'], conf['smtp_port'])\n    server.set_debuglevel(1)\n    server.starttls()\n    server.login(conf['smtp_user'], conf['smtp_pass'])\n    server.sendmail(conf['from_mail'], conf['to_mail'], smtp_data)\n    server.close()\nexcept Exception as ex:\n    print('SMTP 異常:', ex)\n"
  },
  {
    "path": "docs/SOUP_NOTES.md",
    "content": "# 新聞網站技術細節\n\n### 新聞分解\n\n頻道 | RWD | 轉址 | 記者欄\n---- | ---- | ---- | ----\n蘋果 | 半殘 | - | X\n中時 | 完整 | - | O\n中央社 | 完整 | - | X\n東森新聞雲 | 半殘 | - | X\n自由時報 | 無 | X | X\n三立新聞網 | 無 | O | X\n聯合新聞網 | 完整 | - | O\n\n* 中時幾乎都有註明記者\n* 聯合記者欄可能不存在\n* 三立偵測到網址與裝置類型不符會發出 HTTP 302 轉址，要關閉自動跟隨參數避免程式誤判\n* 完整 RWD 表示行動版和桌面版使用同一個網址，且 DOM 結構差異不大\n* 半殘 RWD 表示行動版和桌面版使用同一個網址，但 DOM 結構差異很大\n* 無 RWD 表示行動版和桌面版不在同一個網址上\n\n### 新聞搜尋\n\n頻道 | 介面 | 翻頁參數 | 日期範圍參數\n---- | ---- | ---- | ----\n蘋果 | 傳統網頁 | O | O\n中時 | 沒提供 | - | -\n中央社 | API | O | X\n東森新聞雲 | 傳統網頁 | O | 特殊用法\n自由時報 | 傳統網頁 | O | O\n三立新聞網 | 傳統網頁 | O | X\n聯合新聞網 | 傳統網頁 | O | X\n\n* 蘋果、自由，可以用同一個模式運作\n* 三立、聯合、東森，可以用同一個模式運作\n* 中央社有提供 JSON API，不用拆網頁，要獨立一個模式運作\n* 自由的時間區間只能設定三個月內，應該是全文檢索引擎效能不足\n* 東森新聞雲雖然有提供時間範圍 daydiff(1~3) 但是不好用，當作沒這參數吧\n* 中時直接掛 Google 自訂搜尋，這部份有點瞎\n\n自由時報聲明的查詢範圍是 3 個月，實測結果有些微差異，應該是相減需 ≤90 天\n```\n# 2018-08-02 ~ 2018-11-01 沒有搜尋結果\nnsearch = NewsSearch('ltn', '2018-08-02', '2018-11-01', 100)\n# 2018-08-03 ~ 2018-11-01 有搜尋結果\nnsearch = NewsSearch('ltn', '2018-08-03', '2018-11-01', 100)\n```\n\n### 新聞台搜尋效能比較\n\n測試方法為下列指令連續跑 3 次，取單頁處理時間\n\n```bash\npython3 -m twnews sncp\n```\n\n&nbsp; | 1st | 2nd | 3rd\n---- | ---- | ---- | ----\n蘋果日報 | 0.40 | 0.03 | 0.03\n中央社 | 0.21 | 0.14 | 0.15\n東森新聞雲 | 0.11 | 0.13 | 0.08\n自由時報 | 0.79 | 0.02 | 0.02\n三立新聞網 | 0.21 | 0.02 | 0.02\n聯合新聞網 | 1.76 | 0.06 | 0.06\n\n* 沒快取的狀況下最慢的依序是: 聯合 > 自由 > 蘋果\n* 中央社和東森可能沒有快取機制，其餘都有查詢快取\n* 三立的行動搜尋介面，頁籤沒有最後一頁的連結，只有桌面版有提供\n"
  },
  {
    "path": "docs/changelog.md",
    "content": "## 0.3.x\n\n0.3 的開發主軸是財經資料蒐集，針對證交所，櫃買中心，集保中心，公開資訊觀測站等地方取得有價值資料，並且匯入到 SQLite 方便使用。\n\n### 0.3.3\n\n* 櫃買中心三大法人，融資融券，鉅額交易 - #67\n* 證交所爬蟲穩定性改善 - #69\n* 集保中心爬蟲 Log Level 調整 - #73\n* LZMA 壓縮快取檔 - #77 #78 #79\n* 依新聞台名稱分配快取目錄 - #76\n* 處理蘋果日報亂碼問題 - #80 #81\n* 事務性工作 - #85 #74 #70\n\n### 0.3.2\n\n* 爬證交所三大法人，信用交易，借券賣出，鉅額交易，ETF折溢價率 - #56 #68\n* 股權分散表爬蟲重構 - #66\n* 修正新聞爬蟲對自由天下與自由時尚的相容問題 - #61\n* 修正蘋果日報內文無法取得問題 - #62\n* 修正東森時尚日期格式問題 - #63\n* 事務性工作 - #72\n\n### 0.3.1\n\n* 股權分散表改用等級分表 - #57\n* 股權分散表日期改用 ISO 格式 - #58\n* 修正蘋果地產無法使用 https 問題 - #54\n* 修正中時網頁結構改變問題 - #59\n* 事務性工作 - #60\n\n### 0.3.0\n\n* 爬股權分散表 - #51\n* 解決 // 開頭網址無法正確處理的問題 - #50 (回報者: [CpOuyang](//github.com/CpOuyang))\n* 東森測試程式增加 proxy 參數解決檔日本 linode 問題 - #52\n* 事務性工作 - #55\n\n## 0.2.x\n\n0.2 的開發主軸是新聞搜尋，針對各家新聞網站的搜尋功能，設計成行為一致的 API，簡化找新聞的需求，也解決拆新聞過程中發現的問題，列入測試樣本。\n\n### 0.2.5\n\n* Issue Template - #46\n\n### 0.2.4\n\n* 搜尋功能測試程式 - #37\n* 增加 proxy 設計，讓東森新聞雲在日本 linode 也能使用 - #27\n* 解決自由時報存在多種日期格式問題 - #34\n* 強化記者姓名的辨識能力 - #40\n* 被自動轉址時，自動切換分解新聞設定 - #43\n* 修正蘋果日報搜尋的翻頁參數錯誤 - #44\n* 事務性工作 - #45\n\n### 0.2.3\n\n* 解決各家新聞的子頻道編排相容性問題 - #31\n* 新聞爬蟲重構 - #39\n* 程式碼導入 pylint 檢查，遵循 PEP8 規範 - #38\n* 事務性工作 - #42\n\n### 0.2.2\n\n* 修正 isinstance 用錯類別的問題 - #38\n\n### 0.2.1\n\n* 新聞標題統計功能 - #33\n* 蘋果日報搜尋改用 XHR - #30\n* 事務性工作 - #32\n\n### 0.2.0\n\n* 新聞關鍵字搜尋功能 - #9\n\n# 0.1.x\n\n0.1 的開發主軸是設計一個通用型的爬蟲，透過爬蟲設定值依照不同的新聞網站拆解 HTML 結構，取得標題，內文，記者，日期等資訊。\n\n### 0.1.10\n\n* 解決 Python 3.7 for Windows 相容性問題 - #28\n* 解決 Python 3.5 3.6 for Windows 相容性問題 - #29\n\n### 0.1.9\n\n* 作者欄位加強測試 - #7\n* 不理想 URL 測試 - #10\n* 壓縮快取檔 - #15\n* 壓縮範本檔 - #16\n* 使用檔案儲存 log - #17\n* 提供 URL 參數直接在 console 拆新聞 - #20\n* 新聞爬蟲定期測試程式 - #24\n* Python 3.5 相容設計 - #25\n* 事務性工作 - #26\n\n### 0.1.8\n\n* 爬蟲支援中時電子報 - #4\n* 事務性工作 - #12 #13 #14\n\n### 0.1.7\n\n* 清除快取前，先偵測目錄是否存在 - #2\n* 變更快取目錄 - #5\n* 移除 unicode_escape() - #6\n* 計算有效內容率 - #8\n* 變更頻果日報標題 CSS Selector - #11\n* 事務性工作 - #3\n"
  },
  {
    "path": "postman/TWMKT.postman_collection.json",
    "content": "{\n\t\"info\": {\n\t\t\"_postman_id\": \"96e57888-4ea0-406b-9f9b-774e3cf3896f\",\n\t\t\"name\": \"0xFE-TWMKT\",\n\t\t\"schema\": \"https://schema.getpostman.com/json/collection/v2.1.0/collection.json\"\n\t},\n\t\"item\": [\n\t\t{\n\t\t\t\"name\": \"[證交] 00 三大法人\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"http://www.twse.com.tw/fund/T86?response={{TWSE_EXFORMAT}}&date={{TWSE_EXDATE}}&selectType=ALL\",\n\t\t\t\t\t\"protocol\": \"http\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"twse\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"fund\",\n\t\t\t\t\t\t\"T86\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"response\",\n\t\t\t\t\t\t\t\"value\": \"{{TWSE_EXFORMAT}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"date\",\n\t\t\t\t\t\t\t\"value\": \"{{TWSE_EXDATE}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"selectType\",\n\t\t\t\t\t\t\t\"value\": \"ALL\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[證交] 01 融資融券\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"http://www.twse.com.tw/exchangeReport/MI_MARGN?response={{TWSE_EXFORMAT}}&date={{TWSE_EXDATE}}&selectType=ALL\",\n\t\t\t\t\t\"protocol\": \"http\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"twse\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"exchangeReport\",\n\t\t\t\t\t\t\"MI_MARGN\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"response\",\n\t\t\t\t\t\t\t\"value\": \"{{TWSE_EXFORMAT}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"date\",\n\t\t\t\t\t\t\t\"value\": \"{{TWSE_EXDATE}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"selectType\",\n\t\t\t\t\t\t\t\"value\": \"ALL\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[證交] 02 鉅額交易\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"http://www.twse.com.tw/block/BFIAUU?response={{TWSE_EXFORMAT}}&date={{TWSE_EXDATE}}&selectType=S\",\n\t\t\t\t\t\"protocol\": \"http\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"twse\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"block\",\n\t\t\t\t\t\t\"BFIAUU\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"response\",\n\t\t\t\t\t\t\t\"value\": \"{{TWSE_EXFORMAT}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"date\",\n\t\t\t\t\t\t\t\"value\": \"{{TWSE_EXDATE}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"selectType\",\n\t\t\t\t\t\t\t\"value\": \"S\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[證交] 03 融券借券\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"http://www.twse.com.tw/exchangeReport/TWT93U?response={{TWSE_EXFORMAT}}&date={{TWSE_EXDATE}}\",\n\t\t\t\t\t\"protocol\": \"http\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"twse\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"exchangeReport\",\n\t\t\t\t\t\t\"TWT93U\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"response\",\n\t\t\t\t\t\t\t\"value\": \"{{TWSE_EXFORMAT}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"date\",\n\t\t\t\t\t\t\t\"value\": \"{{TWSE_EXDATE}}\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[證交] 04 可借券賣出\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"http://www.twse.com.tw/SBL/TWT96U?response=csv\",\n\t\t\t\t\t\"protocol\": \"http\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"twse\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"SBL\",\n\t\t\t\t\t\t\"TWT96U\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"response\",\n\t\t\t\t\t\t\t\"value\": \"csv\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[證交] 05 ETF 折溢價\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://mis.twse.com.tw/stock/data/all_etf.txt\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"mis\",\n\t\t\t\t\t\t\"twse\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"stock\",\n\t\t\t\t\t\t\"data\",\n\t\t\t\t\t\t\"all_etf.txt\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[櫃買] 00 三大法人明細\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://www.tpex.org.tw/web/stock/3insti/daily_trade/3itrade_hedge_result.php?l=zh_tw&o=json&se=EW&t=D&d={{TPEX_EXPORT_DATE}}&s=0,asc\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"tpex\",\n\t\t\t\t\t\t\"org\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"web\",\n\t\t\t\t\t\t\"stock\",\n\t\t\t\t\t\t\"3insti\",\n\t\t\t\t\t\t\"daily_trade\",\n\t\t\t\t\t\t\"3itrade_hedge_result.php\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"l\",\n\t\t\t\t\t\t\t\"value\": \"zh_tw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"o\",\n\t\t\t\t\t\t\t\"value\": \"json\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"se\",\n\t\t\t\t\t\t\t\"value\": \"EW\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"t\",\n\t\t\t\t\t\t\t\"value\": \"D\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"d\",\n\t\t\t\t\t\t\t\"value\": \"{{TPEX_EXPORT_DATE}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"s\",\n\t\t\t\t\t\t\t\"value\": \"0,asc\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[櫃買] 01 融資融券明細\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://www.tpex.org.tw/web/stock/margin_trading/margin_balance/margin_bal_result.php?l=zh_tw&o=json&d={{TPEX_EXPORT_DATE}}\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"tpex\",\n\t\t\t\t\t\t\"org\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"web\",\n\t\t\t\t\t\t\"stock\",\n\t\t\t\t\t\t\"margin_trading\",\n\t\t\t\t\t\t\"margin_balance\",\n\t\t\t\t\t\t\"margin_bal_result.php\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"l\",\n\t\t\t\t\t\t\t\"value\": \"zh_tw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"o\",\n\t\t\t\t\t\t\t\"value\": \"json\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"d\",\n\t\t\t\t\t\t\t\"value\": \"{{TPEX_EXPORT_DATE}}\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[櫃買] 02 鉅額交易明細\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://www.tpex.org.tw/web/stock/block_trade/daily_qutoes/block_day_download.php?l=zh_tw&d={{TPEX_EXPORT_DATE}}&s=0,asc,0&charset=UTF-8\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"tpex\",\n\t\t\t\t\t\t\"org\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"web\",\n\t\t\t\t\t\t\"stock\",\n\t\t\t\t\t\t\"block_trade\",\n\t\t\t\t\t\t\"daily_qutoes\",\n\t\t\t\t\t\t\"block_day_download.php\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"l\",\n\t\t\t\t\t\t\t\"value\": \"zh_tw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"d\",\n\t\t\t\t\t\t\t\"value\": \"{{TPEX_EXPORT_DATE}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"s\",\n\t\t\t\t\t\t\t\"value\": \"0,asc,0\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"charset\",\n\t\t\t\t\t\t\t\"value\": \"UTF-8\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[櫃買] 03 當沖明細\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://www.tpex.org.tw/web/stock/trading/intraday_stat/intraday_trading_stat_download.php?l=zh-tw&d={{TPEX_EXPORT_DATE}}&s=0,asc,0&charset=UTF-8\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"tpex\",\n\t\t\t\t\t\t\"org\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"web\",\n\t\t\t\t\t\t\"stock\",\n\t\t\t\t\t\t\"trading\",\n\t\t\t\t\t\t\"intraday_stat\",\n\t\t\t\t\t\t\"intraday_trading_stat_download.php\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"l\",\n\t\t\t\t\t\t\t\"value\": \"zh-tw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"d\",\n\t\t\t\t\t\t\t\"value\": \"{{TPEX_EXPORT_DATE}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"s\",\n\t\t\t\t\t\t\t\"value\": \"0,asc,0\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"charset\",\n\t\t\t\t\t\t\t\"value\": \"UTF-8\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[櫃買] 04 融券借券\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://www.tpex.org.tw/web/stock/margin_trading/margin_sbl/margin_sbl_download.php?l=zh-tw&d={{TPEX_EXPORT_DATE}}&s=0,asc,0&charset=utf-8\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"tpex\",\n\t\t\t\t\t\t\"org\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"web\",\n\t\t\t\t\t\t\"stock\",\n\t\t\t\t\t\t\"margin_trading\",\n\t\t\t\t\t\t\"margin_sbl\",\n\t\t\t\t\t\t\"margin_sbl_download.php\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"l\",\n\t\t\t\t\t\t\t\"value\": \"zh-tw\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"d\",\n\t\t\t\t\t\t\t\"value\": \"{{TPEX_EXPORT_DATE}}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"s\",\n\t\t\t\t\t\t\t\"value\": \"0,asc,0\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"charset\",\n\t\t\t\t\t\t\t\"value\": \"utf-8\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[集保] 01 股權分散表最新週報\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://smart.tdcc.com.tw/opendata/getOD.ashx?id=1-5\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"smart\",\n\t\t\t\t\t\t\"tdcc\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"opendata\",\n\t\t\t\t\t\t\"getOD.ashx\"\n\t\t\t\t\t],\n\t\t\t\t\t\"query\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"id\",\n\t\t\t\t\t\t\t\"value\": \"1-5\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[集保] 02 股權分散表\\b結算日期\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"POST\",\n\t\t\t\t\"header\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"key\": \"Content-Type\",\n\t\t\t\t\t\t\"name\": \"Content-Type\",\n\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\"value\": \"application/x-www-form-urlencoded\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"key\": \"Referer\",\n\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\"value\": \"https://www.tdcc.com.tw/smWeb/QryStockAjax.do\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"mode\": \"urlencoded\",\n\t\t\t\t\t\"urlencoded\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"REQ_OPR\",\n\t\t\t\t\t\t\t\"value\": \"qrySelScaDates\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://www.tdcc.com.tw/smWeb/QryStockAjax.do\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"tdcc\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"smWeb\",\n\t\t\t\t\t\t\"QryStockAjax.do\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[集保] 03 股權分散表個股\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"POST\",\n\t\t\t\t\"header\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"key\": \"Content-Type\",\n\t\t\t\t\t\t\"name\": \"Content-Type\",\n\t\t\t\t\t\t\"value\": \"application/x-www-form-urlencoded\",\n\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"key\": \"Referer\",\n\t\t\t\t\t\t\"value\": \"https://www.tdcc.com.tw/smWeb/QryStockAjax.do\",\n\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"mode\": \"urlencoded\",\n\t\t\t\t\t\"urlencoded\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"scaDate\",\n\t\t\t\t\t\t\t\"value\": \"20190119\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"SqlMethod\",\n\t\t\t\t\t\t\t\"value\": \"StockNo\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"REQ_OPR\",\n\t\t\t\t\t\t\t\"value\": \"SELECT\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"clkStockNo\",\n\t\t\t\t\t\t\t\"value\": \"3049\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://www.tdcc.com.tw/smWeb/QryStockAjax.do\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"www\",\n\t\t\t\t\t\t\"tdcc\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"smWeb\",\n\t\t\t\t\t\t\"QryStockAjax.do\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[分點] 00 券商地址 - TODO\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[分點] 01 股務代理 - TODO\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[財報] 00 會計師查核\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"POST\",\n\t\t\t\t\"header\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"key\": \"Content-Type\",\n\t\t\t\t\t\t\"name\": \"Content-Type\",\n\t\t\t\t\t\t\"value\": \"application/x-www-form-urlencoded\",\n\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"body\": {\n\t\t\t\t\t\"mode\": \"urlencoded\",\n\t\t\t\t\t\"urlencoded\": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"TYPEK\",\n\t\t\t\t\t\t\t\"value\": \"sii\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"year\",\n\t\t\t\t\t\t\t\"value\": \"107\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"season\",\n\t\t\t\t\t\t\t\"value\": \"04\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"isQuery\",\n\t\t\t\t\t\t\t\"value\": \"Y\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"off\",\n\t\t\t\t\t\t\t\"value\": \"1\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"firstin\",\n\t\t\t\t\t\t\t\"value\": \"1\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"step\",\n\t\t\t\t\t\t\t\"value\": \"1\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"key\": \"encodeURIComponent\",\n\t\t\t\t\t\t\t\"value\": \"1\",\n\t\t\t\t\t\t\t\"type\": \"text\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://mops.twse.com.tw/mops/web/t163sb14\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"mops\",\n\t\t\t\t\t\t\"twse\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"mops\",\n\t\t\t\t\t\t\"web\",\n\t\t\t\t\t\t\"t163sb14\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[財報] 01 資產負債 - TODO\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[財報] 02 損益 - TODO\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[財報] 03 現金流量 - TODO\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[財報] 04 股東權益 - TODO\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[大股東] 00 上市大股東股權異動\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://siis.twse.com.tw/publish/sii/106IRB110_01.HTM\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"siis\",\n\t\t\t\t\t\t\"twse\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"publish\",\n\t\t\t\t\t\t\"sii\",\n\t\t\t\t\t\t\"106IRB110_01.HTM\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[大股東] 01 上櫃大股東股權異動\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://siis.twse.com.tw/publish/otc/107IRB110_12.HTM\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"siis\",\n\t\t\t\t\t\t\"twse\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"publish\",\n\t\t\t\t\t\t\"otc\",\n\t\t\t\t\t\t\"107IRB110_12.HTM\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t},\n\t\t{\n\t\t\t\"name\": \"[大股東] 02 興櫃大股東股權異動\",\n\t\t\t\"request\": {\n\t\t\t\t\"method\": \"GET\",\n\t\t\t\t\"header\": [],\n\t\t\t\t\"url\": {\n\t\t\t\t\t\"raw\": \"https://siis.twse.com.tw/publish/rotc/106IRB110_01.HTM\",\n\t\t\t\t\t\"protocol\": \"https\",\n\t\t\t\t\t\"host\": [\n\t\t\t\t\t\t\"siis\",\n\t\t\t\t\t\t\"twse\",\n\t\t\t\t\t\t\"com\",\n\t\t\t\t\t\t\"tw\"\n\t\t\t\t\t],\n\t\t\t\t\t\"path\": [\n\t\t\t\t\t\t\"publish\",\n\t\t\t\t\t\t\"rotc\",\n\t\t\t\t\t\t\"106IRB110_01.HTM\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"response\": []\n\t\t}\n\t],\n\t\"event\": [\n\t\t{\n\t\t\t\"listen\": \"prerequest\",\n\t\t\t\"script\": {\n\t\t\t\t\"id\": \"2a60f749-9ad5-4f69-91c7-981502d34dd4\",\n\t\t\t\t\"type\": \"text/javascript\",\n\t\t\t\t\"exec\": [\n\t\t\t\t\t\"\"\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"listen\": \"test\",\n\t\t\t\"script\": {\n\t\t\t\t\"id\": \"716c094f-8f7b-42e6-98ee-e62977e4633d\",\n\t\t\t\t\"type\": \"text/javascript\",\n\t\t\t\t\"exec\": [\n\t\t\t\t\t\"\"\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t]\n}"
  },
  {
    "path": "postman/TWMKT.postman_environment.json",
    "content": "{\n\t\"id\": \"e09139ab-0991-4315-82ef-93998a367e54\",\n\t\"name\": \"TWMKT\",\n\t\"values\": [\n\t\t{\n\t\t\t\"key\": \"TWSE_EXFORMAT\",\n\t\t\t\"value\": \"json\",\n\t\t\t\"enabled\": true\n\t\t},\n\t\t{\n\t\t\t\"key\": \"TWSE_EXDATE\",\n\t\t\t\"value\": \"20191015\",\n\t\t\t\"enabled\": true\n\t\t},\n\t\t{\n\t\t\t\"key\": \"TPEX_EXPORT_DATE\",\n\t\t\t\"value\": \"108/10/01\",\n\t\t\t\"enabled\": true\n\t\t}\n\t],\n\t\"_postman_variable_scope\": \"environment\",\n\t\"_postman_exported_at\": \"2019-10-23T04:15:07.097Z\",\n\t\"_postman_exported_using\": \"Postman/7.9.0\"\n}"
  },
  {
    "path": "requirements.txt",
    "content": "beautifulsoup4>=4.7.1\nbusm>=0.9.0\nlxml>=4.3.3\nrequests>=2.21.0\npandas>=0.24.2\nPyYAML>=5.1.2\n# 只有 ticksmap 需要用到 wxWidget \n# wxPython>=4.0.4\n"
  },
  {
    "path": "setup.py",
    "content": "from setuptools import setup, find_packages\nimport twnews.common as common\n\n# Load reStructedText description.\n# Online Editor   - http://rst.ninjs.org/\n# Quick Reference - http://docutils.sourceforge.net/docs/user/rst/quickref.html\nreadme = open('README.md', 'r')\nlongdesc = readme.read()\nreadme.close()\n\n# See\n# https://packaging.python.org/tutorials/packaging-projects/\n# https://python-packaging.readthedocs.io/en/latest/non-code-files.html\nsetup(\n    name='twnews',\n    version=common.VERSION,\n    description='To tear down news web pages in Taiwan.',\n    long_description=longdesc,\n    long_description_content_type='text/markdown',\n    packages=find_packages(),\n    url='https://github.com/virus-warnning/twnews',\n    license='MIT',\n    author='Raymond Wu',\n    package_data={\n        'twnews': ['conf/*', 'res/*', 'samples/*', 'tests/soup/*', 'tests/search/*']\n    },\n    install_requires=[\n        'beautifulsoup4>=4.7.1',\n        'busm>=0.9.0',\n        'lxml>=4.3.3',\n        'requests>=2.21.0',\n        'pandas>=0.24.2',\n        'PyYAML>=5.1.2'\n    ],\n    python_requires='>=3.5'\n)\n"
  },
  {
    "path": "twnews/__init__.py",
    "content": "\"\"\"\ntwnews 套件載入前作業，用來解決 Windows 環境會發生的編碼問題\n\"\"\"\n\nimport sys\nimport locale\nimport _locale\n\n# 以下是魔法不要亂改\nif locale.getpreferredencoding() == 'cp950':\n    # pylint: disable=protected-access, global-statement\n\n    # 編碼是 CP950 就強制轉 UTF-8\n    _locale._getdefaultlocale = (lambda *args: ['zh_TW', 'utf-8'])\n\n    # 置換 Python 3.5 的 print() 避免轉碼錯誤\n    VERSION = sys.version_info\n    if VERSION.major == 3 and VERSION.minor == 5:\n        NATIVE_PRINT = __builtins__['print']\n        def _replaced_print(*objects, sep=' ', end='\\n', file=sys.stdout, flush=False):\n            \"\"\"\n            替換用的 print()\n            \"\"\"\n            global NATIVE_PRINT\n            filtered = []\n            for obj in objects:\n                if isinstance(obj, str):\n                    filtered.append(obj.encode('cp950', 'ignore').decode('cp950'))\n                else:\n                    filtered.append(obj)\n            NATIVE_PRINT(*filtered, sep=sep, end=end, file=file, flush=flush)\n        __builtins__['print'] = _replaced_print\n"
  },
  {
    "path": "twnews/__main__.py",
    "content": "\"\"\"\n工具程式\n\"\"\"\n\nimport sys\nimport locale\nimport os.path\nfrom datetime import datetime\nfrom twnews.common import get_logger, VERSION\nfrom twnews.soup import NewsSoup\nfrom twnews.search import NewsSearch\n\ndef soup(path):\n    \"\"\"\n    分解新聞\n    \"\"\"\n    print('-' * 75)\n    nsoup = NewsSoup(path)\n    print('原始路徑: {}'.format(path))\n    print('最終路徑: {}'.format(nsoup.path))\n    print('頻道: {}'.format(nsoup.channel))\n    print('標題: {}'.format(nsoup.title()))\n    ndt = nsoup.date()\n    if ndt is not None:\n        print('日期: {}'.format(ndt.strftime('%Y-%m-%d %H:%M:%S')))\n    else:\n        print('日期: None')\n    print('記者: {}'.format(nsoup.author()))\n    print('內文:')\n    print(nsoup.contents())\n    print('有效內容率: {:.2f}%'.format(nsoup.effective_text_rate() * 100))\n    print('-' * 75)\n\ndef search_and_list(keyword, channel):\n    \"\"\"\n    搜尋，然後列出新聞標題\n    \"\"\"\n    print('測試搜尋')\n    nsearch = NewsSearch(channel, limit=10)\n    results = nsearch.by_keyword(keyword).to_dict_list()\n    logger = get_logger()\n\n    for (i, result) in enumerate(results):\n        try:\n            print('{:03d}: {}'.format(i, result['title']))\n            print('     日期: {}'.format(result['date']))\n            print('     連結: {}'.format(result['link']))\n        except ValueError as ex:\n            logger.error('例外類型: %s', type(ex).__name__)\n            logger.error(ex)\n\ndef search_and_soup(keyword, channel):\n    \"\"\"\n    搜尋，然後分解新聞\n    \"\"\"\n    print('測試搜尋與分解, 搜尋中 ...', end='', flush=True)\n    logger = get_logger()\n    nsearch = NewsSearch(channel, limit=10)\n    nsoups = nsearch.by_keyword(keyword).to_soup_list()\n    print('\\r測試搜尋與分解' + ' ' * 20, flush=True)\n\n    for (i, nsoup) in enumerate(nsoups):\n        try:\n            print('{:03d}: {}'.format(i, nsoup.path))\n            print('     記者: {} / 日期: {}'.format(nsoup.author(), nsoup.date()))\n            print('     標題: {}'.format(nsoup.title()))\n            print('     {} ...'.format(nsoup.contents(30)), flush=True)\n        except ValueError as ex:\n            logger.error('例外類型: %s', type(ex).__name__)\n            logger.error(ex)\n\ndef search_and_compare_performance(keyword):\n    \"\"\"\n    測試各新聞台搜尋效能\n    \"\"\"\n    print('測試各新聞台搜尋效能')\n    summary = {}\n\n    for channel in ['appledaily', 'cna', 'ettoday', 'ltn', 'setn', 'udn']:\n        print()\n        print(channel)\n        print('-' * 60)\n        summary[channel] = []\n        for repeat in range(3):\n            nsearch = NewsSearch(channel, limit=100)\n            nsearch.by_keyword(keyword)\n            results = nsearch.to_dict_list()\n            total = len(results)\n            tpp = nsearch.elapsed() / nsearch.pages()\n            tpr = nsearch.elapsed() / total\n            summary[channel].append(tpp)\n            msg = '{:03d}: {:.3f} 秒/頁, {:.3f} 秒/筆, 共 {} 頁, 總耗時: {:.3f} 秒'\n            print(msg.format(repeat, tpp, tpr, nsearch.pages(), nsearch.elapsed()))\n        print('-' * 60)\n\n    print()\n    print('Markdown 摘要表:')\n    print()\n    print('&nbsp; | 1st | 2nd | 3rd')\n    print('---- | ---- | ---- | ----')\n    for (channel, samples) in summary.items():\n        print(channel, end='')\n        for sample in samples:\n            print(' | {:.3f}'.format(sample), end='')\n        print()\n    print()\n\ndef compare_keyword(keyword):\n    \"\"\"\n    比較關鍵字在各媒體的出現次數\n    \"\"\"\n    print('比較上個月 \"{}\" 在各媒體標題出現次數'.format(keyword))\n    now = datetime.now()\n    nts = now.timestamp()\n    nts = nts - nts % 86400\n    day_lmon = datetime.fromtimestamp(nts - 86400 * now.day).day\n    beg_date = datetime(now.year, now.month - 1, 1).strftime('%Y-%m-%d')\n    end_date = datetime(now.year, now.month - 1, day_lmon).strftime('%Y-%m-%d')\n    print('時間區間: {} ~ {}'.format(beg_date, end_date))\n\n    media = {\n        'appledaily': '  蘋果',\n        'cna': '中央社',\n        'ettoday': '  東森',\n        'ltn': '  自由',\n        'setn': '  三立',\n        'udn': '  聯合'\n    }\n\n    for (channel, name) in media.items():\n        nsearch = NewsSearch(\n            channel,\n            beg_date=beg_date,\n            end_date=end_date,\n            limit=999\n        )\n        results = nsearch.by_keyword(keyword, title_only=True).to_dict_list()\n        msg = '{}: {}'.format(name, len(results))\n        print(msg, flush=True)\n\ndef usage():\n    \"\"\"\n    使用說明\n    \"\"\"\n    print('twnews {} (預設編碼: {})'.format(\n        VERSION, locale.getpreferredencoding()))\n    print()\n    usage_path = os.path.dirname(__file__) + '/conf/usage.txt'\n    with open(usage_path, 'r') as usage_file:\n        print(usage_file.read())\n\ndef get_cmd_param(index, default=None):\n    \"\"\"\n    取得 shell 參數\n    \"\"\"\n    if len(sys.argv) > index:\n        return sys.argv[index]\n    return default\n\ndef main():\n    \"\"\"\n    main()\n    \"\"\"\n    action = get_cmd_param(1)\n    if action == 'soup':\n        keyword = get_cmd_param(\n            2, 'https://tw.news.appledaily.com/local/realtime/20181025/1453825')\n        soup(keyword)\n    elif action == 'search':\n        keyword = get_cmd_param(2, '酒駕')\n        channel = get_cmd_param(3, 'appledaily')\n        search_and_list(keyword, channel)\n    elif action == 'snsp':\n        keyword = get_cmd_param(2, '酒駕')\n        channel = get_cmd_param(3, 'appledaily')\n        search_and_soup(keyword, channel)\n    elif action == 'sncp':\n        keyword = get_cmd_param(2, '酒駕')\n        search_and_compare_performance(keyword)\n    elif action == 'cpkw':\n        keyword = get_cmd_param(2, '酒駕')\n        compare_keyword(keyword)\n    else:\n        if action != 'help':\n            print('動作名稱錯誤')\n            print()\n        usage()\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "twnews/cache.py",
    "content": "\"\"\"\n快取處理模組\n\"\"\"\n\nimport os\nimport lzma\nimport json\n\nclass DateCache:\n    \"\"\"\n    處理日期命名快取\n    \"\"\"\n\n    def __init__(self, category, item, data_format):\n        \"\"\"\n        建立日期命名快取\n        \"\"\"\n        self.category = category\n        self.item = item\n        self.data_format = data_format\n\n    def get_path(self, datestr):\n        \"\"\"\n        產生快取檔路徑\n        \"\"\"\n        cache_dir = os.path.expanduser('~/.twnews/cache/' + self.category)\n        if not os.path.isdir(cache_dir):\n            os.makedirs(cache_dir)\n        return '%s/%s-%s.%s.xz' % (cache_dir, self.item, datestr, self.data_format)\n\n    def has(self, datestr):\n        \"\"\"\n        檢查快取檔是否存在\n        \"\"\"\n        cache_path = self.get_path(datestr)\n        return os.path.isfile(cache_path)\n\n    def load(self, datestr):\n        \"\"\"\n        載入快取檔\n        \"\"\"\n        content = None\n        cache_path = self.get_path(datestr)\n        with lzma.open(cache_path, 'rt') as f_cache:\n            if self.data_format == 'json':\n                content = json.load(f_cache)\n            else:\n                content = f_cache.read()\n        return content\n\n    def save(self, datestr, content):\n        \"\"\"\n        儲存快取檔\n        \"\"\"\n        cache_path = self.get_path(datestr)\n        with lzma.open(cache_path, 'wt') as f_cache:\n            if self.data_format == 'json':\n                json.dump(content, f_cache)\n            else:\n                f_cache.write(content)\n"
  },
  {
    "path": "twnews/common.py",
    "content": "\"\"\"\ntwnews 共用項目\n\"\"\"\n\nimport json\nimport os\nimport os.path\nimport logging\nimport logging.config\nimport socket\nimport yaml\n\nimport requests\nimport requests.packages.urllib3.util.connection as urllib3_conn\n\n# 強制 requests 使用 IPv4\nurllib3_conn.allowed_gai_family = lambda: socket.AF_INET\n\n# pylint: disable=global-statement\n__LOGGER_LOADED = False\n__ALLCONF = None\n__SESSION = {\n    \"direct\": None,\n    \"proxy\": None\n}\n\nVERSION = '0.3.3'\n\ndef found_socks5():\n    \"\"\"\n    檢查是否有 SOCKS 5 Proxy\n    \"\"\"\n    found = False\n    with socket.socket(socket.AF_INET) as sock:\n        try:\n            sock.connect(('localhost', 9050))\n            found = True\n        except socket.error:\n            pass\n        finally:\n            sock.close()\n    return found\n\ndef get_package_dir():\n    \"\"\"\n    取得套件根目錄，用來定位套件內資源\n    \"\"\"\n    return os.path.dirname(__file__)\n\ndef get_logger(name='news'):\n    \"\"\"\n    取得 logger 如果已經存在就使用現有的\n    \"\"\"\n    global __LOGGER_LOADED\n\n    if not __LOGGER_LOADED:\n        logdir = os.path.expanduser('~/.twnews/log')\n        if not os.path.isdir(logdir):\n            os.makedirs(logdir)\n\n        cfg_yaml = '{}/conf/logging.yaml'.format(get_package_dir())\n        with open(cfg_yaml, 'r') as cfg_file:\n            cfg_dict = yaml.load(cfg_file, Loader=yaml.SafeLoader)\n            for hname in cfg_dict['handlers']:\n                handler = cfg_dict['handlers'][hname]\n                if 'filename' in handler and handler['filename'].startswith('~'):\n                    handler['filename'] = os.path.expanduser(handler['filename'])\n            logging.config.dictConfig(cfg_dict)\n            __LOGGER_LOADED = True\n\n    logger = None\n    if __LOGGER_LOADED:\n        logger = logging.getLogger(name)\n\n    return logger\n\ndef get_session(proxy_first):\n    \"\"\"\n    取得 requests session 如果已經存在就使用現有的\n    \"\"\"\n    global __SESSION\n    logger = get_logger('common')\n\n    if proxy_first and found_socks5():\n        logger.debug('透過 proxy 連線')\n        session_type = 'proxy'\n    else:\n        session_type = 'direct'\n\n    if __SESSION[session_type] is None:\n        logger.debug('建立新的 session')\n        user_agent = 'Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) ' \\\n            + 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'\n        __SESSION[session_type] = requests.Session()\n        __SESSION[session_type].headers.update({\n            \"Accept\": \"text/html,application/xhtml+xml,application/xml\",\n            \"Accept-Encoding\": \"gzip, deflate\",\n            \"Accept-Language\": \"zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7\",\n            \"Cache-Control\": \"max-age=0\",\n            \"Connection\": \"keep-alive\",\n            \"User-Agent\": user_agent\n        })\n        if session_type == 'proxy':\n            __SESSION[session_type].proxies = {\n                'http': 'socks5h://localhost:9050',\n                'https': 'socks5h://localhost:9050'\n            }\n    else:\n        logger.debug('使用現有 session')\n\n    return __SESSION[session_type]\n\ndef get_all_conf():\n    \"\"\"\n    取得完整設定\n    \"\"\"\n    global __ALLCONF\n\n    if __ALLCONF is None:\n        soup_cfg = '{}/conf/news-soup.json'.format(get_package_dir())\n        with open(soup_cfg, 'r') as conf_file:\n            __ALLCONF = json.load(conf_file)\n\n    return __ALLCONF\n\ndef detect_channel(path):\n    \"\"\"\n    偵測路徑對應的新聞頻道\n    \"\"\"\n    all_conf = get_all_conf()\n    for channel in all_conf:\n        if channel in path:\n            return channel\n    return ''\n\ndef get_channel_conf(channel, action=None):\n    \"\"\"\n    載入新聞台設定\n    \"\"\"\n    all_conf = get_all_conf()\n    if channel in all_conf:\n        chconf = all_conf[channel]\n        if action is None:\n            return chconf\n        if action in chconf:\n            return chconf[action]\n    return None\n\ndef get_cache_dir(category):\n    \"\"\"\n    取得快取目錄\n    \"\"\"\n    logger = get_logger()\n    cache_dir = os.path.expanduser('~/.twnews/cache/' + category)\n    if not os.path.isdir(cache_dir):\n        logger.debug('建立快取目錄: %s', cache_dir)\n        os.makedirs(cache_dir)\n    logger.debug('使用快取目錄: %s', cache_dir)\n    return cache_dir\n"
  },
  {
    "path": "twnews/conf/logging.yaml",
    "content": "version: 1\ndisable_existing_loggers: true\nformatters:\n  standard:\n    datefmt: '%Y-%m-%d %H:%M:%S'\n    format: '[%(asctime)s] %(levelname)-7s | %(message)s'\n  simple:\n    datefmt: '%H:%M:%S'\n    format: '[%(asctime)s] %(name)-7s | %(levelname)-7s | %(message)s'\nhandlers:\n  common_log:\n    level: DEBUG\n    formatter: standard\n    class: logging.handlers.TimedRotatingFileHandler\n    filename: '~/.twnews/log/common.log'\n    when: 'D'\n  news_log:\n    level: DEBUG\n    formatter: standard\n    class: logging.handlers.TimedRotatingFileHandler\n    filename: '~/.twnews/log/news.log'\n    when: 'D'\n  finance_log:\n    level: DEBUG\n    formatter: standard\n    class: logging.handlers.TimedRotatingFileHandler\n    filename: '~/.twnews/log/finance.log'\n    when: 'D'\n  stdout:\n    level: ERROR\n    formatter: simple\n    class: logging.StreamHandler\n    stream: ext://sys.stdout\n  telegram:\n    level: INFO\n    formatter: simple\n    class: busm.BusmHandler\n    subject: finance crawler\nloggers:\n  common:\n    level: DEBUG\n    handlers:\n      - common_log\n      - stdout\n  news:\n    level: DEBUG\n    handlers:\n      - news_log\n      - stdout\n  finance:\n    level: DEBUG\n    handlers:\n      - finance_log\n      - telegram\n      - stdout\n"
  },
  {
    "path": "twnews/conf/news-soup.json",
    "content": "{\n  \"what's that\": {\n    \"name\": \"頻道名稱\",\n    \"layout_list\": [\n      { \"name\": \"特殊排版名稱\", \"prefix\": \"特殊排版網址\" }\n    ],\n    \"mobile\": {\n      \"title_node\": \"標題所在的 CSS selector\",\n      \"date_node\": \"日期時間所在的 CSS Selector\",\n      \"date_format\": \"日期時間的格式，會用 datetime.strptime 處理\",\n      \"author_node\": \"記者所在的 CSS selector，空字串表示記者姓名在內文中，程式會自動偵測\",\n      \"article_node\": \"內文所在的 CSS selector\"\n    },\n    \"search\": {\n      \"url\": \"搜尋網址形式\",\n      \"begin_date_format\": \"開始日期參數形式\",\n      \"end_date_format\": \"結束日期參數形式\",\n      \"result_node\": \"搜尋結果位置\",\n      \"title_node\": \"標題位置，相對於搜尋結果\",\n      \"link_node\": \"連結位置，相對於搜尋結果\",\n      \"date_node\": \"日期位置，相對於搜尋結果\",\n      \"date_format\": \"日期格式\"\n    }\n  },\n  \"appledaily\": {\n    \"name\": \"蘋果日報\",\n    \"layout_list\": [\n      { \"layout\": \"home\", \"prefix\": \"http://home.appledaily.com.tw/\" }\n    ],\n    \"mobile\": {\n      \"title_node\": \"article.nm-content > div.nm-article > header > h2\",\n      \"date_node\": \"article.nm-content > div.nm-article > header > div.time-and-share > time\",\n      \"date_format\": \"建立時間：%Y/%m/%d %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"article.nm-content > div.nm-article > div.nm-article-body > div.text\"\n    },\n    \"home\": {\n      \"title_node\": \"#maincontent > section > div.ncbox_cont > h1\",\n      \"date_node\": \"#maincontent > section > div.ncbox_cont > div.nctimeshare > time\",\n      \"date_format\": \"%Y年%m月%d日\",\n      \"author_node\": \"\",\n      \"article_node\": \"#maincontent > section > div.ncbox_cont > div.articulum > p\"\n    },\n    \"search\": {\n      \"url\": \"https://tw.appledaily.com/search/ajaxresult/page/${PAGE}?querystrS=${KEYWORD}&sort=time&searchType=all\",\n      \"begin_date_format\": \"&dateStart=%Y/%m/%d\",\n      \"end_date_format\": \"&dateEnd=%Y/%m/%d\",\n      \"result_node\": \"\",\n      \"title_node\": \"title\",\n      \"link_node\": \"sharing > url\",\n      \"date_node\": \"pubDate\",\n      \"date_format\": \"%Y%m%d\"\n    }\n  },\n  \"chinatimes\": {\n    \"name\": \"中時電子報\",\n    \"layout_list\": [],\n    \"mobile\": {\n      \"title_node\": \"article.article-box h1.article-title\",\n      \"date_node\": \"article.article-box div.meta-info > time\",\n      \"date_with_children\": true,\n      \"date_format\": \"%H:%M%Y/%m/%d\",\n      \"author_node\": \"article.article-box div.author > a\",\n      \"article_node\": \"article.article-box div.article-body > p\"\n    }\n  },\n  \"cna\": {\n    \"name\": \"中央社\",\n    \"layout_list\": [],\n    \"mobile\": {\n      \"title_node\": \"div.centralContent > h1\",\n      \"date_node\": \"div.centralContent > div.timeBox > div.updatetime > span\",\n      \"date_format\": \"%Y/%m/%d %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"div.centralContent > div.paragraph > p\"\n    },\n    \"search\": {\n      \"url\": \"https://www.cna.com.tw/cna2018api/api/simplelist/searchkeyword/${KEYWORD}/pageidx/${PAGE}/\",\n      \"result_node\": \"result > SimpleItems\",\n      \"link_node\": \"PageUrl\",\n      \"title_node\": \"HeadLine\",\n      \"date_node\": \"CreateTime\",\n      \"date_format\": \"%Y/%m/%d %H:%M\"\n    }\n  },\n  \"ettoday\": {\n    \"name\": \"東森新聞雲\",\n    \"layout_list\": [\n      { \"layout\": \"fashion\", \"prefix\": \"https://fashion.ettoday.net/\" },\n      { \"layout\": \"game\", \"prefix\": \"https://game.ettoday.net/\" },\n      { \"layout\": \"health\", \"prefix\": \"https://health.ettoday.net/\" },\n      { \"layout\": \"game\", \"prefix\": \"https://house.ettoday.net/\" },\n      { \"layout\": \"game\", \"prefix\": \"https://pets.ettoday.net/\" },\n      { \"layout\": \"speed\", \"prefix\": \"https://speed.ettoday.net/\" },\n      { \"layout\": \"game\", \"prefix\": \"https://sports.ettoday.net/\" },\n      { \"layout\": \"game\", \"prefix\": \"https://star.ettoday.net/\" },\n      { \"layout\": \"health\", \"prefix\": \"https://travel.ettoday.net/\" }\n    ],\n    \"mobile\": {\n      \"title_node\": \"div.subject_news > header > h1\",\n      \"date_node\": \"span.date > time\",\n      \"date_format\": \"%Y年%m月%d日 %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"div.subject_news > div.story > p\"\n    },\n    \"fashion\": {\n      \"title_node\": \"header > h1\",\n      \"date_node\": \"time.date\",\n      \"date_format\": \"%Y/%m/%d %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"article div.story > p\"\n    },\n    \"game\": {\n      \"title_node\": \"article h1.title\",\n      \"date_node\": \"time\",\n      \"date_format\": \"%Y年%m月%d日 %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"article div.story > p\"\n    },\n    \"health\": {\n      \"title_node\": \"header > h1\",\n      \"date_node\": \"time\",\n      \"date_format\": \"時間： %Y年%m月%d日 %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"article div.story > p\"\n    },\n    \"speed\": {\n      \"title_node\": \"article h1.title\",\n      \"date_node\": \"time\",\n      \"date_format\": \"%Y-%m-%d %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"article div.story > p\"\n    },\n    \"search\": {\n      \"url\": \"https://www.ettoday.net/news_search/doSearch.php?keywords=${KEYWORD}&page=${PAGE}&daydiff=3&idx=1\",\n      \"last_page\": \"div.page_nav > div.menu_page > p.info\",\n      \"page_pattern\": \"共(\\\\d+)頁\",\n      \"result_node\": \"#result-list > div.archive\",\n      \"link_node\": \"div.box_2 > h2 > a\",\n      \"title_node\": \"div.box_2 > h2 > a\",\n      \"date_node\": \"div.box_2 > p.detail > span.date\",\n      \"date_pattern\": \"\\\\d{4}-\\\\d{2}-\\\\d{2}\",\n      \"date_format\": \"%Y-%m-%d\"\n    }\n  },\n  \"ltn\": {\n    \"name\": \"自由時報\",\n    \"layout_list\": [\n      { \"layout\": \"3c\", \"prefix\": \"https://3c.ltn.com.tw\" },\n      { \"layout\": \"auto\", \"prefix\": \"https://auto.ltn.com.tw\" },\n      { \"layout\": \"ec\", \"prefix\": \"https://ec.ltn.com.tw\" },\n      { \"layout\": \"ent\", \"prefix\": \"https://ent.ltn.com.tw\" },\n      { \"layout\": \"estate\", \"prefix\": \"https://estate.ltn.com.tw\" },\n      { \"layout\": \"food\", \"prefix\": \"https://food.ltn.com.tw\" },\n      { \"layout\": \"istyle\", \"prefix\": \"https://istyle.ltn.com.tw\" },\n      { \"layout\": \"market\", \"prefix\": \"https://market.ltn.com.tw\" },\n      { \"layout\": \"playing\", \"prefix\": \"https://playing.ltn.com.tw\" },\n      { \"layout\": \"sports\", \"prefix\": \"https://sports.ltn.com.tw\" },\n      { \"layout\": \"talk\", \"prefix\": \"https://talk.ltn.com.tw\" }\n    ],\n    \"mobile\": {\n      \"title_node\": \"div.com > h2\",\n      \"date_node\": \"div.com > div.h2_else > div.time\",\n      \"date_format\": [ \"%Y-%m-%d %H:%M\", \"%Y-%m-%d\" ],\n      \"author_node\": \"\",\n      \"article_node\": \"div.com > div.boxTitle > p\"\n    },\n    \"3c\": {\n      \"title_node\": \"section.nbox > h1\",\n      \"date_node\": \"section.nbox > span.writer > span:nth-of-type(1)\",\n      \"date_format\": \"%Y-%m-%d %H:%M\",\n      \"author_node\": \"section.nbox > span.writer > span:nth-of-type(2)\",\n      \"article_node\": \"div.boxTitle > p\"\n    },\n    \"auto\": {\n      \"title_node\": \"section > div.title_box > h1\",\n      \"date_node\": \"section > div.title_box > div.unit_else\",\n      \"date_format\": \"%Y/%m/%d\",\n      \"author_node\": \"section > div.title_box > div.unit_else\",\n      \"article_node\": \"section > div.detail > p\"\n    },\n    \"ec\": {\n      \"title_node\": \"article.com > h1\",\n      \"date_node\": \"article.com > div.h1_else > div.time\",\n      \"date_format\": \"%Y-%m-%d %H:%M:%S\",\n      \"author_node\": \"\",\n      \"article_node\": \"article.com > div.textbody > p\"\n    },\n    \"ent\": {\n      \"title_node\": \"div.news_content > h1\",\n      \"date_node\": \"div.news_content > div.author > div.date\",\n      \"date_format\": \"%Y/%m/%d %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"div.news_content > p\"\n    },\n    \"estate\": {\n      \"title_node\": \"div.container > h1\",\n      \"date_node\": \"div.container > p.author > span.time\",\n      \"date_format\": \"%Y/%m/%d %H:%M\",\n      \"author_node\": \"div.container > p.author\",\n      \"article_node\": \"div.container > div.wordright > p\"\n    },\n    \"food\": {\n      \"title_node\": \"section > div.context > h2\",\n      \"date_node\": \"section > div.context > b.date\",\n      \"date_format\": \"%Y/%m/%d\",\n      \"author_node\": \"\",\n      \"article_node\": \"section > div.context > p\"\n    },\n    \"istyle\": {\n      \"title_node\": \"div.content > div.title_box > h1\",\n      \"date_node\": \"div.content > div.title_box > div.unit_else\",\n      \"date_format\": \"%b. %d %Y\",\n      \"author_node\": \"div.content > div.title_box > div.unit_else\",\n      \"article_node\": \"div.content > div.article_content > p\"\n    },\n    \"market\": {\n      \"title_node\": \"div.com > h2\",\n      \"date_node\": \"div.com > div.h2_else > div.time\",\n      \"date_format\": \"%Y-%m-%d %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"div.com > div.h2_else > p\"\n    },\n    \"playing\": {\n      \"title_node\": \"div.left_content > div.article_header > h1\",\n      \"date_node\": \"div.left_content > div.article_header > div.author > span:nth-of-type(2)\",\n      \"date_format\": \"%Y-%m-%d\",\n      \"author_node\": \"div.left_content > div.article_header > div.author > span:nth-of-type(1)\",\n      \"article_node\": \"div.left_content > div.article_body > div.text > p\"\n    },\n    \"sports\": {\n      \"title_node\": \"div.news_content > h1\",\n      \"date_node\": \"div.news_content > div.author > div.date\",\n      \"date_format\": \"%Y/%m/%d %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"div.news_content > p\"\n    },\n    \"talk\": {\n      \"title_node\": \"div.conbox > h1\",\n      \"date_node\": \"div.conbox > div.top_share > div.writer > a > span:nth-of-type(2) > div.mobile_none\",\n      \"date_format\": \"%Y-%m-%d %H:%M\",\n      \"author_node\": \"div.conbox > div.top_share > div.writer > a > span:nth-of-type(2)\",\n      \"article_node\": \"div.conbox > div.cont > p\"\n    },\n    \"search\": {\n      \"url\": \"https://m.ltn.com.tw/search/${PAGE}?q=${KEYWORD}\",\n      \"begin_date_format\": \"&start=%Y-%m-%d\",\n      \"end_date_format\": \"&end=%Y-%m-%d\",\n      \"result_node\": \"ul.news > li\",\n      \"link_node\": \"a\",\n      \"title_node\": \"a > p\",\n      \"date_node\": \"a > span\",\n      \"date_format\": \"%Y-%m-%d\"\n    }\n  },\n  \"setn\": {\n    \"name\": \"三立新聞網\",\n    \"layout_list\": [\n      { \"layout\": \"entertainment\", \"prefix\": \"https://www.setn.com/e/\" }\n    ],\n    \"mobile\": {\n      \"title_node\": \"section.news-all-area > h1\",\n      \"date_node\": \"section.news-all-area > div.page-date > time\",\n      \"date_format\": \"%Y-%m-%d %H:%M\",\n      \"author_node\": \"\",\n      \"article_node\": \"#ckuse > article > p\"\n    },\n    \"entertainment\": {\n      \"title_node\": \"div.content1 > div.title > h1\",\n      \"date_node\": \"div.content1 > div.title > div.titleBtnBlock > div.time\",\n      \"date_format\": \"%Y/%m/%d %H:%M:%S\",\n      \"author_node\": \"\",\n      \"article_node\": \"div.Content2 > p\"\n    },\n    \"search\": {\n      \"url\": \"https://www.setn.com/m/search.aspx?q=${KEYWORD}&p=${PAGE}\",\n      \"result_node\": \"div.news-area\",\n      \"link_node\": \"div.news-info > div.news-word > a\",\n      \"title_node\": \"div.news-info > div.news-word > a\",\n      \"date_node\": \"div.news-info > div.lable-date\",\n      \"date_format\": \"%Y/%m/%d %H:%M\"\n    }\n  },\n  \"udn\": {\n    \"name\": \"聯合新聞網\",\n    \"layout_list\": [\n      { \"layout\": \"autos\", \"prefix\": \"https://autos.udn.com\" },\n      { \"layout\": \"game\", \"prefix\": \"https://game.udn.com\" },\n      { \"layout\": \"global\", \"prefix\": \"https://global.udn.com\" },\n      { \"layout\": \"game\", \"prefix\": \"https://health.udn.com\" },\n      { \"layout\": \"house\", \"prefix\": \"https://house.udn.com\" },\n      { \"layout\": \"nba\", \"prefix\": \"https://nba.udn.com\" },\n      { \"layout\": \"opinion\", \"prefix\": \"https://opinion.udn.com\" },\n      { \"layout\": \"running\", \"prefix\": \"https://running.udn.com\" },\n      { \"layout\": \"stars\", \"prefix\": \"https://stars.udn.com\" },\n      { \"layout\": \"style\", \"prefix\": \"https://style.udn.com\" },\n      { \"layout\": \"vision\", \"prefix\": \"https://vision.udn.com\" }\n    ],\n    \"mobile\": {\n      \"title_node\": \"#story_body_content > h1\",\n      \"date_node\": \"#story_bady_info > div.story_bady_info_author > span\",\n      \"date_format\": \"%Y-%m-%d %H:%M\",\n      \"author_node\": \"#story_bady_info > div.story_bady_info_author > a\",\n      \"article_node\": \"#story_body_content > p\"\n    },\n    \"autos\": {\n      \"title_node\": \"#story_art_title\",\n      \"date_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author > span\",\n      \"date_format\": \"%Y-%m-%d %H:%M:%S\",\n      \"author_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author\",\n      \"article_node\": \"#story_body_content > p\"\n    },\n    \"game\": {\n      \"title_node\": \"#story_art_title\",\n      \"date_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author > span\",\n      \"date_format\": \"%Y-%m-%d %H:%M\",\n      \"author_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author\",\n      \"article_node\": \"#story_body_content > p\"\n    },\n    \"global\": {\n      \"title_node\": \"#story_art_title\",\n      \"date_node\": \"#story_bady_info\",\n      \"date_format\": \"%Y/%m/%d\",\n      \"author_node\": \"\",\n      \"article_node\": \"#story_body > div.story_body_content > p\"\n    },\n    \"house\": {\n      \"title_node\": \"#story_art_title\",\n      \"date_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author > span\",\n      \"date_format\": \"%Y-%m-%d %H:%M:%S\",\n      \"author_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author\",\n      \"article_node\": \"#story_body_content > p\"\n    },\n    \"nba\": {\n      \"title_node\": \"#story_body_content > h1\",\n      \"date_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author > span\",\n      \"date_format\": \"%Y-%m-%d %H:%M\",\n      \"author_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author\",\n      \"article_node\": \"#story_body_content > span > p\"\n    },\n    \"opinion\": {\n      \"title_node\": \"#container > main > h1\",\n      \"date_node\": \".story_bady_info_author > time\",\n      \"date_format\": \"%Y/%m/%d\",\n      \"author_node\": \".story_bady_info_author > .story_bady_info > a\",\n      \"article_node\": \"#container > main > p\"\n    },\n    \"stars\": {\n      \"title_node\": \"#story_art_title\",\n      \"date_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author > span\",\n      \"date_format\": \"%Y-%m-%d %H:%M\",\n      \"author_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author\",\n      \"article_node\": \"#story > p\"\n    },\n    \"style\": {\n      \"title_node\": \"#story_art_title > font\",\n      \"date_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author > span\",\n      \"date_format\": \"%Y-%m-%d %H:%M\",\n      \"author_node\": \"#shareBar > div.shareBar__info > div.shareBar__info--author\",\n      \"article_node\": \"#story-main > p\"\n    },\n    \"search\": {\n      \"url\": \"https://udn.com/search/result/2/${KEYWORD}/${PAGE}\",\n      \"last_page\": \"#result_list > div.pagelink > span.total\",\n      \"page_pattern\": \"共 (\\\\d+) 頁\",\n      \"result_node\": \"#search_content > dt\",\n      \"link_node\": \"a\",\n      \"title_node\": \"a > h2\",\n      \"date_node\": \"a > span.cat\",\n      \"date_pattern\": \"\\\\d{4}/\\\\d{2}/\\\\d{2}\",\n      \"date_format\": \"%Y/%m/%d\"\n    }\n  }\n}\n"
  },
  {
    "path": "twnews/conf/usage.txt",
    "content": "用法:\n  python3 -m twnews 動作\n\n動作列表:\n  soup   [路徑]           分解一則新聞，路徑可以是新聞網址或檔案路徑\n  search [關鍵字] [頻道]  關鍵字搜尋新聞，取10筆，列出搜尋結果\n  snsp   [關鍵字] [頻道]  關鍵字搜尋新聞，取10筆，讀取新聞，分解新聞\n  sncp   [關鍵字]         關鍵字搜尋新聞，取100筆，比較各新聞網站效能\n  cpkw   [關鍵字]         關鍵字搜尋上個月的新聞，統計各家媒體標題出現關鍵字的次數\n  help                    顯示這個訊息\n\n頻道列表:\n  appledaily  蘋果日報\n  cna         中央社\n  ettoday     東森新聞雲\n  ltn         自由時報\n  setn        三立新聞網\n  udn         聯合新聞網\n\n預設值:\n  [路徑]    https://tw.news.appledaily.com/local/realtime/20181025/1453825 (這是一則上吊新聞)\n  [頻道]    appledaily\n  [關鍵字]  酒駕\n\n* 中時電子報雖然不支援搜尋功能，但是分解新聞功能有作用\n"
  },
  {
    "path": "twnews/exceptions.py",
    "content": "\"\"\"\n例外模組\n\"\"\"\n\nclass SyncException(Exception):\n    \"\"\"\n    同步資料時觸發的例外\n    \"\"\"\n    def __init__(self, reason):\n        super().__init__()\n        self.reason = reason\n\nclass NetworkException(SyncException):\n    \"\"\"\n    因網路問題觸發的例外\n    \"\"\"\n\nclass InvalidDataException(SyncException):\n    \"\"\"\n    因無效資料問題觸發的例外\n    \"\"\"\n"
  },
  {
    "path": "twnews/finance/__init__.py",
    "content": "\"\"\"\n財經資料蒐集工具共用模組\n\"\"\"\n\nimport os\nimport sqlite3\nimport sys\n\nfrom requests.exceptions import RequestException\n\nimport twnews.common as common\nfrom twnews.exceptions import NetworkException\n\nDDL_LIST = [\n    # 三大法人\n    '''\n    CREATE TABLE IF NOT EXISTS `institution` (\n        trading_date TEXT,\n        security_id TEXT,\n        security_name TEXT,\n        foreign_trend INTEGER,\n        stic_trend INTEGER,\n        dealer_trend INTEGER,\n        PRIMARY KEY (`trading_date`, `security_id`)\n    );\n    ''',\n    # 融資融券\n    '''\n    CREATE TABLE IF NOT EXISTS `margin` (\n        trading_date TEXT,\n        security_id TEXT,\n        security_name TEXT,\n        buying_balance INTEGER,\n        selling_balance INTEGER,\n        PRIMARY KEY (`trading_date`, `security_id`)\n    );\n    ''',\n    # 借券賣出\n    '''\n    CREATE TABLE IF NOT EXISTS `short_sell` (\n        trading_date TEXT,\n        security_id TEXT,\n        security_name TEXT,\n        borrowed INTEGER,\n        selled INTEGER,\n        PRIMARY KEY (`trading_date`, `security_id`)\n    );\n    ''',\n    # 鉅額交易\n    '''\n    CREATE TABLE IF NOT EXISTS `block` (\n        trading_date TEXT,\n        security_id TEXT,\n        security_name TEXT,\n        tick_rank INTEGER,\n        tick_type TEXT,\n        close REAL,\n        volume INTEGER,\n        total INTEGER,\n        PRIMARY KEY (`trading_date`, `security_id`, `tick_rank`)\n    );\n    ''',\n    # ETF 淨值折溢價\n    '''\n    CREATE TABLE IF NOT EXISTS `etf_offset` (\n        trading_date TEXT,\n        security_id TEXT,\n        security_name TEXT,\n        close REAL,\n        net REAL,\n        offset REAL,\n        PRIMARY KEY (`trading_date`, `security_id`)\n    );\n    '''\n]\n\n# 股權分散\nDDL_DIST = '''\nCREATE TABLE IF NOT EXISTS level{:02d} (\n    `trading_date` TEXT NOT NULL,\n    `security_id` TEXT NOT NULL,\n    `numof_holders` INTEGER NOT NULL,\n    `numof_stocks` INTEGER NOT NULL,\n    `percentof_stocks` REAL NOT NULL,\n    PRIMARY KEY(`trading_date`, `security_id`)\n);\n'''\n\nREPEAT_LIMIT = 3\nREPEAT_INTERVAL = 5\n\ndef get_connection(rebuild=False):\n    \"\"\"\n    自動產生財經資料庫與取得連線\n    \"\"\"\n    db_dir = os.path.expanduser('~/.twnews/db')\n    if not os.path.isdir(db_dir):\n        os.makedirs(db_dir)\n\n    db_path = db_dir + '/finance.sqlite'\n    if rebuild:\n        os.remove(db_path)\n    db_ready = os.path.isfile(db_path)\n\n    db_conn = sqlite3.connect(db_path)\n    if not db_ready:\n        # 產生籌碼資料表\n        for ddl in DDL_LIST:\n            db_conn.execute(ddl)\n\n        # 產生各級股權分散表, 有 1~17 級\n        for level in range(1, 18):\n            ddl = DDL_DIST.format(level)\n            db_conn.execute(ddl)\n\n        db_conn.commit()\n\n    return db_conn\n\ndef get_argument(index, default=''):\n    \"\"\"\n    取得 shell 參數, 或使用預設值\n    \"\"\"\n    if len(sys.argv) <= index:\n        return default\n    return sys.argv[index]\n\ndef fucking_get(hook, url, params):\n    \"\"\"\n    共用 HTTP GET 處理邏輯\n    \"\"\"\n    session = common.get_session(False)\n    try:\n        resp = session.get(url, params=params)\n        if resp.status_code != 200:\n            msg = 'Got HTTP error, status code: %d' % resp.status_code\n            raise NetworkException(msg)\n        dataset = hook(resp)\n    except RequestException as ex:\n        msg = 'Cannot get response, exception type: %s' % type(ex).__name__\n        raise NetworkException(msg)\n\n    return dataset\n"
  },
  {
    "path": "twnews/finance/broker.py",
    "content": "\"\"\"\n券商與分公司資訊與門牌定位\n\n已知問題:\n* 有筆紀錄無法成功定位\n  1. 8770 大鼎\n  2. 1115 台灣企銀-太平\n  3. 779m 國票-中港\n  4. 9636 富邦-中壢\n  這 4 筆用工人智慧取經緯度，其餘自動化\n* TGOS 服務查詢 500 次的時候，會拒絕之後的 request\n  可能需要重置 requests session，現階段程式無法一口氣完成 9xx 筆定位\n\"\"\"\n\nimport os\nimport re\nimport json\nimport sqlite3\nimport time\nimport urllib.parse\n\nimport requests\nfrom bs4 import BeautifulSoup\nfrom sqlalchemy.ext.declarative import declarative_base\nfrom sqlalchemy.orm import sessionmaker\nfrom sqlalchemy import Column, Integer, String, Float, create_engine\nfrom pyproj import Transformer\n\nBase = declarative_base()\n\nclass TradingLocation(Base):\n    \"\"\"\n    分點資料\n    \"\"\"\n    __tablename__ = 'trading_locs'\n    id = Column(String(4), primary_key=True)\n    name = Column(String(100), nullable=False)\n    address = Column(String(100), nullable=False)\n    phone = Column(String(100), nullable=False)\n    parent = Column(String(100), nullable=False, default=-1)\n    lat = Column(Float(), nullable=False, default=0.0)\n    lng = Column(Float(), nullable=False, default=0.0)\n    started_at = Column(String(100), nullable=False)\n\ndef date_conv(hw_date):\n    \"\"\"\n    民國日期轉西元日期 ISO 格式\n    \"\"\"\n    patterns = [\n        r'^(\\d{2,3})(\\d{2})(\\d{2})$',\n        r'^(\\d{2,3})/(\\d{2})/(\\d{2})$',\n    ]\n\n    ad_date = None\n    for pattern in patterns:\n        m = re.match(pattern, hw_date)\n        if not m:\n            continue\n        d_yy = int(m[1]) + 1911\n        d_mm = int(m[2])\n        d_dd = int(m[3])\n        ad_date = '%4d-%02d-%02d' % (d_yy, d_mm, d_dd)\n        break\n\n    return ad_date\n\ndef visit_branch(session, parent_id):\n    \"\"\"\n    爬分公司\n    \"\"\"\n    url = 'https://www.twse.com.tw/brokerService/brokerServiceAudit'\n    params = {\n        'stkNo': parent_id,\n        'showType': 'list',\n        'focus': 6\n    }\n    resp = requests.get(url, params=params)\n    if resp.status_code != 200:\n        exit(1)\n\n    branches = []\n    soup = BeautifulSoup(resp.text, 'lxml')\n    table = soup.select('#table6 > table')[0]\n    for row in table.select('tr'):\n        cols = row.select('td')\n        if not cols:\n            continue\n        if cols[0].has_attr('colspan'):\n            break\n\n        loc = TradingLocation()\n        loc.id = cols[0].text.strip()\n        loc.name = cols[1].text.strip()\n        loc.address = cols[3].text.strip()\n        loc.phone = cols[4].text.strip()\n        loc.started_at = date_conv(cols[2].text.strip())\n        loc.parent = parent_id\n        session.merge(loc)\n\ndef visit_parent(session):\n    \"\"\"\n    爬母公司\n    \"\"\"\n    resp = requests.get('https://www.twse.com.tw/zh/brokerService/brokerServiceAudit')\n    if resp.status_code != 200:\n        exit(1)\n\n    db_path = os.path.expanduser('~/.twnews/db/finance.sqlite')\n    db_conn = sqlite3.connect(db_path)\n    soup = BeautifulSoup(resp.text, 'lxml')\n    table = soup.select('#table2 > table')[0]\n    for row in table.select('tr'):\n        cols = row.select('td')\n        if not cols:\n            continue\n\n        loc = TradingLocation()\n        loc.id = cols[0].text.strip()\n        loc.name = cols[1].text.strip()\n        loc.address = cols[3].text.strip()\n        loc.phone = cols[4].text.strip()\n        loc.started_at = date_conv(cols[2].text.strip())\n        session.merge(loc)\n\n        visit_branch(session, loc.id)\n\ndef geocode_single(address, req_session, sid, transformer):\n    \"\"\"\n    處理單筆地址定位\n    \"\"\"\n    # 騙到 EPSG:3826 座標\n    time.sleep(0.5)\n    url = 'https://map.tgos.tw/TGOSCloud/Generic/Project/GHTGOSViewer_Map.ashx'\n    params = {\n        'method': 'querymoiaddr',\n        'address': address,\n        'useoddeven': False,\n        'sid': sid\n    }\n    resp = req_session.post(url, data=params)\n    if resp.status_code != 200:\n        # print(resp.status_code)\n        return (0.0, 0.0)\n\n    try:\n        respjson = json.loads(resp.text)\n    except:\n        return (0.0, 0.0)\n\n    if not respjson['AddressList']:\n        # print(json.dumps(respjson, indent=2))\n        return (0.0, 0.0)\n\n    result = json.loads(resp.text)['AddressList'][0]\n    point = transformer.transform(result['X'], result['Y'])\n    return point\n\ndef geocode(orm_session):\n    # 座標轉換器，只需要做一次 (需要 pyproj)\n    transformer = Transformer.from_crs(\"EPSG:3826\", \"EPSG:4326\")\n\n    # 做個給掰的 session\n    # 目前發現偽裝真實用戶只能查 500 個地址，可能需要重置連線才能處理更多資料\n    req_session = requests.Session()\n    req_session.headers.update({\n        'Accept': 'text/html,application/xhtml+xml,application/xml',\n        'Accept-Encoding': 'gzip, deflate',\n        'Accept-Language': 'zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7',\n        'Cache-Control': 'max-age=0',\n        'Connection': 'keep-alive',\n        'User-Agent': 'Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) ' \\\n            + 'AppleWebKit/537.36 (KHTML, like Gecko) ' \\\n            + 'Chrome/46.0.2490.76 Mobile Safari/537.36'\n    })\n\n    # 騙到 pagekey, 只需要做一次\n    url = 'https://map.tgos.tw/TGOSCloud/Web/Map/TGOSViewer_Map.aspx'\n    resp = req_session.get(url)\n    if resp.status_code != 200:\n        print(resp.status_code)\n        exit(1)\n\n    match = re.search(r\"sircPAGEKEY\\s?='([^\\']+)';\", resp.text)\n    if not match:\n        print('無法取得 pagekey')\n        exit(1)\n\n    pagekey = urllib.parse.unquote(match[1])\n    # print(pagekey)\n\n    # 加上這一行其他的 request 才不會被擋掉\n    req_session.headers['Referer'] = url\n\n    # 騙到 sid, 只需要做一次\n    url = 'https://map.tgos.tw/TGOSCloud/Generic/Utility/UG_Handler.ashx'\n    params = {\n        'method': 'GetSessionID',\n        'pagekey': pagekey\n    }\n    resp = req_session.post(url, params=params)\n    if resp.status_code != 200:\n        print(resp.status_code)\n        exit(1)\n\n    fields = json.loads(resp.text)\n    sid = fields['id']\n    # print(sid)\n\n    q = orm_session.query(TradingLocation).filter(\n        TradingLocation.lat == 0.0,\n        TradingLocation.lng == 0.0\n    )\n    for loc in q.all():\n        slices = loc.address.split('、')\n        m = re.search('^.+號', slices[0])\n        if m:\n            fixed_address = m[0]\n        else:\n            fixed_address = slices[0] + '號'\n        (lat, lng) = geocode_single(fixed_address, req_session, sid, transformer)\n        print(loc.id, fixed_address, lat, lng)\n        loc.lat = lat\n        loc.lng = lng\n        orm_session.merge(loc)\n        #orm_session.commit()\n    #address = '台北市114內湖區石潭路151號'\n    #geocode_single(address, req_session, sid, transformer)\n\ndef main():\n    db_repl = 'sqlite:///' + os.path.expanduser('~/.twnews/db/finance.sqlite')\n    engine = create_engine(db_repl, echo=True)\n    Base.metadata.create_all(engine)\n    Session = sessionmaker(bind=engine)\n    session = Session()\n    # 爬券商分點\n    # visit_parent(session)\n    # 券商分點做地理定位\n    geocode(session)\n    session.commit()\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "twnews/finance/tdcc.py",
    "content": "\"\"\"\n集保中心資料蒐集模組\n\"\"\"\n\nimport os\nimport re\nimport sqlite3\n\nimport pandas\n\nimport twnews.common as common\nfrom twnews.finance import get_argument, fucking_get, get_connection\nfrom twnews.cache import DateCache\n\ndef import_dist(csv_date='latest'):\n    \"\"\"\n    匯入指定日期的股權分散表到資料庫\n    \"\"\"\n    logger = common.get_logger('finance')\n    csv_dir = common.get_cache_dir('tdcc')\n\n    if csv_date == 'latest':\n        max_date = ''\n        for filename in os.listdir(csv_dir):\n            match = re.match(r'dist-(\\d{8}).csv.xz', filename)\n            if match is not None:\n                if max_date < match.group(1):\n                    max_date = match.group(1)\n        csv_date = max_date\n\n    csv_file = '{}/dist-{}.csv.xz'.format(csv_dir, csv_date)\n    iso_date = re.sub(r'(\\d{4})(\\d{2})(\\d{2})', r'\\1-\\2-\\3', csv_date)\n    if not os.path.isfile(csv_file):\n        logger.error('沒有 TDCC %s 的股權分散表檔案: %s', iso_date, csv_file)\n        return\n\n    db_conn = get_connection()\n    col_names = [\n        'trading_date',\n        'security_id',\n        'level',\n        'numof_holders',\n        'numof_stocks',\n        'percentof_stocks'\n    ]\n    # Pandas 會自動偵測 extension 解壓縮, 不需要自幹\n    dfrm = pandas.read_csv(csv_file, skiprows=1, header=None, names=col_names)\n    # print(df.head(3))\n    # print(df.tail(3))\n    sql_template = '''\n    INSERT INTO level%02d (\n        trading_date, security_id,\n        numof_holders, numof_stocks, percentof_stocks\n    ) VALUES (?,?,?,?,?);\n    '''\n    affected = -1\n    for index, row in dfrm.iterrows():\n        sql = sql_template % row['level']\n        try:\n            db_conn.execute(sql, (\n                iso_date,\n                row['security_id'],\n                row['numof_holders'],\n                row['numof_stocks'],\n                row['percentof_stocks']\n            ))\n            if index > 0 and index % 5000 == 0:\n                logger.debug('已儲存 TDCC %s 的股權分散資料 %d 筆', iso_date, index)\n            affected = index\n        except sqlite3.IntegrityError:\n            affected = 0\n            break\n\n    if affected > 0:\n        logger.info('已匯入 TDCC %s 的股權分散資料 %d 筆', iso_date, affected)\n    else:\n        logger.warning('已匯入過 TDCC %s 的股權分散資料', iso_date)\n    db_conn.commit()\n    db_conn.close()\n\ndef rebuild_dist():\n    \"\"\"\n    重建股權分散表資料庫\n    \"\"\"\n    # 清除現有資料\n    db_conn = get_connection()\n    for level in range(1, 18):\n        sql = 'DELETE FROM level%02d;' % level\n        db_conn.execute(sql)\n    db_conn.commit()\n    db_conn.execute('VACUUM') # cannot VACUUM from within a transaction\n    db_conn.close()\n\n    # 確認可以重建的日期\n    csv_dir = common.get_cache_dir('tdcc')\n    date_list = []\n    for filename in os.listdir(csv_dir):\n        match = re.match(r'dist-(\\d{8}).csv.xz', filename)\n        if match is not None:\n            date_list.append(match.group(1))\n\n    # 依日期順序重建資料\n    date_list.sort()\n    for csv_date in date_list:\n        import_dist(csv_date)\n\ndef backup_dist(refresh=False):\n    \"\"\"\n    備份最新的股權分散表\n    \"\"\"\n    url = 'https://smart.tdcc.com.tw/opendata/getOD.ashx'\n    params = {\n        'id': '1-5'\n    }\n    def hook(resp):\n        logger = common.get_logger('finance')\n        # 確認統計日期\n        csv = resp.text\n        dt_beg = csv.find('\\n') + 1\n        dt_end = csv.find(',', dt_beg)\n        csv_date = csv[dt_beg:dt_end]\n        date_cache = DateCache('tdcc', 'dist', 'csv')\n        changed = refresh or not date_cache.has(csv_date)\n\n        # 製作備份檔\n        if changed:\n            date_cache.save(csv_date, csv)\n            logger.info('已更新 TDCC %s 的股權分散表', csv_date)\n        else:\n            logger.info('已存在 TDCC %s 的股權分散表, 不需更新', csv_date)\n\n        return changed\n\n    return fucking_get(hook, url, params)\n\ndef sync_dataset():\n    \"\"\"\n    暫時寫成這個形式方便排程用\n    \"\"\"\n    changed = backup_dist()\n    if changed:\n        import_dist()\n\n    # 測試時，即使快取存在也重新匯入一次\n    # backup_dist()\n    # import_dist()\n\ndef main():\n    \"\"\"\n    下載最新的股權分散表，轉檔到資料庫:\n      python3 -m twnews.finance.tdcc\n    使用既有的 CSV 檔案重建股權分散表資料庫:\n      python3 -m twnews.finance.tdcc rebuild\n    \"\"\"\n    action = get_argument(1, 'update')\n    logger = common.get_logger('finance')\n\n    if action == 'update':\n        sync_dataset()\n    elif action == 'rebuild':\n        rebuild_dist()\n    else:\n        logger.error('無法識別的動作 %s', action)\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "twnews/finance/ticksmap.py",
    "content": "# pylint: disable=all\n\nimport io\nimport json\nimport os\nimport re\nimport requests\nimport sys\nimport subprocess\nfrom datetime import datetime\n\nimport wx\nimport wx.xrc\nfrom bs4 import BeautifulSoup\n\nfrom twnews.cache import DateCache\n\nclass CaptchaDialog(wx.App):\n    \"\"\"\n    驗證碼詢問 GUI\n    \"\"\"\n\n    def __init__(self, captcha_stream):\n        self.captcha_code = False\n        self.captcha_stream = captcha_stream\n        super().__init__(self)\n\n    def OnInit(self):\n        \"\"\"\n        載入 GUI 與 Enter 事件配置\n        \"\"\"\n        try:\n            path = os.path.realpath(os.path.dirname(__file__) + '/../res/ticksmap-captcha.xrc')\n            res = wx.xrc.XmlResource(path)\n            self.frame = res.LoadFrame(None, 'main_frame')\n\n            cpi = wx.xrc.XRCCTRL(self.frame, 'captcha_image', 'wxStaticBitmap')\n            im = wx.Image(self.captcha_stream)\n            bm = wx.Bitmap(im)\n            cpi.SetBitmap(bm)\n\n            self.cpc = wx.xrc.XRCCTRL(self.frame, 'captcha_code', 'wxTextCtrl')\n            self.cpc.Bind(wx.EVT_KEY_UP, self.OnKeyPress, id=wx.xrc.XRCID('captcha_code'))\n\n            self.frame.Centre()\n            self.frame.Show()\n        except:\n            return False\n\n        return True\n\n    def OnKeyPress(self, event):\n        \"\"\"\n        文字輸入框按下 Enter 後送出\n        \"\"\"\n        if event.GetKeyCode() == 13:\n            self.captcha_code = self.cpc.GetValue()\n            self.frame.Close()\n\ndef handle_captcha(captcha_stream):\n    \"\"\"\n    用 wxPython 介面詢問驗證碼\n    \"\"\"\n    app = CaptchaDialog(captcha_stream)\n    app.MainLoop()\n    return app.captcha_code\n\ndef load_soup(security_id, date_str):\n    \"\"\"\n    分點進出 HTML 載入作業，含快取管理與下載流程\n    TODO: 加強錯誤處理\n    \"\"\"\n\n    dc = DateCache('bsr.twse', security_id, 'html')\n\n    # 偵測快取\n    if date_str != 'latest':\n        if dc.has(date_str):\n            soup = BeautifulSoup(dc.load(date_str), 'lxml')\n            return soup\n        return None\n\n    # 無快取狀況下載分點進出網頁\n    session = requests.Session()\n    resp = session.get('https://bsr.twse.com.tw/bshtm/bsMenu.aspx')\n    if resp.status_code != 200:\n        return None\n\n    soup = BeautifulSoup(resp.text, 'lxml')\n    nodes = soup.select('form input')\n    params = {}\n    for node in nodes:\n        name = node.attrs['name']\n\n        # 忽略鉅額交易的 radio button\n        if name in ('RadioButton_Excd', 'Button_Reset'):\n            continue\n\n        if 'value' in node.attrs:\n            params[node.attrs['name']] = node.attrs['value']\n        else:\n            params[node.attrs['name']] = ''\n\n    # 找 captcha 圖片\n    captcha_image = soup.select('#Panel_bshtm img')[0]['src']\n    m = re.search(r'guid=(.+)', captcha_image)\n    if m is None:\n        return None\n\n    # 顯示 captcha 圖片\n    url = 'https://bsr.twse.com.tw/bshtm/' + captcha_image\n    resp = requests.get(url)\n    if resp.status_code != 200:\n        return None\n\n    captcha_stream = io.BytesIO(resp.content)\n    captcha_code = handle_captcha(captcha_stream)\n    if captcha_code == False:\n        return None\n\n    params['CaptchaControl1'] = captcha_code\n    params['TextBox_Stkno'] = security_id\n\n    # 送出\n    resp = session.post('https://bsr.twse.com.tw/bshtm/bsMenu.aspx', data=params)\n    if resp.status_code != 200:\n        print('任務失敗: %d' % resp.status_code)\n        return None\n\n    soup = BeautifulSoup(resp.text, 'lxml')\n    nodes = soup.select('#HyperLink_DownloadCSV')\n    if len(nodes) == 0:\n        print('任務失敗，沒有下載連結')\n        return None\n\n    # 下載分點進出 CSV\n    # 分點進出 CSV 沒有日期\n    # HTML https://bsr.twse.com.tw/bshtm/bsContent.aspx?v=t (其實任意參數都是 HTML)\n    # CSV  https://bsr.twse.com.tw/bshtm/bsContent.aspx\n    url = 'https://bsr.twse.com.tw/bshtm/bsContent.aspx?v=t'\n    resp = session.get(url)\n    if resp.status_code != 200:\n        print('任務失敗，無法下載分點進出 CSV')\n        return None\n\n    # 拆解分點進出網頁，找日期欄，然後存入快取\n    soup = BeautifulSoup(resp.text, 'lxml')\n    root_tables = soup.select('#sp_HtmlCode > table')\n\n    # 取日期資訊，製作快取檔\n    # TODO: 簡化與容錯處理\n    meta_path = 'tr > td > table > tr:nth-of-type(1) > td > table'\n    meta_table = root_tables[0].select(meta_path)[0]\n    date_item = meta_table.select('#receive_date')[0]\n    date_str = date_item.get_text().strip().replace('/', '')\n    dc.save(date_str, resp.text)\n    return soup\n\ndef parse_tick_node(row):\n    \"\"\"\n    撮合值的 td 取出 (分點 ID, 買量, 賣量)\n    \"\"\"\n    cols = row.select('td')\n    rank = cols[0].get_text().strip()\n    if rank == '':\n        return (False, False, False)\n    loc_id = cols[1].get_text().strip()[0:4]\n    bid_vol = int(cols[3].get_text().strip().replace(',', ''))\n    ask_vol = int(cols[4].get_text().strip().replace(',', ''))\n    return (loc_id, bid_vol, ask_vol)\n\ndef main():\n    \"\"\"\n    分點進出表下載工具\n    \"\"\"\n    if len(sys.argv) < 2:\n        exit(1)\n\n    if len(sys.argv) == 3:\n        datestr = sys.argv[2]\n    else:\n        datestr = 'latest'\n\n    print('* 載入分點進出明細', flush=True)\n    soup = load_soup(sys.argv[1], datestr)\n    if soup is None:\n        exit(1)\n\n    # 取最頂層的表格，數目應該是頁數的 2 倍\n    # * 偶數表是 meta data 與 detail\n    # * 奇數表是 pagination\n    print('* 製作熱值圖 HTML', flush=True)\n    root_tables = soup.select('#sp_HtmlCode > table')\n    meta_path = 'tr > td > table > tr:nth-of-type(1) > td > table'\n    meta_table = root_tables[0].select(meta_path)[0]\n    trading_date = meta_table.select('#receive_date')[0] \\\n        .get_text() \\\n        .strip() \\\n        .replace('/', '-')\n    (security_id, security_name) = meta_table.select('#stock_id')[0] \\\n        .get_text() \\\n        .strip() \\\n        .split('\\xa0') # 注意這裡是 ascii 160, &nbsp; 不能使用一般空白字元切\n\n    # 處理根層級的偶數表，蒐集撮合紀錄\n    tick_nodes = []\n    for even in range(0, len(root_tables), 2):\n        # 偶數表中取撮合紀錄表，左表奇數次交易，右表偶數次交易\n        sel = '#table2 > tr > td > table'\n        ticks_table = root_tables[even].select(sel)\n        even_ticks = ticks_table[0].select('tr')\n        odd_ticks = ticks_table[1].select('tr')\n        i = 1\n        while i < len(even_ticks):\n            tick_nodes.append(even_ticks[i])\n            tick_nodes.append(odd_ticks[i])\n            i += 1\n\n    # 分點買賣明細加總\n    volsum = {}\n    for tick_node in tick_nodes:\n        (loc_id, bid, ask) = parse_tick_node(tick_node)\n        if loc_id != False:\n            if loc_id not in volsum:\n                volsum[loc_id] = { 'bid': bid, 'ask': ask }\n            else:\n                volsum[loc_id]['bid'] += bid\n                volsum[loc_id]['ask'] += ask\n\n    # 置入 geojson\n    path = os.path.realpath(os.path.dirname(__file__) + '/../res/ticksmap-locations.geojson')\n    with open(path, 'r') as ffc:\n        fc = json.load(ffc)\n        filtered_features = []\n        for feature in fc['features']:\n            loc_id = feature['properties']['id']\n            if loc_id in volsum:\n                feature['properties']['bid'] = volsum[loc_id]['bid']\n                feature['properties']['ask'] = volsum[loc_id]['ask']\n                filtered_features.append(feature)\n        fc['features'] = filtered_features\n\n    # 置入 heatmap 模板\n    path = os.path.realpath(os.path.dirname(__file__) + '/../res/ticksmap-template.html')\n    with open(path, 'r') as tplf:\n        leaflet = os.path.expanduser('~/Desktop/ticksmap-{}-{}.html'.format(\n            security_id,\n            trading_date.replace('-', '')\n        ))\n        screenshot = os.path.expanduser('~/Desktop/ticksmap-{}-{}.png'.format(\n            security_id,\n            trading_date.replace('-', '')\n        ))\n\n        # 將分點進出資料套版，生成 leaflet 熱值圖網頁\n        fcstr = json.dumps(fc)\n        template = tplf.read()\n        template = template.replace('__FEATURE_COLLECTION__', fcstr, 1)\n        template = template.replace('__SECURITY_ID__', security_id, 1)\n        template = template.replace('__SECURITY_NAME__', security_name, 1)\n        html = template.replace('__DATE__', trading_date, 1)\n        with open(leaflet, 'w') as out:\n            out.write(html)\n\n        # 用 headless browser 將 leaflet 網頁轉換成圖檔\n        # TODO: 自動偵測瀏覽器路徑\n        #   * Windows 使用者 Chrome\n        #   * Windows 系統 Chrome\n        #   * Windows Brave\n        #   * Chrome for MacOS\n        chrome_bin = '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser'\n        # chrome_bin = r'C:\\Program Files (x86)\\BraveSoftware\\Brave-Browser\\Application\\brave.exe' # ok!\n\n        # 相關參數參考 https://peter.sh/experiments/chromium-command-line-switches/\n        cmd = [\n            chrome_bin,\n            '--headless',\n            '--hide-scrollbars',\n            '--window-size=1000x850',\n            '--screenshot=' + screenshot,\n            leaflet\n        ]\n        print('* 製作熱值圖 PNG', flush=True)\n        subprocess.run(cmd, stderr=subprocess.DEVNULL)\n\n        # 用預設軟體開啟圖檔\n        #         MacOS: open\n        #  Windows + PS: start-process -file\n        # print(os.path.realpath(screenshot))\n        # cmd = [ 'powershell', 'start-process', '-file', os.path.realpath(screenshot) ]\n        cmd = [ 'open', os.path.realpath(screenshot) ]\n        # print(cmd)\n        subprocess.run(cmd)\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "twnews/finance/tpex.py",
    "content": "\"\"\"\n櫃買中心資料蒐集模組\n\"\"\"\n\nfrom datetime import datetime\nimport io\nimport re\nimport sqlite3\nimport sys\nimport time\n\nimport pandas\n\nimport twnews.common as common\nfrom twnews.finance import get_argument, fucking_get, get_connection, REPEAT_LIMIT, REPEAT_INTERVAL\nfrom twnews.cache import DateCache\nfrom twnews.exceptions import InvalidDataException, NetworkException\n\nURL_BASE = 'https://www.tpex.org.tw/web/stock/'\n\ndef download_margin(datestr):\n    \"\"\"\n    下載信用交易資料集\n    \"\"\"\n    url = URL_BASE + 'margin_trading/margin_balance/margin_bal_result.php'\n    params = {\n        'd': datestr,\n        'l': 'zh_tw',\n        'o': 'json'\n    }\n    def hook(resp):\n        dataset = resp.json()\n        if dataset['iTotalRecords'] == 0:\n            raise InvalidDataException('日期格式錯誤，或是 %s 的資料尚未產出' % datestr)\n        return dataset\n    return fucking_get(hook, url, params)\n\ndef download_block(datestr):\n    \"\"\"\n    下載鉅額交易資料集\n    \"\"\"\n    url = URL_BASE + 'block_trade/daily_qutoes/block_day_download.php'\n    params = {\n        'd': datestr,\n        'l': 'zh_tw',\n        's': '0,asc,0',\n        'charset': 'UTF-8'\n    }\n    def hook(resp):\n        # TODO: 需要檢查資料完整性，任意日期都有資料\n        dataset = resp.text\n        return dataset\n    return fucking_get(hook, url, params)\n\ndef download_institution(datestr):\n    \"\"\"\n    下載三大法人資料集\n    \"\"\"\n    url = URL_BASE + '3insti/daily_trade/3itrade_hedge_result.php'\n    params = {\n        'd': datestr,\n        'l': 'zh_tw',\n        'o': 'json',\n        's': '0,asc',\n        't': 'D',\n        'se': 'EW'\n    }\n    def hook(resp):\n        dataset = resp.json()\n        # 取標題內日期，轉換成與輸入參數相同的格式\n        title = dataset['reportTitle']\n        date_in_title = re.sub('[年月]', '/', title[:title.find(' ') - 1])\n        # 參數日期與標題日期相同才視為有效資料\n        if datestr != date_in_title:\n            raise InvalidDataException('日期格式錯誤，或是 %s 的資料尚未產出' % datestr)\n        return dataset\n    return fucking_get(hook, url, params)\n\ndef download_selled(datestr):\n    \"\"\"\n    下載已借券賣出\n    \"\"\"\n    url = URL_BASE + 'margin_trading/margin_sbl/margin_sbl_download.php'\n    params = {\n        'd': datestr,\n        'l': 'zh-tw',\n        's': '0,asc,0',\n        'charset': 'utf-8'\n    }\n    def hook(resp):\n        # TODO: 非交易日還是有資料，不過只有 header 和 footer\n        obuf = io.StringIO()\n        ibuf = io.StringIO(resp.text)\n\n        # 過濾 header, footer & 欄位名稱消除空白字元\n        enabled = False\n        line = ibuf.readline()\n        while line:\n            if not enabled:\n                enabled = line.startswith('股票代號')\n                if enabled:\n                    line = line.replace(' ', '')\n            else:\n                enabled = line.startswith('\"')\n            if enabled:\n                obuf.write(line)\n            line = ibuf.readline()\n\n        dataset = obuf.getvalue()\n        ibuf.close()\n        obuf.close()\n        return dataset\n    return fucking_get(hook, url, params)\n\ndef import_margin(dbcon, trading_date, dataset):\n    \"\"\"\n    匯入信用交易資料集\n    \"\"\"\n    sql = '''\n        INSERT INTO `margin` (\n            trading_date, security_id, security_name,\n            buying_balance, selling_balance\n        ) VALUES (?,?,?,?,?)\n    '''\n    for detail in dataset['aaData']:\n        # TODO\n        security_id = detail[0]\n        security_name = detail[1].strip()\n        buying_balance = int(detail[6].replace(',', ''))\n        selling_balance = int(detail[14].replace(',', ''))\n        dbcon.execute(sql, (\n            trading_date,\n            security_id,\n            security_name,\n            buying_balance,\n            selling_balance\n        ))\n\ndef import_block(dbcon, trading_date, dataset):\n    \"\"\"\n    匯入鉅額交易資料集\n    \"\"\"\n    col_names = ['交易型態', '交割期別', '代號', '名稱', '成交價格(元)', '成交股數', '成交值(元)', '成交時間']\n    # Pandas 只能吃 file-like 參數，需要把 dataset 轉成 StringIO\n    dfrm = pandas.read_csv(\n        io.StringIO(dataset),\n        engine='python', sep=',',\n        skiprows=3, skipfooter=1, names=col_names\n    )\n\n    sql = '''\n        INSERT INTO `block` (\n            trading_date, security_id, security_name,\n            tick_rank, tick_type,\n            close, volume, total\n        ) VALUES (?,?,?,?,?,?,?,?)\n    '''\n    tick_rank = {}\n\n    for _index, row in dfrm.iterrows():\n        security_id = row['代號']\n        security_name = row['名稱']\n        tick_type = row['交易型態']\n        close = float(row['成交價格(元)'])\n        volume = int(row['成交股數'].replace(',', ''))\n        total = int(row['成交值(元)'].replace(',', ''))\n\n        if security_id not in tick_rank:\n            tick_rank[security_id] = 1\n        else:\n            tick_rank[security_id] += 1\n\n        dbcon.execute(sql, (\n            trading_date,\n            security_id,\n            security_name,\n            tick_rank[security_id],\n            tick_type,\n            close,\n            volume,\n            total\n        ))\n\ndef import_institution(dbcon, trading_date, dataset):\n    \"\"\"\n    匯入三大法人資料集\n    \"\"\"\n    sql = '''\n        INSERT INTO `institution` (\n            trading_date, security_id, security_name,\n            foreign_trend, stic_trend, dealer_trend\n        ) VALUES (?,?,?,?,?,?)\n    '''\n    for detail in dataset['aaData']:\n        security_id = detail[0]\n        security_name = detail[1].strip()\n        # 外資 + 外資自營 + 陸資\n        foreign_trend = int(detail[10].replace(',', '')) // 1000\n        # 投信\n        stic_trend = int(detail[13].replace(',', '')) // 1000\n        # 自營投資 + 自營避險\n        dealer_trend = int(detail[22].replace(',', '')) // 1000\n        dbcon.execute(sql, (\n            trading_date, security_id, security_name,\n            foreign_trend, stic_trend, dealer_trend\n        ))\n\ndef import_selled(dbcon, trading_date, dataset):\n    \"\"\"\n    匯入借券賣出\n    \"\"\"\n    sql = '''\n        UPDATE `short_sell` SET `security_name`=?,`selled`=?\n        WHERE `trading_date`=? AND `security_id`=?\n    '''\n    dfrm = pandas.read_csv(io.StringIO(dataset), sep=',')\n    for _, row in dfrm.iterrows():\n        security_id = row['股票代號']\n        security_name = row['股票名稱'].strip()\n        balance = int(row['借券賣出當日餘額'].replace(',', ''))\n        dbcon.execute(sql, (security_name, balance, trading_date, security_id))\n\ndef sync_dataset(dsitem, trading_date='latest'):\n    \"\"\"\n    同步資料集共用流程\n\n    * HTTP 日期格式: 108/05/29\n    * DB, Cache 日期格式: 2019-05-29\n    \"\"\"\n    if trading_date == 'latest':\n        trading_date = datetime.today().strftime('%Y-%m-%d')\n\n    logger = common.get_logger('finance')\n    dtm = re.match(r'(\\d{4})-(\\d{2})-(\\d{2})', trading_date)\n    tokens = [\n        str(int(dtm.group(1)) - 1911),\n        dtm.group(2),\n        dtm.group(3)\n    ]\n    datestr = '/'.join(tokens)\n    data_format = 'csv' if dsitem in ['block', 'selled'] else 'json'\n    this_mod = sys.modules[__name__]\n\n    daily_cache = DateCache('tpex', dsitem, data_format)\n    if daily_cache.has(trading_date):\n        # 載入快取資料集\n        logger.info('套用 TPEX %s 的 %s 快取', trading_date, dsitem)\n        dataset = daily_cache.load(trading_date)\n    else:\n        # 下載資料集\n        dataset = None\n        repeat = 0\n        hookfunc = getattr(this_mod, 'download_' + dsitem)\n        while dataset is None and repeat < REPEAT_LIMIT:\n            repeat += 1\n            if repeat > 1:\n                time.sleep(REPEAT_INTERVAL)\n            try:\n                logger.info('下載 TPEX %s 的 %s', trading_date, dsitem)\n                dataset = hookfunc(datestr)\n                logger.debug('儲存 TPEX %s 的 %s', trading_date, dsitem)\n                daily_cache.save(trading_date, dataset)\n            except InvalidDataException as ex:\n                logger.error(\n                    '無法取得 TPEX %s 的 %s (重試: %d, %s)',\n                    trading_date, dsitem, repeat, ex.reason\n                )\n                repeat = REPEAT_LIMIT\n            except NetworkException as ex:\n                logger.error(\n                    '無法取得 TPEX %s 的 %s (重試: %d, %s)',\n                    trading_date, dsitem, repeat, ex.reason\n                )\n\n    if dataset is None:\n        return\n\n    # return\n\n    # 匯入資料庫\n    # pylint: disable=bare-except\n    dbcon = get_connection()\n    hookfunc = getattr(this_mod, 'import_' + dsitem)\n    try:\n        hookfunc(dbcon, trading_date, dataset)\n        logger.info('匯入 TPEX %s 的 %s', trading_date, dsitem)\n    except sqlite3.IntegrityError as ex:\n        logger.warning('已經匯入過 TPEX %s 的 %s', trading_date, dsitem)\n    except:\n        logger.error('無法匯入 TPEX %s 的 %s', trading_date, dsitem)\n    dbcon.commit()\n    dbcon.close()\n\ndef main():\n    \"\"\"\n    python3 -m twnews.finance.tpex {action}\n    python3 -m twnews.finance.tpex {action} {date}\n    \"\"\"\n    action = get_argument(1)\n    trading_date = get_argument(2, 'latest')\n\n    if trading_date != 'latest' and re.match(r'^\\d{4}-\\d{2}-\\d{2}$', trading_date) is None:\n        print('日期格式錯誤')\n        return\n\n    if action in ['block', 'margin', 'institution', 'selled']:\n        sync_dataset(action, trading_date)\n    else:\n        print('參數錯誤')\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "twnews/finance/twse.py",
    "content": "\"\"\"\n證交所資料蒐集模組\n\"\"\"\n\nfrom datetime import datetime\nimport io\nimport re\nimport sqlite3\nimport sys\nimport time\n\nimport pandas\n\nimport twnews.common as common\nfrom twnews.finance import get_argument, fucking_get, get_connection, REPEAT_LIMIT, REPEAT_INTERVAL\nfrom twnews.cache import DateCache\nfrom twnews.exceptions import NetworkException, InvalidDataException\n\ndef download_margin(datestr):\n    \"\"\"\n    下載信用交易資料集\n    \"\"\"\n    url = 'http://www.twse.com.tw/exchangeReport/MI_MARGN'\n    params = {\n        'date': datestr,\n        'response': 'json',\n        'selectType': 'ALL'\n    }\n    def hook(resp):\n        dataset = resp.json()\n        status = dataset['stat']\n        if status == 'OK':\n            if not dataset['data']:\n                raise InvalidDataException('可能尚未結算或是非交易日')\n        else:\n            raise NetworkException(status)\n        return dataset\n    return fucking_get(hook, url, params)\n\ndef download_block(datestr):\n    \"\"\"\n    下載鉅額交易資料集\n    \"\"\"\n    url = 'http://www.twse.com.tw/block/BFIAUU'\n    params = {\n        'date': datestr,\n        'response': 'json',\n        'selectType': 'S'\n    }\n    def hook(resp):\n        dataset = resp.json()\n        status = dataset['stat']\n        if status == 'OK':\n            if not dataset['data']:\n                raise InvalidDataException('可能尚未結算或是非交易日')\n        else:\n            raise NetworkException(status)\n        return dataset\n    return fucking_get(hook, url, params)\n\ndef download_institution(datestr):\n    \"\"\"\n    下載三大法人資料集\n    \"\"\"\n    url = 'http://www.twse.com.tw/fund/T86'\n    params = {\n        'date': datestr,\n        'response': 'json',\n        'selectType': 'ALL'\n    }\n    def hook(resp):\n        # TODO: 需要驗證資料完整性\n        dataset = resp.json()\n        status = dataset['stat']\n        if status != 'OK':\n            raise NetworkException(status)\n        return dataset\n    return fucking_get(hook, url, params)\n\ndef download_borrowed(datestr):\n    \"\"\"\n    下載可借券賣出資料集 (只有當天資料)\n    TODO: 待確認資料切換時間\n    \"\"\"\n    url = 'http://www.twse.com.tw/SBL/TWT96U'\n    params = {\n        'response': 'csv'\n    }\n    def hook(resp):\n        dataset = resp.text\n        line1 = dataset[:dataset.find('\\r\\n')]\n        match = re.search(r'(\\d{3})年(\\d{2})月(\\d{2})日', line1)\n        if match is not None:\n            dtup = (\n                int(match.group(1)) + 1911,\n                match.group(2),\n                match.group(3)\n            )\n            dsdate = '%04d%s%s' % dtup\n            if dsdate != datestr:\n                raise InvalidDataException('資料日期 %s 與指定日期不同' % dsdate)\n        else:\n            raise NetworkException('無法取得 CSV 內的日期字串')\n        return dataset\n    return fucking_get(hook, url, params)\n\ndef download_selled(datestr):\n    \"\"\"\n    下載已借券賣出\n    \"\"\"\n    url = 'http://www.twse.com.tw/exchangeReport/TWT93U'\n    params = {\n        'date': datestr,\n        'response': 'json'\n    }\n    def hook(resp):\n        dataset = resp.json()\n        status = dataset['stat']\n        if status == 'OK':\n            if not dataset['data']:\n                raise InvalidDataException('可能尚未結算或非交易日')\n        else:\n            raise NetworkException(status)\n        return dataset\n    return fucking_get(hook, url, params)\n\ndef download_etfnet(datestr):\n    \"\"\"\n    下載 ETF 淨值折溢價率\n    \"\"\"\n    url = 'https://mis.twse.com.tw/stock/data/all_etf.txt'\n    params = {}\n    def hook(resp):\n        dataset = resp.json()\n        dsdate = dataset['a1'][1]['msgArray'][0]['i']\n        if datestr != dsdate:\n            raise InvalidDataException('資料日期 %s 與指定日期不同' % dsdate)\n        return dataset\n    return fucking_get(hook, url, params)\n\ndef import_margin(dbcon, trading_date, dataset):\n    \"\"\"\n    匯入信用交易資料集\n    \"\"\"\n    sql = '''\n        INSERT INTO `margin` (\n            trading_date, security_id, security_name,\n            buying_balance, selling_balance\n        ) VALUES (?,?,?,?,?)\n    '''\n    for detail in dataset['data']:\n        security_id = detail[0]\n        security_name = detail[1].strip()\n        buying_balance = int(detail[6].replace(',', ''))\n        selling_balance = int(detail[12].replace(',', ''))\n        dbcon.execute(sql, (\n            trading_date,\n            security_id,\n            security_name,\n            buying_balance,\n            selling_balance\n        ))\n\ndef import_block(dbcon, trading_date, dataset):\n    \"\"\"\n    匯入鉅額交易資料集\n    \"\"\"\n    sql = '''\n        INSERT INTO `block` (\n            trading_date, security_id, security_name,\n            tick_rank, tick_type,\n            close, volume, total\n        ) VALUES (?,?,?,?,?,?,?,?)\n    '''\n    tick_rank = {}\n    for trade in dataset['data']:\n        if trade[0] == '總計':\n            break\n        security_id = trade[0]\n        security_name = trade[1]\n        tick_type = trade[2]\n        close = float(trade[3].replace(',', ''))\n        volume = int(trade[4].replace(',', ''))\n        total = int(trade[5].replace(',', ''))\n        if security_id not in tick_rank:\n            tick_rank[security_id] = 1\n        else:\n            tick_rank[security_id] += 1\n        dbcon.execute(sql, (\n            trading_date,\n            security_id,\n            security_name,\n            tick_rank[security_id],\n            tick_type,\n            close,\n            volume,\n            total\n        ))\n\ndef import_institution(dbcon, trading_date, dataset):\n    \"\"\"\n    匯入三大法人資料集\n    \"\"\"\n    sql = '''\n        INSERT INTO `institution` (\n            trading_date, security_id, security_name,\n            foreign_trend, stic_trend, dealer_trend\n        ) VALUES (?,?,?,?,?,?)\n    '''\n    for detail in dataset['data']:\n        security_id = detail[0]\n        security_name = detail[1].strip()\n        foreign_trend = int(detail[4].replace(',', '')) // 1000\n        stic_trend = int(detail[10].replace(',', '')) // 1000\n        dealer_trend = int(detail[11].replace(',', '')) // 1000\n        dbcon.execute(sql, (\n            trading_date, security_id, security_name,\n            foreign_trend, stic_trend, dealer_trend\n        ))\n\ndef import_borrowed(dbcon, trading_date, dataset):\n    \"\"\"\n    匯入可借券賣出資料集 (使用 pandas 處理 CSV)\n    \"\"\"\n    sql = '''\n        INSERT INTO `short_sell` (\n            trading_date, security_id, borrowed\n        ) VALUES (?,?,?)\n    '''\n    col_names = ['sec1', 'vol1', 'sec2', 'vol2', 'shit']\n    # Pandas 只能吃 file-like 參數，需要把 dataset 轉成 StringIO\n    dfrm = pandas.read_csv(io.StringIO(dataset), sep=',', skiprows=3, header=None, names=col_names)\n    cnt = 0\n    for _, row in dfrm.iterrows():\n        # 匯入左側資料\n        security_id = row['sec1'].strip('=\"')\n        borrowed = int(row['vol1'].replace(',', ''))\n        dbcon.execute(sql, (trading_date, security_id, borrowed))\n        cnt += 1\n        # 匯入右側資料\n        security_id = row['sec2'].strip('=\"')\n        if security_id != '_':\n            borrowed = int(row['vol2'].replace(',', ''))\n            dbcon.execute(sql, (trading_date, security_id, borrowed))\n            cnt += 1\n\ndef import_selled(dbcon, trading_date, dataset):\n    \"\"\"\n    匯入已借券賣出資料集\n    \"\"\"\n    sql = '''\n        UPDATE `short_sell` SET `security_name`=?, `selled`=?\n        WHERE `trading_date`=? AND `security_id`=?\n    '''\n    for detail in dataset['data']:\n        security_id = detail[0]\n        security_name = detail[1].strip()\n        balance = int(detail[12].replace(',', ''))\n        if security_id != '':\n            # TODO: 如果 WHERE 條件不成立，沒更新到資料，應該要產生 Exception 觸發錯誤回報\n            dbcon.execute(sql, (\n                security_name, balance,\n                trading_date, security_id\n            ))\n\ndef import_etfnet(dbcon, trading_date, dataset):\n    \"\"\"\n    匯入 ETF 淨值折溢價率\n    \"\"\"\n    # 來源資料轉換 key/value 形式\n    # 相同發行者的 ETF 會放一組\n    etf_dict = {}\n    for fund in dataset['a1']:\n        if 'msgArray' in fund:\n            for etf in fund['msgArray']:\n                etf_dict[etf['a']] = etf\n\n    # 依證券代碼順序處理\n    sql = '''\n        INSERT INTO `etf_offset` (\n            trading_date, security_id, security_name,\n            close, net, offset\n        ) VALUES (?,?,?,?,?,?)\n    '''\n    for k in sorted(etf_dict.keys()):\n        etf = etf_dict[k]\n        dbcon.execute(sql, (trading_date, etf['a'], etf['b'], etf['e'], etf['f'], etf['g']))\n\ndef sync_dataset(dsitem, trading_date='latest'):\n    \"\"\"\n    同步資料集共用流程\n    \"\"\"\n    if trading_date == 'latest':\n        trading_date = datetime.today().strftime('%Y-%m-%d')\n\n    logger = common.get_logger('finance')\n    datestr = trading_date.replace('-', '')\n    data_format = 'csv' if dsitem == 'borrowed' else 'json'\n    this_mod = sys.modules[__name__]\n\n    daily_cache = DateCache('twse', dsitem, data_format)\n    if daily_cache.has(datestr):\n        # 載入快取資料集\n        logger.debug('套用 TWSE %s 的 %s 快取', trading_date, dsitem)\n        dataset = daily_cache.load(datestr)\n    else:\n        # 下載資料集\n        dataset = None\n        repeat = 0\n        hookfunc = getattr(this_mod, 'download_' + dsitem)\n        while dataset is None and repeat < REPEAT_LIMIT:\n            repeat += 1\n            if repeat > 1:\n                time.sleep(REPEAT_INTERVAL)\n            try:\n                logger.info('下載 TWSE %s 的 %s', trading_date, dsitem)\n                dataset = hookfunc(datestr)\n                logger.debug('儲存 TWSE %s 的 %s', trading_date, dsitem)\n                daily_cache.save(datestr, dataset)\n            except InvalidDataException as ex:\n                logger.error(\n                    '無法取得 TWSE %s 的 %s (重試: %d, %s)',\n                    trading_date, dsitem, repeat, ex.reason\n                )\n                repeat = REPEAT_LIMIT\n            except NetworkException as ex:\n                logger.error(\n                    '無法取得 TWSE %s 的 %s (重試: %d, %s)',\n                    trading_date, dsitem, repeat, ex.reason\n                )\n\n    if dataset is None:\n        return\n\n    # 匯入資料庫\n    # pylint: disable=bare-except\n    dbcon = get_connection()\n    hookfunc = getattr(this_mod, 'import_' + dsitem)\n    try:\n        hookfunc(dbcon, trading_date, dataset)\n        logger.info('匯入 TWSE %s 的 %s', trading_date, dsitem)\n    except sqlite3.IntegrityError as ex:\n        logger.warning('已經匯入過 TWSE %s 的 %s', trading_date, dsitem)\n    except:\n        # TODO: ex.args[0] 不確定是否可靠, 需要再確認\n        logger.error('無法匯入 TWSE %s 的 %s', trading_date, dsitem)\n    dbcon.commit()\n    dbcon.close()\n\ndef main():\n    \"\"\"\n    python3 -m twnews.finance.twse {action}\n    python3 -m twnews.finance.twse {action} {date}\n    \"\"\"\n    action = get_argument(1)\n    trading_date = get_argument(2, 'latest')\n\n    if trading_date != 'latest' and re.match(r'^\\d{4}-\\d{2}-\\d{2}$', trading_date) is None:\n        print('日期格式錯誤')\n        return\n\n    if action in ['block', 'margin', 'institution', 'borrowed', 'selled', 'etfnet']:\n        sync_dataset(action, trading_date)\n    else:\n        print('參數錯誤')\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "twnews/res/ticksmap-captcha.xrc",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resource version=\"2.9.0.5\">\n  <object name=\"main_frame\" class=\"wxFrame\">\n    <title>輸入驗證碼</title>\n    <object class=\"wxBoxSizer\">\n      <orient>wxVERTICAL</orient>\n      <minsize>230,160</minsize>\n      <object class=\"spacer\">\n        <size>200,15</size>\n      </object>\n      <object class=\"sizeritem\">\n        <flag>wxALIGN_CENTER</flag>\n        <object name=\"captcha_image\" class=\"wxStaticBitmap\">\n          <size>200,60</size>\n        </object>\n      </object>\n      <object class=\"spacer\">\n        <size>200,15</size>\n      </object>\n      <object class=\"sizeritem\">\n        <flag>wxALIGN_CENTER</flag>\n        <object name=\"captcha_code\" class=\"wxTextCtrl\">\n          <size>200,25</size>\n        </object>\n      </object>\n      <object class=\"spacer\">\n        <size>200,15</size>\n      </object>\n      <object class=\"sizeritem\">\n        <flag>wxALIGN_CENTER</flag>\n        <object class=\"wxStaticText\">\n          <size>200,30</size>\n        \t<style>wxALIGN_RIGHT</style>\n        \t<label>完成後按 Enter 送出</label>\n        </object>\n      </object>\n    </object>\n  </object>\n</resource>\n"
  },
  {
    "path": "twnews/res/ticksmap-locations.geojson",
    "content": "{\n  \"type\": \"FeatureCollection\",\n  \"features\": [\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55632732452477,\n          25.04158688504074\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1020\",\n        \"name\": \"\\u5408\\u5eab\",\n        \"phone\": \"02-27319987\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51080823591725,\n          25.043664306140116\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1030\",\n        \"name\": \"\\u571f\\u9280\",\n        \"phone\": \"02-23483948\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51310710381462,\n          25.043913459588925\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1040\",\n        \"name\": \"\\u81fa\\u9280\\u8b49\\u5238\",\n        \"phone\": \"02-23882188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51028779488004,\n          25.051170155854706\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1110\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280\",\n        \"phone\": \"02-25597171\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53342667008538,\n          25.052281416537795\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1160\",\n        \"name\": \"\\u65e5\\u76db\",\n        \"phone\": \"02-25048888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51167945998723,\n          25.042175310370748\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1230\",\n        \"name\": \"\\u5f70\\u9280\",\n        \"phone\": \"02-23619654\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55309086689374,\n          25.03297338266213\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1260\",\n        \"name\": \"\\u5b8f\\u9060\",\n        \"phone\": \"02-27008899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54368267948932,\n          25.047179768694402\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1360\",\n        \"name\": \"\\u6e2f\\u5546\\u9ea5\\u683c\\u7406\",\n        \"phone\": \"02-27347500\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54931009689535,\n          25.029235814800124\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1380\",\n        \"name\": \"\\u53f0\\u7063\\u532f\\u7acb\",\n        \"phone\": \"02-2326-8188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54925496369476,\n          25.02601029425199\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1440\",\n        \"name\": \"\\u7f8e\\u6797\",\n        \"phone\": \"02-23763766\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54925496369476,\n          25.02601029425199\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1470\",\n        \"name\": \"\\u53f0\\u7063\\u6469\\u6839\\u58eb\\u4e39\\u5229\",\n        \"phone\": \"02-27302888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54925496369476,\n          25.02601029425199\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1480\",\n        \"name\": \"\\u7f8e\\u5546\\u9ad8\\u76db\",\n        \"phone\": \"02-27304000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54517955306842,\n          25.058078123771878\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1520\",\n        \"name\": \"\\u745e\\u58eb\\u4fe1\\u8cb8\",\n        \"phone\": \"02-27156388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55371954979228,\n          25.037410864660483\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1530\",\n        \"name\": \"\\u6e2f\\u5546\\u5fb7\\u610f\\u5fd7\",\n        \"phone\": \"02-21922888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56608187757948,\n          25.03877471028857\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1560\",\n        \"name\": \"\\u6e2f\\u5546\\u91ce\\u6751\",\n        \"phone\": \"02-21769999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56669383519447,\n          25.04064778336209\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1570\",\n        \"name\": \"\\u6e2f\\u5546\\u6cd5\\u570b\\u8208\\u696d\",\n        \"phone\": \"02-21750800\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56608187757948,\n          25.03877471028857\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1590\",\n        \"name\": \"\\u82b1\\u65d7\\u74b0\\u7403\",\n        \"phone\": \"8726-9000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5688646287331,\n          25.03826461521507\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1650\",\n        \"name\": \"\\u65b0\\u52a0\\u5761\\u5546\\u745e\\u9280\",\n        \"phone\": \"02-87227200\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51309587724606,\n          25.043075555632672\n        ]\n      },\n      \"properties\": {\n        \"id\": \"2180\",\n        \"name\": \"\\u4e9e\\u6771\",\n        \"phone\": \"02-23618600\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54367316718195,\n          25.05204949387523\n        ]\n      },\n      \"properties\": {\n        \"id\": \"2200\",\n        \"name\": \"\\u5143\\u5927\\u671f\\u8ca8\",\n        \"phone\": \"02-27176000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54918468731599,\n          25.028912522276457\n        ]\n      },\n      \"properties\": {\n        \"id\": \"2210\",\n        \"name\": \"\\u7fa4\\u76ca\\u671f\\u8ca8\",\n        \"phone\": \"02-2700-2888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51706465414371,\n          25.050152610866082\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5050\",\n        \"name\": \"\\u5927\\u5c55\",\n        \"phone\": \"02-25551234\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54614850573897,\n          25.051999380423336\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5110\",\n        \"name\": \"\\u5bcc\\u9686\",\n        \"phone\": \"02-27182788\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53568958854905,\n          25.057707199312865\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5260\",\n        \"name\": \"\\u5927\\u6176\",\n        \"phone\": \"02-25084888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22860157863632,\n          24.955210757911725\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5320\",\n        \"name\": \"\\u9ad8\\u6a4b\",\n        \"phone\": \"03-4224243\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52468602293277,\n          25.04876928202976\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5380\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1\",\n        \"phone\": \"02-25636262\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6888876522262,\n          24.163771451198038\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5460\",\n        \"name\": \"\\u5bf6\\u76db\",\n        \"phone\": \"04-22309377\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51701086522118,\n          25.032492670595666\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5600\",\n        \"name\": \"\\u6c38\\u8208\",\n        \"phone\": \"02-23218200\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.82198887585135,\n          24.56031630372757\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5660\",\n        \"name\": \"\\u65e5\\u9032\",\n        \"phone\": \"037-332266\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56518798473458,\n          25.050297600264386\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5850\",\n        \"name\": \"\\u7d71\\u4e00\",\n        \"phone\": \"02-27478266\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30056660961714,\n          22.634887195832352\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5860\",\n        \"name\": \"\\u76c8\\u6ea2\",\n        \"phone\": \"07-2888516\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.6107618870506,\n          23.976696137468185\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5870\",\n        \"name\": \"\\u5149\\u9686\",\n        \"phone\": \"038-352181\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54394897702572,\n          25.039444340340598\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5920\",\n        \"name\": \"\\u5143\\u5bcc\",\n        \"phone\": \"02-23255818\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6818310173108,\n          23.976856378820973\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5960\",\n        \"name\": \"\\u65e5\\u8302\",\n        \"phone\": \"049-2353266\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54427997732583,\n          25.05284928794247\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6010\",\n        \"name\": \"\\u7287\\u4e9e\\u8b49\\u5238\",\n        \"phone\": \"02-27180101\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68151648556015,\n          24.13779326319005\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6110\",\n        \"name\": \"\\u53f0\\u4e2d\\u9280\",\n        \"phone\": \"04-22268588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.61617924984901,\n          25.0589172348979\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6160\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17\",\n        \"phone\": \"02-66392000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29800724636863,\n          22.623099703721376\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6210\",\n        \"name\": \"\\u65b0\\u767e\\u738b\",\n        \"phone\": \"07-2118888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5242747909776,\n          23.87335182058557\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6380\",\n        \"name\": \"\\u5149\\u548c\",\n        \"phone\": \"04-8886500\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.30300040827895,\n          24.993786703883426\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6450\",\n        \"name\": \"\\u6c38\\u5168\",\n        \"phone\": \"03-3352155\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45795929347729,\n          25.008461659152243\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6460\",\n        \"name\": \"\\u5927\\u660c\",\n        \"phone\": \"02-29689685\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.518143901973,\n          25.045820830940887\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6480\",\n        \"name\": \"\\u798f\\u90a6\",\n        \"phone\": \"02-23836888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.30631297712581,\n          24.992110225995972\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6620\",\n        \"name\": \"\\u5168\\u6cf0\",\n        \"phone\": \"03-3353359\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53258288735728,\n          25.04201384619974\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6910\",\n        \"name\": \"\\u5fb7\\u4fe1\",\n        \"phone\": \"02-23939988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.44149706381457,\n          25.1694911587292\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6950\",\n        \"name\": \"\\u798f\\u52dd\",\n        \"phone\": \"02-26251818\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53098268243339,\n          25.043042093948422\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7000\",\n        \"name\": \"\\u5146\\u8c50\",\n        \"phone\": \"02-23278988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20167088614014,\n          22.99998813402813\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7030\",\n        \"name\": \"\\u81f4\\u548c\",\n        \"phone\": \"06-2219777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.72673628232234,\n          24.25488700661086\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7070\",\n        \"name\": \"\\u8c50\\u8fb2\",\n        \"phone\": \"04-25281000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.20649400143107,\n          24.952791292516785\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7080\",\n        \"name\": \"\\u77f3\\u6a4b\",\n        \"phone\": \"03-4927373\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3247967662418,\n          22.620387790266808\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7670\",\n        \"name\": \"\\u91d1\\u6e2f\",\n        \"phone\": \"07-7253922\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5152164425769,\n          25.012069955709205\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7750\",\n        \"name\": \"\\u5317\\u57ce\",\n        \"phone\": \"02-29283456\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51396094014368,\n          25.06958687115064\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7790\",\n        \"name\": \"\\u570b\\u7968\",\n        \"phone\": \"02-25288988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52250680552487,\n          25.055200268481965\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8150\",\n        \"name\": \"\\u53f0\\u65b0\",\n        \"phone\": \"02-2181-5888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.32446616282999,\n          22.58870591508886\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8380\",\n        \"name\": \"\\u5b89\\u6cf0\",\n        \"phone\": \"07-8122789\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56677327562443,\n          25.032587487648936\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8440\",\n        \"name\": \"\\u6469\\u6839\\u5927\\u901a\",\n        \"phone\": \"02-87862288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56521045118325,\n          25.04281373711842\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8450\",\n        \"name\": \"\\u5eb7\\u548c\",\n        \"phone\": \"02-87871888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44447000080147,\n          23.475370003551532\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8490\",\n        \"name\": \"\\u842c\\u6cf0\",\n        \"phone\": \"05-2289911\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5375320581055,\n          24.259971290645026\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8520\",\n        \"name\": \"\\u4e2d\\u8fb2\",\n        \"phone\": \"04-26572801\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51309791903128,\n          25.043609091008246\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8560\",\n        \"name\": \"\\u65b0\\u5149\",\n        \"phone\": \"02-23118181\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53511049086421,\n          25.052216677516075\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8580\",\n        \"name\": \"\\u806f\\u90a6\\u5546\\u9280\",\n        \"phone\": \"02-25040066\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56413596337005,\n          25.059200351508807\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8710\",\n        \"name\": \"\\u967d\\u4fe1\",\n        \"phone\": \"02-27629288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5584161,\n          25.0330058\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8770\",\n        \"name\": \"\\u5927\\u9f0e\",\n        \"phone\": \"02-87862666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5476906789493,\n          25.057382833887658\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8840\",\n        \"name\": \"\\u7389\\u5c71\",\n        \"phone\": \"02-27131313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54912154770592,\n          25.02199616910617\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8880\",\n        \"name\": \"\\u570b\\u6cf0\",\n        \"phone\": \"02-23269888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56354738285579,\n          25.04027198666496\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8890\",\n        \"name\": \"\\u5927\\u548c\\u570b\\u6cf0\",\n        \"phone\": \"02-27239698\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56460399421985,\n          25.033524181174343\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8900\",\n        \"name\": \"\\u6cd5\\u9280\\u5df4\\u9ece\",\n        \"phone\": \"02-87297000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56111164490846,\n          25.03425396521133\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8960\",\n        \"name\": \"\\u9999\\u6e2f\\u4e0a\\u6d77\\u532f\\u8c50\",\n        \"phone\": \"02-66312899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5476906789493,\n          25.057382833887658\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9100\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e\",\n        \"phone\": \"02-87898888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55150597524369,\n          25.084875603296265\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9200\",\n        \"name\": \"\\u51f1\\u57fa\",\n        \"phone\": \"02-21818888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55091534806718,\n          25.05773398758345\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9300\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c\",\n        \"phone\": \"02-25456888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55228341974629,\n          25.038171253374973\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9600\",\n        \"name\": \"\\u5bcc\\u90a6\",\n        \"phone\": \"02-87716888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54367316718195,\n          25.05204949387523\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9800\",\n        \"name\": \"\\u5143\\u5927\",\n        \"phone\": \"02-27177777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51313466224889,\n          25.046858563293043\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A00\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1\",\n        \"phone\": \"02-2311-4345\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.67932882032501,\n          24.138023049092705\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1021\",\n        \"name\": \"\\u5408\\u5eab- \\u53f0\\u4e2d\",\n        \"phone\": \"04-22255141\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20785217188497,\n          22.998048342742422\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1022\",\n        \"name\": \"\\u5408\\u5eab-\\u53f0\\u5357\",\n        \"phone\": \"06-2260148\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.28415335084445,\n          22.624858545156123\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1023\",\n        \"name\": \"\\u5408\\u5eab-\\u9ad8\\u96c4\",\n        \"phone\": \"07-5319755\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44830999896347,\n          23.480500006287315\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1024\",\n        \"name\": \"\\u5408\\u5eab-\\u5609\\u7fa9\",\n        \"phone\": \"05-2220016\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.74243480777429,\n          25.129790883787546\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1025\",\n        \"name\": \"\\u5408\\u5eab-\\u57fa\\u9686\",\n        \"phone\": \"02-24288468\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54226127991265,\n          24.08201552308815\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1028\",\n        \"name\": \"\\u5408\\u5eab - \\u5f70\\u5316\",\n        \"phone\": \"04-7295528\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.36076902006839,\n          22.63198133614876\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1029\",\n        \"name\": \"\\u5408\\u5eab - \\u9cf3\\u5c71\",\n        \"phone\": \"07-7905555\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.97270020694022,\n          24.804291620951954\n        ]\n      },\n      \"properties\": {\n        \"id\": \"102A\",\n        \"name\": \"\\u5408\\u5eab-\\u65b0\\u7af9\",\n        \"phone\": \"03-5262711\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53180372709332,\n          25.052251466892706\n        ]\n      },\n      \"properties\": {\n        \"id\": \"102C\",\n        \"name\": \"\\u5408\\u5eab-\\u81ea\\u5f37\",\n        \"phone\": \"02-25218815\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31150586549468,\n          24.991279043189472\n        ]\n      },\n      \"properties\": {\n        \"id\": \"102E\",\n        \"name\": \"\\u5408\\u5eab-\\u6843\\u5712\",\n        \"phone\": \"03-347-3456\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.66157747025434,\n          24.165313145938327\n        ]\n      },\n      \"properties\": {\n        \"id\": \"102F\",\n        \"name\": \"\\u5408\\u5eab-\\u897f\\u53f0\\u4e2d\",\n        \"phone\": \"04-2316-6368\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49800733486221,\n          25.06144447654486\n        ]\n      },\n      \"properties\": {\n        \"id\": \"102G\",\n        \"name\": \"\\u5408\\u5eab-\\u4e09\\u91cd\",\n        \"phone\": \"02-2977-9588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54533682918803,\n          25.04842521151739\n        ]\n      },\n      \"properties\": {\n        \"id\": \"102Q\",\n        \"name\": \"\\u5408\\u5eab-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-27319987\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.67990128465617,\n          24.13825322494037\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1031\",\n        \"name\": \"\\u571f\\u9280-\\u53f0\\u4e2d\",\n        \"phone\": \"04-22266845\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20339440181245,\n          22.992252120248214\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1032\",\n        \"name\": \"\\u571f\\u9280-\\u53f0\\u5357\",\n        \"phone\": \"06-2200558\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.27129411775813,\n          22.873571988641256\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1033\",\n        \"name\": \"\\u571f\\u9280-\\u9ad8\\u96c4\",\n        \"phone\": \"07-5319591\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44979999686525,\n          23.47966000124929\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1034\",\n        \"name\": \"\\u571f\\u9280-\\u5609\\u7fa9\",\n        \"phone\": \"05-2224930\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96659466996886,\n          24.80375868702233\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1035\",\n        \"name\": \"\\u571f\\u9280-\\u65b0\\u7af9\",\n        \"phone\": \"03-5213211\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31489456142324,\n          23.3332966299898\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1036\",\n        \"name\": \"\\u571f\\u9280-\\u7389\\u91cc\",\n        \"phone\": \"03-8884900\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.60528118307762,\n          23.98263045084194\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1037\",\n        \"name\": \"\\u571f\\u9280-\\u82b1\\u84ee\",\n        \"phone\": \"038-330723\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5474650234814,\n          25.024833568124606\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1038\",\n        \"name\": \"\\u571f\\u9280-\\u548c\\u5e73\",\n        \"phone\": \"02-27001555\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52724587319906,\n          25.097343788113815\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1039\",\n        \"name\": \"\\u571f\\u9280-\\u58eb\\u6797\",\n        \"phone\": \"02-28323842\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3164644400523,\n          22.635521544152244\n        ]\n      },\n      \"properties\": {\n        \"id\": \"103A\",\n        \"name\": \"\\u571f\\u9280-\\u5efa\\u570b\",\n        \"phone\": \"07-2224911\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54183356049035,\n          24.080770728752796\n        ]\n      },\n      \"properties\": {\n        \"id\": \"103B\",\n        \"name\": \"\\u571f\\u9280-\\u5f70\\u5316\",\n        \"phone\": \"04-7201777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.414848991017,\n          23.351634208408967\n        ]\n      },\n      \"properties\": {\n        \"id\": \"103C\",\n        \"name\": \"\\u571f\\u9280-\\u767d\\u6cb3\",\n        \"phone\": \"06-6852888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.60640542181336,\n          25.05446942001287\n        ]\n      },\n      \"properties\": {\n        \"id\": \"103F\",\n        \"name\": \"\\u571f\\u9280-\\u5357\\u6e2f\",\n        \"phone\": \"02-26539955\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.35732650742509,\n          22.629326183169592\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1041\",\n        \"name\": \"\\u81fa\\u9280-\\u9cf3\\u5c71\",\n        \"phone\": \"07-7452126\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19675565514052,\n          22.99330465321226\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1042\",\n        \"name\": \"\\u81fa\\u9280-\\u81fa\\u5357\",\n        \"phone\": \"06-2202507\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51851236194777,\n          25.062495687748147\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1043\",\n        \"name\": \"\\u81fa\\u9280-\\u6c11\\u6b0a\",\n        \"phone\": \"02-25529458\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.9702534128656,\n          24.80177054430763\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1045\",\n        \"name\": \"\\u81fa\\u9280-\\u65b0\\u7af9\",\n        \"phone\": \"03-5266799\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6204925306737,\n          24.34941595522094\n        ]\n      },\n      \"properties\": {\n        \"id\": \"104A\",\n        \"name\": \"\\u81fa\\u9280-\\u81fa\\u4e2d\",\n        \"phone\": \"04-22238370\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29537003211789,\n          22.61962931052201\n        ]\n      },\n      \"properties\": {\n        \"id\": \"104C\",\n        \"name\": \"\\u81fa\\u9280-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2711434\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52639082254834,\n          25.028249598276087\n        ]\n      },\n      \"properties\": {\n        \"id\": \"104D\",\n        \"name\": \"\\u81fa\\u9280-\\u91d1\\u5c71\",\n        \"phone\": \"02-23418678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.67896972188629,\n          24.143131876821887\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1111\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u53f0\\u4e2d\",\n        \"phone\": \"04-2270160\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19802574994664,\n          22.99270074166405\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1112\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u53f0\\u5357\",\n        \"phone\": \"06-2238967\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30653312289412,\n          22.64079219600887\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1113\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u4e5d\\u5982\",\n        \"phone\": \"07-3137171\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.45106999990244,\n          23.479200007141184\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1114\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u5609\\u7fa9\",\n        \"phone\": \"05-2278043\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.7178125,\n          24.1301842\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1115\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u592a\\u5e73\",\n        \"phone\": \"04-22757802\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.489969232361,\n          22.670347729445268\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1116\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u5c4f\\u6771\",\n        \"phone\": \"08-7327171\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.00969324648646,\n          24.826725088982517\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1117\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u7af9\\u5317\",\n        \"phone\": \"03-5527171\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.71535072688161,\n          24.251532446909962\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1118\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u8c50\\u539f\",\n        \"phone\": \"04-25253485\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29587875997149,\n          22.795320846840365\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1119\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u5ca1\\u5c71\",\n        \"phone\": \"07-6227171\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43975670187386,\n          23.52144527714178\n        ]\n      },\n      \"properties\": {\n        \"id\": \"111A\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u6c11\\u96c4\",\n        \"phone\": \"05-2207171\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5184056211577,\n          25.0529491430657\n        ]\n      },\n      \"properties\": {\n        \"id\": \"111B\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u5efa\\u6210\",\n        \"phone\": \"02-25506998\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30159407232479,\n          22.632742219225428\n        ]\n      },\n      \"properties\": {\n        \"id\": \"111C\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u4e09\\u6c11\",\n        \"phone\": \"07-2877171\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51309704441478,\n          25.043398910926587\n        ]\n      },\n      \"properties\": {\n        \"id\": \"111D\",\n        \"name\": \"\\u81fa\\u7063\\u4f01\\u9280-\\u53f0\\u5317\",\n        \"phone\": \"02-23880971\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.19929070410133,\n          25.06746781989051\n        ]\n      },\n      \"properties\": {\n        \"id\": \"111E\",\n        \"name\": \"\\u81fa\\u7063\\u4f01\\u9280-\\u6843\\u5712\",\n        \"phone\": \"03-3311007\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30872276956832,\n          22.63465156760871\n        ]\n      },\n      \"properties\": {\n        \"id\": \"111F\",\n        \"name\": \"\\u53f0\\u7063\\u4f01\\u9280-\\u5317\\u9ad8\\u96c4\",\n        \"phone\": \"07-2360116\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47399617905653,\n          25.015708971866616\n        ]\n      },\n      \"properties\": {\n        \"id\": \"111G\",\n        \"name\": \"\\u81fa\\u7063\\u4f01\\u9280-\\u57d4\\u5898\",\n        \"phone\": \"02-89515671\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51313594465451,\n          25.046588077225692\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1161\",\n        \"name\": \"\\u65e5\\u76db-\\u5fe0\\u5b5d\",\n        \"phone\": \"02-23117676\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.211231212601,\n          22.998331684858304\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1162\",\n        \"name\": \"\\u65e5\\u76db-\\u53f0\\u5357\",\n        \"phone\": \"06-2208088\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.65802322556158,\n          24.157501330064473\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1163\",\n        \"name\": \"\\u65e5\\u76db-\\u53f0\\u4e2d\",\n        \"phone\": \"04-23278989\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.58702324772196,\n          25.06885851523333\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1164\",\n        \"name\": \"\\u65e5\\u76db-\\u5167\\u6e56\",\n        \"phone\": \"02-87927888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45884157473422,\n          25.008598217597026\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1165\",\n        \"name\": \"\\u65e5\\u76db-\\u677f\\u6a4b\",\n        \"phone\": \"02-29693333\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.510193268056,\n          25.001498418233083\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1166\",\n        \"name\": \"\\u65e5\\u76db-\\u96d9\\u548c\",\n        \"phone\": \"02-29206868\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43782999882556,\n          23.46793000485439\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1167\",\n        \"name\": \"\\u65e5\\u76db-\\u5609\\u7fa9\",\n        \"phone\": \"05-2860777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29160481593269,\n          22.631515517996363\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1168\",\n        \"name\": \"\\u65e5\\u76db-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2816888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52582340111636,\n          25.092753962167233\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1169\",\n        \"name\": \"\\u65e5\\u76db-\\u58eb\\u6797\",\n        \"phone\": \"02-28831515\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56731982932799,\n          24.98833379889497\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116A\",\n        \"name\": \"\\u65e5\\u76db-\\u6728\\u67f5\",\n        \"phone\": \"02-22342616\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.2251226719558,\n          24.957608037965695\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116B\",\n        \"name\": \"\\u65e5\\u76db-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4273888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.29970803171479,\n          24.95993352049299\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116C\",\n        \"name\": \"\\u65e5\\u76db-\\u516b\\u5fb7\",\n        \"phone\": \"03-3622888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49804393990259,\n          25.062408436133325\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116E\",\n        \"name\": \"\\u65e5\\u76db-\\u4e09\\u91cd\",\n        \"phone\": \"02-29845858\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5707048949148,\n          23.957347491571056\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116F\",\n        \"name\": \"\\u65e5\\u76db-\\u54e1\\u6797\",\n        \"phone\": \"04-8326118\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54063427936396,\n          24.991821165066195\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116G\",\n        \"name\": \"\\u65e5\\u76db-\\u666f\\u7f8e\",\n        \"phone\": \"02-9353966\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.97270020694022,\n          24.804291620951954\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116H\",\n        \"name\": \"\\u65e5\\u76db-\\u65b0\\u7af9\",\n        \"phone\": \"03-5227868\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52944637920923,\n          25.051881061427295\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116I\",\n        \"name\": \"\\u65e5\\u76db-\\u5357\\u4eac\",\n        \"phone\": \"02-25215678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47906797537641,\n          25.019361137984383\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116J\",\n        \"name\": \"\\u65e5\\u76db-\\u677f\\u6a4b\\u4e2d\\u5c71\",\n        \"phone\": \"02-29559000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.60888846070146,\n          23.977371477505788\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116K\",\n        \"name\": \"\\u65e5\\u76db-\\u82b1\\u84ee\",\n        \"phone\": \"038-346888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.64954856076642,\n          24.15305289496997\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116L\",\n        \"name\": \"\\u65e5\\u76db-\\u5927\\u58a9\",\n        \"phone\": \"04-23288898\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.48957035317076,\n          22.675317402185232\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116M\",\n        \"name\": \"\\u65e5\\u76db-\\u5c4f\\u6771\",\n        \"phone\": \"08-7663888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.2337621228569,\n          22.998759871949794\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116N\",\n        \"name\": \"\\u65e5\\u76db-\\u6c38\\u5eb7\",\n        \"phone\": \"06-3113888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55725922914377,\n          25.028875092781018\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116P\",\n        \"name\": \"\\u65e5\\u76db-\\u4fe1\\u7fa9\",\n        \"phone\": \"02-27390369\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.36746868801708,\n          23.89997613328988\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116Q\",\n        \"name\": \"\\u65e5\\u76db-\\u4e8c\\u6797\",\n        \"phone\": \"04-8951808\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.4460097674286,\n          25.034632171027447\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116S\",\n        \"name\": \"\\u65e5\\u76db-\\u65b0\\u838a\",\n        \"phone\": \"02-22019789\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.2022110994658,\n          24.96883782461372\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116U\",\n        \"name\": \"\\u65e5\\u76db-\\u6843\\u5712\",\n        \"phone\": \"03-3553188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54105159248628,\n          23.70872990093559\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116V\",\n        \"name\": \"\\u65e5\\u76db-\\u6597\\u516d\",\n        \"phone\": \"05-5351010\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3623775474523,\n          22.625268942966677\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116W\",\n        \"name\": \"\\u65e5\\u76db-\\u9cf3\\u5c71\",\n        \"phone\": \"07-7462488\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.75337274685407,\n          24.761014320229368\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116X\",\n        \"name\": \"\\u65e5\\u76db-\\u5b9c\\u862d\",\n        \"phone\": \"039-313588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5001116224282,\n          25.001599923068472\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116Z\",\n        \"name\": \"\\u65e5\\u76db-\\u4e2d\\u548c\",\n        \"phone\": \"02-22493366\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.99475736353257,\n          24.801203341946138\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116b\",\n        \"name\": \"\\u65e5\\u76db-\\u5712\\u5340\",\n        \"phone\": \"03-5717666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.71972816217485,\n          24.253464932865967\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116c\",\n        \"name\": \"\\u65e5\\u76db-\\u8c50\\u539f\",\n        \"phone\": \"(04)25229688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.37227801178788,\n          24.935912457393407\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116d\",\n        \"name\": \"\\u65e5\\u76db-\\u4e09\\u5cfd\",\n        \"phone\": \"02-26745568\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.01920664134106,\n          24.83387110944215\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116e\",\n        \"name\": \"\\u65e5\\u76db-\\u7af9\\u5317\",\n        \"phone\": \"03-5585988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54422854381538,\n          25.05047535925724\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116f\",\n        \"name\": \"\\u65e5\\u76db-\\u5fa9\\u8208\",\n        \"phone\": \"02-87718888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.21607720943548,\n          24.87067940488312\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116g\",\n        \"name\": \"\\u65e5\\u76db-\\u9f8d\\u6f6d\",\n        \"phone\": \"03-4802000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.42308778712945,\n          24.991153315140735\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116i\",\n        \"name\": \"\\u65e5\\u76db-\\u6a39\\u6797\",\n        \"phone\": \"02-26869968\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.9074091385529,\n          24.685669888167702\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116j\",\n        \"name\": \"\\u65e5\\u76db-\\u982d\\u4efd\",\n        \"phone\": \"037-663888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29503071447735,\n          22.6681474940093\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116k\",\n        \"name\": \"\\u65e5\\u76db-\\u5317\\u9ad8\\u96c4\",\n        \"phone\": \"07-5501768\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.49992112043795,\n          24.11062777812132\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116m\",\n        \"name\": \"\\u65e5\\u76db-\\u548c\\u7f8e\",\n        \"phone\": \"04-7565988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47125800045569,\n          25.027392998861323\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116r\",\n        \"name\": \"\\u65e5\\u76db-\\u6587\\u5316\",\n        \"phone\": \"02-22569999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.44161556510949,\n          24.974302992121746\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116s\",\n        \"name\": \"\\u65e5\\u76db-\\u571f\\u57ce\",\n        \"phone\": \"02-82613366\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53342667008538,\n          25.052281416537795\n        ]\n      },\n      \"properties\": {\n        \"id\": \"116x\",\n        \"name\": \"\\u65e5\\u76db-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"25615888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30649233569413,\n          22.63455164010488\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1232\",\n        \"name\": \"\\u5f70\\u9280-\\u4e03\\u8ce2\",\n        \"phone\": \"07-2355658\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.66208752306628,\n          24.121981890403184\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1233\",\n        \"name\": \"\\u5f70\\u9280-\\u53f0\\u4e2d\",\n        \"phone\": \"04-22660011\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56476131199557,\n          25.05958175606323\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1261\",\n        \"name\": \"\\u5b8f\\u9060-\\u6c11\\u751f\",\n        \"phone\": \"02-27657933\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.20264341500024,\n          24.967683409334388\n        ]\n      },\n      \"properties\": {\n        \"id\": \"1262\",\n        \"name\": \"\\u5b8f\\u9060-\\u6843\\u5712\",\n        \"phone\": \"03-3463456\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20273029005736,\n          22.99233203740094\n        ]\n      },\n      \"properties\": {\n        \"id\": \"126D\",\n        \"name\": \"\\u5b8f\\u9060-\\u53f0\\u5357\",\n        \"phone\": \"06-2236677\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.48291408703106,\n          25.00131097700671\n        ]\n      },\n      \"properties\": {\n        \"id\": \"126H\",\n        \"name\": \"\\u5b8f\\u9060-\\u4e2d\\u548c\",\n        \"phone\": \"02-32346738\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.64630481795642,\n          24.15414050969535\n        ]\n      },\n      \"properties\": {\n        \"id\": \"126L\",\n        \"name\": \"\\u5b8f\\u9060-\\u53f0\\u4e2d\",\n        \"phone\": \"04-2255-6687\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31371491262017,\n          22.630301980875437\n        ]\n      },\n      \"properties\": {\n        \"id\": \"126Q\",\n        \"name\": \"\\u5b8f\\u9060-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2299788\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51136020869055,\n          25.04467234443559\n        ]\n      },\n      \"properties\": {\n        \"id\": \"126U\",\n        \"name\": \"\\u5b8f\\u9060-\\u9928\\u524d\",\n        \"phone\": \"02-23121122\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30845491756992,\n          23.03593096673082\n        ]\n      },\n      \"properties\": {\n        \"id\": \"126X\",\n        \"name\": \"\\u5b8f\\u9060-\\u65b0\\u5316\",\n        \"phone\": \"03-5102233\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45108742668148,\n          24.995064535148288\n        ]\n      },\n      \"properties\": {\n        \"id\": \"2181\",\n        \"name\": \"\\u4e9e\\u6771-\\u677f\\u6a4b\",\n        \"phone\": \"02-89665558\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.01286162348,\n          24.7852175964651\n        ]\n      },\n      \"properties\": {\n        \"id\": \"2184\",\n        \"name\": \"\\u4e9e\\u6771-\\u65b0\\u7af9\",\n        \"phone\": \"03-5641818\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.22162554325557,\n          22.985519366879632\n        ]\n      },\n      \"properties\": {\n        \"id\": \"2185\",\n        \"name\": \"\\u4e9e\\u6771-\\u53f0\\u5357\",\n        \"phone\": \"06-2358999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30512137628241,\n          22.61333762243996\n        ]\n      },\n      \"properties\": {\n        \"id\": \"2186\",\n        \"name\": \"\\u4e9e\\u6771-\\u9ad8\\u96c4\",\n        \"phone\": \"07-5369888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68375742175336,\n          24.141871905883995\n        ]\n      },\n      \"properties\": {\n        \"id\": \"2187\",\n        \"name\": \"\\u4e9e\\u6771-\\u53f0\\u4e2d\",\n        \"phone\": \"04-22218600\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51309587724606,\n          25.043075555632672\n        ]\n      },\n      \"properties\": {\n        \"id\": \"218A\",\n        \"name\": \"\\u4e9e\\u6771-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"23618600\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20402113257764,\n          23.00375477914528\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5058\",\n        \"name\": \"\\u5927\\u5c55-\\u53f0\\u5357\",\n        \"phone\": \"06-2208866\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52367473697689,\n          25.049246066329747\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5112\",\n        \"name\": \"\\u5bcc\\u9686-\\u9577\\u5b89\",\n        \"phone\": \"02-25631168\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47547887366542,\n          25.081490869215976\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5261\",\n        \"name\": \"\\u5927\\u6176-\\u8606\\u6d32\",\n        \"phone\": \"02-22897766\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.14713887966792,\n          24.907989183750434\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5262\",\n        \"name\": \"\\u5927\\u6176-\\u694a\\u6885\",\n        \"phone\": \"03-4759977\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.43273544806505,\n          25.06140485790723\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5263\",\n        \"name\": \"\\u5927\\u6176-\\u6cf0\\u5c71\",\n        \"phone\": \"02-22966688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29995803297672,\n          22.6180418487384\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5264\",\n        \"name\": \"\\u5927\\u6176-\\u9ad8\\u96c4\",\n        \"phone\": \"07-3312288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.82395733068195,\n          24.565902960893695\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5265\",\n        \"name\": \"\\u5927\\u6176-\\u82d7\\u6817\",\n        \"phone\": \"037-262888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.20665210622606,\n          24.956619656393652\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5266\",\n        \"name\": \"\\u5927\\u6176-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4912588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.7452648092833,\n          25.131951261037777\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5267\",\n        \"name\": \"\\u5927\\u6176-\\u57fa\\u9686\",\n        \"phone\": \"02-24281122\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19654067148683,\n          23.001448188353876\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5268\",\n        \"name\": \"\\u5927\\u6176-\\u53f0\\u5357\",\n        \"phone\": \"06-2232233\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68565611605638,\n          24.171121900936875\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5269\",\n        \"name\": \"\\u5927\\u6176-\\u53f0\\u4e2d\",\n        \"phone\": \"04-22375888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51192366259788,\n          24.990736483988634\n        ]\n      },\n      \"properties\": {\n        \"id\": \"526A\",\n        \"name\": \"\\u5927\\u6176-\\u4e2d\\u548c\",\n        \"phone\": \"02-89411188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49748640397175,\n          25.067048077165925\n        ]\n      },\n      \"properties\": {\n        \"id\": \"526K\",\n        \"name\": \"\\u5927\\u6176-\\u5bcc\\u9806\",\n        \"phone\": \"02-29818889\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46148067540592,\n          25.084623639808186\n        ]\n      },\n      \"properties\": {\n        \"id\": \"526L\",\n        \"name\": \"\\u5927\\u6176-\\u9577\\u69ae\",\n        \"phone\": \"02-82828289\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.21744862230926,\n          24.859226111192125\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5321\",\n        \"name\": \"\\u9ad8\\u6a4b-\\u9f8d\\u6f6d\",\n        \"phone\": \"03-4807889\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.2229708455698,\n          24.957053320201805\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5322\",\n        \"name\": \"\\u9ad8\\u6a4b-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4270889\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.25635682087655,\n          24.973402789288105\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5323\",\n        \"name\": \"\\u9ad8\\u6a4b-\\u5167\\u58e2\",\n        \"phone\": \"03-4351010\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.57982188951588,\n          23.96310714236305\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5381\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u54e1\\u6797\",\n        \"phone\": \"04-8339000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.66367629618756,\n          24.146974902856645\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5382\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u53f0\\u4e2d\",\n        \"phone\": \"04-23103648\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.33264111605224,\n          22.628160096230733\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5383\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u9ad8\\u96c4\",\n        \"phone\": \"07-7262378\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.21105304066558,\n          22.98608682149472\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5384\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u53f0\\u5357\",\n        \"phone\": \"06-2148111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.3096701383553,\n          24.990159572682227\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5385\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u6843\\u5712\",\n        \"phone\": \"03-3382881\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5405651754382,\n          24.07991419788888\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5386\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u5f70\\u5316\",\n        \"phone\": \"(04)7203198\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          119.57033061946137,\n          23.571230163094583\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5387\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u6f8e\\u6e56\",\n        \"phone\": \"06-9278666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52296967520775,\n          25.05609341160331\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5389\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u4e2d\\u5c71\",\n        \"phone\": \"02-25671189\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.301049060845,\n          22.630861500141197\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538A\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u65b0\\u8208\",\n        \"phone\": \"07-2516101\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96768570251307,\n          24.80669268558839\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538B\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u65b0\\u7af9\",\n        \"phone\": \"03-5235211\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55767088468362,\n          25.048853140268008\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538C\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u5149\\u5fa9\",\n        \"phone\": \"02-25795811\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52945016705947,\n          25.043041080868733\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538D\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u5fe0\\u5b5d\",\n        \"phone\": \"02-23214955\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.67941007679012,\n          24.137141443315237\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538E\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u81ea\\u7531\",\n        \"phone\": \"04-22287111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51010124220501,\n          25.055779048032953\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538F\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u5927\\u7a3b\\u57d5\",\n        \"phone\": \"02-25582211\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.90821439331947,\n          24.68529131931432\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538I\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u982d\\u4efd\",\n        \"phone\": \"037-596611\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.45017000166573,\n          23.479750007340233\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538M\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u5609\\u7fa9\",\n        \"phone\": \"05-2788878\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.71529145466393,\n          24.247328236929214\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538N\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u8c50\\u539f\",\n        \"phone\": \"04-25239911\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.2615269366758,\n          22.854429619530332\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538P\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u8def\\u7af9\",\n        \"phone\": \"07-6970111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46630608881111,\n          25.020666819271213\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538W\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u83ef\\u6c5f\",\n        \"phone\": \"02-2258-3311\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.21754882154698,\n          24.958226632489062\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538Y\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u4e2d\\u58e2\",\n        \"phone\": \"034-922011\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52468602293277,\n          25.04876928202976\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538a\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-2563-6262\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55037249971772,\n          25.03916965220332\n        ]\n      },\n      \"properties\": {\n        \"id\": \"538j\",\n        \"name\": \"\\u7b2c\\u4e00\\u91d1-\\u5b89\\u548c\",\n        \"phone\": \"02-2741-3434\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.66606411995748,\n          24.182597372968758\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5602\",\n        \"name\": \"\\u6c38\\u8208-\\u6c34\\u6e73\",\n        \"phone\": \"04-22973456\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68766386917704,\n          24.156206984358093\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5603\",\n        \"name\": \"\\u6c38\\u8208-\\u53f0\\u4e2d\",\n        \"phone\": \"04-22371188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6499740636171,\n          24.153990118017944\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5604\",\n        \"name\": \"\\u6c38\\u8208-\\u5927\\u58a9\",\n        \"phone\": \"04-23105858\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30843266758355,\n          22.630586336239986\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5851\",\n        \"name\": \"\\u7d71\\u4e00-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2268999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5491449680107,\n          25.03079052738642\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5852\",\n        \"name\": \"\\u7d71\\u4e00-\\u6566\\u5357\",\n        \"phone\": \"02-27552288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22611013017158,\n          24.95836005150879\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5853\",\n        \"name\": \"\\u7d71\\u4e00-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4224888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5113748248139,\n          25.0445453590945\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5854\",\n        \"name\": \"\\u7d71\\u4e00-\\u57ce\\u4e2d\",\n        \"phone\": \"02-23115757\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20803778898836,\n          22.99416965279709\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5855\",\n        \"name\": \"\\u7d71\\u4e00-\\u53f0\\u5357\",\n        \"phone\": \"06-2112288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.65602950177998,\n          24.139819802746224\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5856\",\n        \"name\": \"\\u7d71\\u4e00-\\u53f0\\u4e2d\",\n        \"phone\": \"04-23723333\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96284029055191,\n          24.80630694155966\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5857\",\n        \"name\": \"\\u7d71\\u4e00-\\u65b0\\u7af9\",\n        \"phone\": \"03-5225666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.4480299975134,\n          23.48380000163256\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5858\",\n        \"name\": \"\\u7d71\\u4e00-\\u5609\\u7fa9\",\n        \"phone\": \"05-2252111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.49094267229353,\n          22.677037090104193\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5859\",\n        \"name\": \"\\u7d71\\u4e00-\\u5c4f\\u6771\",\n        \"phone\": \"08-7353888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.7445297465677,\n          25.1278701320495\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585A\",\n        \"name\": \"\\u7d71\\u4e00-\\u57fa\\u9686\",\n        \"phone\": \"02-24225288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5141227069662,\n          25.007710804274666\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585B\",\n        \"name\": \"\\u7d71\\u4e00-\\u6c38\\u548c\",\n        \"phone\": \"02-22319966\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.64728349472716,\n          24.159600946745172\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585D\",\n        \"name\": \"\\u7d71\\u4e00-\\u65b0\\u53f0\\u4e2d\",\n        \"phone\": \"04-22587222\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.318693397859,\n          23.305070418254225\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585E\",\n        \"name\": \"\\u7d71\\u4e00-\\u65b0\\u71df\",\n        \"phone\": \"06-6356388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54221552012775,\n          24.074378410532198\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585F\",\n        \"name\": \"\\u7d71\\u4e00-\\u5f70\\u5316\",\n        \"phone\": \"04-7225161\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31114203803266,\n          24.99250801518787\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585H\",\n        \"name\": \"\\u7d71\\u4e00-\\u6843\\u5712\",\n        \"phone\": \"03-3386677\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.57260691933438,\n          23.96279503143313\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585I\",\n        \"name\": \"\\u7d71\\u4e00-\\u54e1\\u6797\",\n        \"phone\": \"04-8336288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.48875779593065,\n          25.05775427791121\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585J\",\n        \"name\": \"\\u7d71\\u4e00-\\u4e09\\u91cd\",\n        \"phone\": \"02-29779933\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.71732082168771,\n          24.253133197172986\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585L\",\n        \"name\": \"\\u7d71\\u4e00-\\u8c50\\u539f\",\n        \"phone\": \"04-25282211\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52362679934251,\n          25.082777458086326\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585M\",\n        \"name\": \"\\u7d71\\u4e00-\\u58eb\\u6797\",\n        \"phone\": \"02-28866677\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.458462760798,\n          25.00823629928768\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585P\",\n        \"name\": \"\\u7d71\\u4e00-\\u677f\\u6a4b\",\n        \"phone\": \"02-29692299\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30132785104318,\n          22.616088094991387\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585Q\",\n        \"name\": \"\\u7d71\\u4e00-\\u4e09\\u591a\",\n        \"phone\": \"07-3368568\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.63243481202731,\n          25.06524023578044\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585R\",\n        \"name\": \"\\u7d71\\u4e00-\\u6c50\\u6b62\",\n        \"phone\": \"02-26935558\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.74549234144074,\n          24.751012675774025\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585S\",\n        \"name\": \"\\u7d71\\u4e00-\\u5b9c\\u862d\",\n        \"phone\": \"03-9353660\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5445807397667,\n          25.051642163653675\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585U\",\n        \"name\": \"\\u7d71\\u4e00-\\u5357\\u4eac\",\n        \"phone\": \"02-27317777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5214353103667,\n          25.026656369565988\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585V\",\n        \"name\": \"\\u7d71\\u4e00-\\u53e4\\u4ead\",\n        \"phone\": \"02-23635678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          118.3178484150609,\n          24.436729782995897\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585W\",\n        \"name\": \"\\u7d71\\u4e00-\\u91d1\\u9580\",\n        \"phone\": \"082-320811\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45205345665632,\n          24.986093726534595\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585Y\",\n        \"name\": \"\\u7d71\\u4e00-\\u571f\\u57ce\",\n        \"phone\": \"02-82602000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5333538005133,\n          25.053576447295633\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585Z\",\n        \"name\": \"\\u7d71\\u4e00-\\u677e\\u6c5f\",\n        \"phone\": \"0225165988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.57265476937738,\n          25.081169476091787\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585b\",\n        \"name\": \"\\u7d71\\u4e00-\\u5167\\u6e56\",\n        \"phone\": \"(02)87525959\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55042434806596,\n          25.039129835969167\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585c\",\n        \"name\": \"\\u7d71\\u4e00-\\u4ec1\\u611b\",\n        \"phone\": \"02-27726588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.21169611131496,\n          24.959125265424536\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585g\",\n        \"name\": \"\\u7d71\\u4e00-\\u5e73\\u93ae\",\n        \"phone\": \"03-4910736\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.30669017452284,\n          25.001877530767384\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585h\",\n        \"name\": \"\\u7d71\\u4e00-\\u65b0\\u6843\\u5712\",\n        \"phone\": \"03-3347111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.87380076447349,\n          24.683529993535753\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585m\",\n        \"name\": \"\\u7d71\\u4e00-\\u7af9\\u5357\",\n        \"phone\": \"037-480666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56518798473458,\n          25.050297600264386\n        ]\n      },\n      \"properties\": {\n        \"id\": \"585s\",\n        \"name\": \"\\u7d71\\u4e00-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"27478266\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.33514317288999,\n          22.609331825972085\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5861\",\n        \"name\": \"\\u76c8\\u6ea2-\\u7c6c\\u5b50\\u5167\",\n        \"phone\": \"07-7134001\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.32652373322583,\n          22.726228362884704\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5862\",\n        \"name\": \"\\u76c8\\u6ea2-\\u6960\\u6893\",\n        \"phone\": \"07-3537737\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29659653310074,\n          22.641895914334505\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5921\",\n        \"name\": \"\\u5143\\u5bcc-\\u9ad8\\u96c4\",\n        \"phone\": \"07-3122822\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54489063494309,\n          24.979764823886704\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5922\",\n        \"name\": \"\\u5143\\u5bcc-\\u65b0\\u5e97\",\n        \"phone\": \"02-29177888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49804393990259,\n          25.062408436133325\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5923\",\n        \"name\": \"\\u5143\\u5bcc-\\u4e09\\u91cd\",\n        \"phone\": \"02-29885568\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6580153257328,\n          24.139881058387353\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5925\",\n        \"name\": \"\\u5143\\u5bcc-\\u53f0\\u4e2d\",\n        \"phone\": \"04-23759979\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30041199188155,\n          22.616373105192018\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5926\",\n        \"name\": \"\\u5143\\u5bcc-\\u56db\\u7dad\",\n        \"phone\": \"07-3356677\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.39287604319703,\n          22.499896350454062\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5927\",\n        \"name\": \"\\u5143\\u5bcc-\\u6797\\u5712\",\n        \"phone\": \"07-6433779\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.44441754685428,\n          25.043003941830467\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5928\",\n        \"name\": \"\\u5143\\u5bcc-\\u65b0\\u838a\",\n        \"phone\": \"02-29962299\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20250082800038,\n          22.991245189453743\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5929\",\n        \"name\": \"\\u5143\\u5bcc-\\u53f0\\u5357\",\n        \"phone\": \"06-2219089\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30323287182748,\n          22.651226683701317\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592A\",\n        \"name\": \"\\u5143\\u5bcc-\\u7def\\u57ce\",\n        \"phone\": \"07-3131123\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5159269861439,\n          24.99727910076563\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592B\",\n        \"name\": \"\\u5143\\u5bcc-\\u6c38\\u548c\",\n        \"phone\": \"02-29491888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.53771296174024,\n          22.547081614763652\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592C\",\n        \"name\": \"\\u5143\\u5bcc-\\u6f6e\\u5dde\",\n        \"phone\": \"08-7884930\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.32755680817056,\n          22.63939848887237\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592D\",\n        \"name\": \"\\u5143\\u5bcc-\\u5927\\u660c\",\n        \"phone\": \"07-3851168\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51706465414371,\n          25.050152610866082\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592E\",\n        \"name\": \"\\u5143\\u5bcc-\\u57ce\\u4e2d\",\n        \"phone\": \"02-25563636\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.97050880990287,\n          24.802983770673727\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592G\",\n        \"name\": \"\\u5143\\u5bcc-\\u65b0\\u7af9\",\n        \"phone\": \"03-5258282\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52768081447768,\n          25.03422114617172\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592H\",\n        \"name\": \"\\u5143\\u5bcc-\\u4fe1\\u7fa9\",\n        \"phone\": \"02-23587778\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.45191992247587,\n          23.474359997368175\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592I\",\n        \"name\": \"\\u5143\\u5bcc-\\u5609\\u7fa9\",\n        \"phone\": \"05-2257789\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22659843531933,\n          24.961207584548774\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592L\",\n        \"name\": \"\\u5143\\u5bcc-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4263888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.53790046452411,\n          24.08888542968815\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592M\",\n        \"name\": \"\\u5143\\u5bcc-\\u5f70\\u5316\",\n        \"phone\": \"04-7283456\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43691869369535,\n          23.709790869398873\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592N\",\n        \"name\": \"\\u5143\\u5bcc-\\u864e\\u5c3e\",\n        \"phone\": \"05-6360389\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29545131210409,\n          22.796245360775856\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592P\",\n        \"name\": \"\\u5143\\u5bcc-\\u540c\\u5927\",\n        \"phone\": \"07-6225788\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55276426992285,\n          25.041229969741064\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592Q\",\n        \"name\": \"\\u5143\\u5bcc-\\u6566\\u5357\",\n        \"phone\": \"02-87723988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.74425066265421,\n          25.12916785351181\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592S\",\n        \"name\": \"\\u5143\\u5bcc-\\u57fa\\u9686\",\n        \"phone\": \"02-24288899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.75570369951343,\n          24.75911660635974\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592U\",\n        \"name\": \"\\u5143\\u5bcc-\\u5b9c\\u862d\",\n        \"phone\": \"03-9369688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52184900863465,\n          25.06298120166009\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592V\",\n        \"name\": \"\\u5143\\u5bcc-\\u6c11\\u6b0a\",\n        \"phone\": \"02-25926188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50403139787177,\n          25.11766062464127\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592W\",\n        \"name\": \"\\u5143\\u5bcc-\\u5409\\u5229\",\n        \"phone\": \"02-28229090\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68511422210337,\n          23.97915411925385\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592X\",\n        \"name\": \"\\u5143\\u5bcc-\\u8349\\u5c6f\",\n        \"phone\": \"049-2355888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96425662378368,\n          23.966471243905307\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592Y\",\n        \"name\": \"\\u5143\\u5bcc-\\u57d4\\u91cc\",\n        \"phone\": \"049-2900999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.18515659326195,\n          23.04704155154525\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592Z\",\n        \"name\": \"\\u5143\\u5bcc-\\u5b89\\u5357\",\n        \"phone\": \"06-2453088\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.57730018498874,\n          25.039411243121716\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592a\",\n        \"name\": \"\\u5143\\u5bcc-\\u677e\\u5fb7\",\n        \"phone\": \"02-27202828\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46362791292195,\n          25.011230472201422\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592b\",\n        \"name\": \"\\u5143\\u5bcc-\\u677f\\u6a4b\",\n        \"phone\": \"02-89536888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.82940500423508,\n          24.25835255145808\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592c\",\n        \"name\": \"\\u5143\\u5bcc-\\u70cf\\u65e5\",\n        \"phone\": \"04-23362288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52377471739418,\n          25.049447283756848\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592d\",\n        \"name\": \"\\u5143\\u5bcc-\\u5ef6\\u5e73\",\n        \"phone\": \"02-25633399\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52518259487991,\n          25.023067089710995\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592e\",\n        \"name\": \"\\u5143\\u5bcc-\\u53e4\\u4ead\",\n        \"phone\": \"02-83695288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54918332508203,\n          25.028809056490203\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592f\",\n        \"name\": \"\\u5143\\u5bcc-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-23255818\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.70512925856757,\n          24.210649134356977\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592g\",\n        \"name\": \"\\u5143\\u5bcc-\\u4e2d\\u539f\",\n        \"phone\": \"04-25326677\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5764453666912,\n          24.27085713302822\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592i\",\n        \"name\": \"\\u5143\\u5bcc-\\u4e2d\\u6e2f\",\n        \"phone\": \"04-26222299\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68359789181359,\n          24.123552375178626\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592l\",\n        \"name\": \"\\u5143\\u5bcc-\\u5927\\u88d5\",\n        \"phone\": \"04-22862688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19622813533071,\n          23.00126807718617\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592m\",\n        \"name\": \"\\u5143\\u5bcc-\\u6210\\u529f\",\n        \"phone\": \"06-2232323\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5621392827883,\n          25.051249042141304\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592n\",\n        \"name\": \"\\u5143\\u5bcc-\\u897f\\u677e\",\n        \"phone\": \"02-27562288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30946136100962,\n          22.633841960715735\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592o\",\n        \"name\": \"\\u5143\\u5bcc-\\u65b0\\u8208\",\n        \"phone\": \"07-238-5678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.48946906338843,\n          22.67502402819757\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592q\",\n        \"name\": \"\\u5143\\u5bcc-\\u5c4f\\u6771\",\n        \"phone\": \"08-7339522\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53372924185965,\n          25.052227659874184\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592r\",\n        \"name\": \"\\u5143\\u5bcc-\\u57ce\\u6771\",\n        \"phone\": \"02-2509-9928\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.560614272243,\n          25.032831394583\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592u\",\n        \"name\": \"\\u5143\\u5bcc-\\u4e16\\u8cbf\",\n        \"phone\": \"02-8780-1800\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31377235397191,\n          24.993299059018685\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592v\",\n        \"name\": \"\\u5143\\u5bcc-\\u6843\\u5712\",\n        \"phone\": \"03-3366000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.17789962640872,\n          23.162333499195682\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592w\",\n        \"name\": \"\\u5143\\u5bcc-\\u4f73\\u91cc\",\n        \"phone\": \"06-7232323\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.60855774104839,\n          23.980962687612802\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592y\",\n        \"name\": \"\\u5143\\u5bcc-\\u82b1\\u84ee\",\n        \"phone\": \"038-360988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.64858793682005,\n          24.161800336910584\n        ]\n      },\n      \"properties\": {\n        \"id\": \"592z\",\n        \"name\": \"\\u5143\\u5bcc-\\u6587\\u5fc3\",\n        \"phone\": \"04-2252-1010\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.9697332593408,\n          23.972951168878808\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5961\",\n        \"name\": \"\\u65e5\\u8302-\\u57d4\\u91cc\",\n        \"phone\": \"049-2902266\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68988481133744,\n          23.904333274183937\n        ]\n      },\n      \"properties\": {\n        \"id\": \"5962\",\n        \"name\": \"\\u65e5\\u8302-\\u5357\\u6295\",\n        \"phone\": \"049-2234188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54427997732583,\n          25.05284928794247\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6012\",\n        \"name\": \"\\u7287\\u4e9e-\\u7db2\\u8def\",\n        \"phone\": \"02-27188788\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54427997732583,\n          25.05284928794247\n        ]\n      },\n      \"properties\": {\n        \"id\": \"601d\",\n        \"name\": \"\\u7287\\u4e9e-\\u946b\\u8c50\",\n        \"phone\": \"2553-8000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.57224147519605,\n          23.958870715562373\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6114\",\n        \"name\": \"\\u53f0\\u4e2d\\u9280-\\u54e1\\u6797\",\n        \"phone\": \"04-8329000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52672651320907,\n          25.044200325643104\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6115\",\n        \"name\": \"\\u53f0\\u4e2d\\u9280-\\u53f0\\u5317\",\n        \"phone\": \"02-27736955\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22349127762543,\n          24.9596912673925\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6116\",\n        \"name\": \"\\u53f0\\u4e2d\\u9280-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4251366\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.71762130435985,\n          24.251778471274513\n        ]\n      },\n      \"properties\": {\n        \"id\": \"611A\",\n        \"name\": \"\\u53f0\\u4e2d\\u9280-\\u8c50\\u539f\",\n        \"phone\": \"04-25274150\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.48653409092897,\n          25.058489804338667\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6161\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17-\\u4e09\\u91cd\",\n        \"phone\": \"02-89822558\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.518143901973,\n          25.045820830940887\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6162\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17-\\u5fe0\\u5b5d\",\n        \"phone\": \"02-23141122\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.23267477345988,\n          23.010051164550713\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6163\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17-\\u6c38\\u5eb7\",\n        \"phone\": \"06-2338233\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.69341807795026,\n          24.171561129488683\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6164\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17-\\u6587\\u5fc3\",\n        \"phone\": \"04-22468800\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.97839373585595,\n          24.808753319963362\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6165\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17-\\u65b0\\u7af9\",\n        \"phone\": \"03-5153100\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53291623074024,\n          25.05817542340487\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6167\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17-\\u677e\\u6c5f\",\n        \"phone\": \"02-2581-5688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44602999905491,\n          23.479710004329007\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6168\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17-\\u5609\\u7fa9\",\n        \"phone\": \"05-2286699\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22562001118777,\n          24.955591426543446\n        ]\n      },\n      \"properties\": {\n        \"id\": \"616A\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4229666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29524517582577,\n          22.62944534371887\n        ]\n      },\n      \"properties\": {\n        \"id\": \"616K\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2151166\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.61617924984901,\n          25.0589172348979\n        ]\n      },\n      \"properties\": {\n        \"id\": \"616X\",\n        \"name\": \"\\u4e2d\\u570b\\u4fe1\\u8a17-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-87891075\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.48102518564805,\n          23.962144712489064\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6381\",\n        \"name\": \"\\u5149\\u548c-\\u6eaa\\u6e56\",\n        \"phone\": \"04-8855466\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.58649943775725,\n          23.859545894548138\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6382\",\n        \"name\": \"\\u5149\\u548c-\\u7530\\u4e2d\",\n        \"phone\": \"04-8746588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.50055588592154,\n          24.109845847192513\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6383\",\n        \"name\": \"\\u5149\\u548c-\\u548c\\u7f8e\",\n        \"phone\": \"04-7567789\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.53743501734364,\n          24.026014813874514\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6385\",\n        \"name\": \"\\u5149\\u548c-\\u82b1\\u58c7\",\n        \"phone\": \"04-7878288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43431219554525,\n          23.71195000626339\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6386\",\n        \"name\": \"\\u5149\\u548c-\\u864e\\u5c3e\",\n        \"phone\": \"05-6366606\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.24478447502852,\n          23.46550724149527\n        ]\n      },\n      \"properties\": {\n        \"id\": \"638A\",\n        \"name\": \"\\u5149\\u548c-\\u5609\\u7fa9\",\n        \"phone\": \"05-3700988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.29024968219726,\n          25.044547832062065\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6451\",\n        \"name\": \"\\u6c38\\u5168-\\u5357\\u5d01\",\n        \"phone\": \"03-3529529\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.30097821836128,\n          24.966308041479497\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6452\",\n        \"name\": \"\\u6c38\\u5168-\\u516b\\u5fb7\",\n        \"phone\": \"03-3771155\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.42266600302548,\n          24.994424494440416\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6461\",\n        \"name\": \"\\u5927\\u660c-\\u6a39\\u6797\",\n        \"phone\": \"02-26756088\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51704476183637,\n          24.965246785613697\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6462\",\n        \"name\": \"\\u5927\\u660c-\\u5b89\\u5eb7\",\n        \"phone\": \"02-86669988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96830137317828,\n          24.80658844649912\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6463\",\n        \"name\": \"\\u5927\\u660c-\\u65b0\\u7af9\",\n        \"phone\": \"03-5222868\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54307783307529,\n          24.974149341421573\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6464\",\n        \"name\": \"\\u5927\\u660c-\\u65b0\\u5e97\",\n        \"phone\": \"02-29179111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.30631540665239,\n          25.015783040929783\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6465\",\n        \"name\": \"\\u5927\\u660c-\\u6843\\u5712\",\n        \"phone\": \"03-3263689\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.0112241075229,\n          24.82838426545032\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6489\",\n        \"name\": \"\\u798f\\u90a6-\\u65b0\\u7af9\",\n        \"phone\": \"(03)657-2758\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.67421135814217,\n          24.14780093700684\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6912\",\n        \"name\": \"\\u5fb7\\u4fe1-\\u4e2d\\u6b63\",\n        \"phone\": \"04-22026200\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31004782243852,\n          23.30025062788236\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6913\",\n        \"name\": \"\\u5fb7\\u4fe1-\\u65b0\\u71df\",\n        \"phone\": \"06-6337258\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.48653409092897,\n          25.058489804338667\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6914\",\n        \"name\": \"\\u5fb7\\u4fe1-\\u4e09\\u91cd\",\n        \"phone\": \"02-29718188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55544255681822,\n          25.033326294536327\n        ]\n      },\n      \"properties\": {\n        \"id\": \"6915\",\n        \"name\": \"\\u5fb7\\u4fe1-\\u548c\\u5e73\",\n        \"phone\": \"02-27066168\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44863000262052,\n          23.483660003616816\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7001\",\n        \"name\": \"\\u5146\\u8c50-\\u5609\\u7fa9\",\n        \"phone\": \"05-2230230\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.65602950177998,\n          24.139819802746224\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7003\",\n        \"name\": \"\\u5146\\u8c50-\\u53f0\\u4e2d\",\n        \"phone\": \"04-23780568\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.55876142541811,\n          24.23507881851443\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7005\",\n        \"name\": \"\\u5146\\u8c50-\\u53f0\\u4e2d\\u6e2f\",\n        \"phone\": \"04-26651100\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20282294141413,\n          22.991220352244525\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7006\",\n        \"name\": \"\\u5146\\u8c50-\\u53f0\\u5357\",\n        \"phone\": \"06-2230398\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.01810324418457,\n          24.83446989636906\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7007\",\n        \"name\": \"\\u5146\\u8c50-\\u7af9\\u5317\",\n        \"phone\": \"03-5543223\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49626518131451,\n          25.068208688513103\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7008\",\n        \"name\": \"\\u5146\\u8c50-\\u4e09\\u91cd\",\n        \"phone\": \"02-29817799\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54148433251433,\n          24.99304326364308\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7009\",\n        \"name\": \"\\u5146\\u8c50-\\u666f\\u7f8e\",\n        \"phone\": \"02-29307799\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.4671353979285,\n          25.020903092028107\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700B\",\n        \"name\": \"\\u5146\\u8c50-\\u677f\\u6a4b\",\n        \"phone\": \"02-22538699\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54185822382208,\n          23.711469651070505\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700C\",\n        \"name\": \"\\u5146\\u8c50-\\u4f86\\u798f\",\n        \"phone\": \"05-5338989\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.46102485524321,\n          23.79987277506219\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700D\",\n        \"name\": \"\\u5146\\u8c50-\\u897f\\u87ba\",\n        \"phone\": \"05-5867999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.47813203726781,\n          23.67648786737452\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700E\",\n        \"name\": \"\\u5146\\u8c50-\\u6597\\u5357\",\n        \"phone\": \"05-5968899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43272165827663,\n          23.709313224167115\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700F\",\n        \"name\": \"\\u5146\\u8c50-\\u864e\\u5c3e\",\n        \"phone\": \"05-6313388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.2514068608281,\n          23.183820419872205\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700G\",\n        \"name\": \"\\u5146\\u8c50-\\u9ebb\\u8c46\",\n        \"phone\": \"06-5728388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52725727205754,\n          25.03284008699618\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700H\",\n        \"name\": \"\\u5146\\u8c50-\\u6771\\u9580\",\n        \"phone\": \"02-23435488\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.2927626709086,\n          22.628061773337215\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700I\",\n        \"name\": \"\\u5146\\u8c50-\\u5317\\u9ad8\\u96c4\",\n        \"phone\": \"07-2612345\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.66416695363438,\n          24.153887765496673\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700J\",\n        \"name\": \"\\u5146\\u8c50-\\u516c\\u76ca\",\n        \"phone\": \"04-23259966\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31886080985575,\n          23.305447062274474\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700K\",\n        \"name\": \"\\u5146\\u8c50-\\u65b0\\u71df\",\n        \"phone\": \"06-6357111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52500393091108,\n          25.105764576725797\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700L\",\n        \"name\": \"\\u5146\\u8c50-\\u5929\\u6bcd\",\n        \"phone\": \"02-28376006\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31386087778516,\n          24.993050052275894\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700M\",\n        \"name\": \"\\u5146\\u8c50-\\u6843\\u5712\",\n        \"phone\": \"033475188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47906908932586,\n          25.018974169601893\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700N\",\n        \"name\": \"\\u5146\\u8c50-\\u57d4\\u5898\",\n        \"phone\": \"02-89538888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53838936499712,\n          25.052168806885454\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700P\",\n        \"name\": \"\\u5146\\u8c50-\\u5357\\u4eac\",\n        \"phone\": \"02-25169888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.35663738406656,\n          22.5670365332859\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700R\",\n        \"name\": \"\\u5146\\u8c50-\\u5c0f\\u6e2f\",\n        \"phone\": \"07-8063000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51291235673688,\n          25.056895718821124\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700S\",\n        \"name\": \"\\u5146\\u8c50-\\u5927\\u540c\",\n        \"phone\": \"02-25506078\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.3195445883964,\n          24.981329774899802\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700U\",\n        \"name\": \"\\u5146\\u8c50-\\u6843\\u9daf\",\n        \"phone\": \"03-3776899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.9673082706535,\n          24.808101880081118\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700V\",\n        \"name\": \"\\u5146\\u8c50-\\u65b0\\u7af9\",\n        \"phone\": \"03-5256199\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51313466224889,\n          25.046858563293043\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700W\",\n        \"name\": \"\\u5146\\u8c50-\\u57ce\\u4e2d\",\n        \"phone\": \"02-23315199\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51488449207005,\n          25.01206120155432\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700X\",\n        \"name\": \"\\u5146\\u8c50-\\u6c38\\u548c\",\n        \"phone\": \"02-2927-3799\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30199103660321,\n          22.61169290424269\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700Z\",\n        \"name\": \"\\u5146\\u8c50-\\u9ad8\\u96c4\",\n        \"phone\": \"07-3315200\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56401916764547,\n          25.041454803163717\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700a\",\n        \"name\": \"\\u5146\\u8c50-\\u5fe0\\u5b5d\",\n        \"phone\": \"02-27479966\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22482517808481,\n          24.95597498069337\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700b\",\n        \"name\": \"\\u5146\\u8c50-\\u4e2d\\u58e2\",\n        \"phone\": \"03-2807759\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54599656069931,\n          25.05752194670108\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700c\",\n        \"name\": \"\\u5146\\u8c50-\\u6c11\\u751f\",\n        \"phone\": \"02-27169966\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54018929392772,\n          24.080244984992184\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700d\",\n        \"name\": \"\\u5146\\u8c50-\\u5f70\\u5316\",\n        \"phone\": \"04-7289966\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43781865302104,\n          24.04978775399383\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700f\",\n        \"name\": \"\\u5146\\u8c50-\\u9e7f\\u6e2f\",\n        \"phone\": \"04-7772900\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52133799907199,\n          25.028901369220723\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700g\",\n        \"name\": \"\\u5146\\u8c50-\\u5357\\u9580\",\n        \"phone\": \"02-23959966\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.32738874138066,\n          22.6403480578452\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700h\",\n        \"name\": \"\\u5146\\u8c50-\\u4e09\\u6c11\",\n        \"phone\": \"07-3958858\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.57881976097696,\n          25.04115112795631\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700i\",\n        \"name\": \"\\u5146\\u8c50-\\u677e\\u5fb7\",\n        \"phone\": \"02-27275168\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54248917089005,\n          25.033164961865154\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700j\",\n        \"name\": \"\\u5146\\u8c50-\\u5927\\u5b89\",\n        \"phone\": \"02-27003236\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5707048949148,\n          23.957347491571056\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700k\",\n        \"name\": \"\\u5146\\u8c50-\\u54e1\\u6797\",\n        \"phone\": \"04-8373898\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53098268243339,\n          25.043042093948422\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700m\",\n        \"name\": \"\\u5146\\u8c50-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-23278988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54427997732583,\n          25.05284928794247\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700p\",\n        \"name\": \"\\u5146\\u8c50-\\u5fa9\\u8208\",\n        \"phone\": \"02-25148588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.59330144601653,\n          25.083048642448958\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700q\",\n        \"name\": \"\\u5146\\u8c50-\\u5167\\u6e56\",\n        \"phone\": \"02-27946088\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.62380564198072,\n          24.179341562932603\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700r\",\n        \"name\": \"\\u5146\\u8c50-\\u5bf6\\u6210\",\n        \"phone\": \"(04)24651001\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29924152677988,\n          22.79389014621156\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700s\",\n        \"name\": \"\\u5146\\u8c50-\\u5ca1\\u5c71\",\n        \"phone\": \"07-6235988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45959732952268,\n          25.05310083633913\n        ]\n      },\n      \"properties\": {\n        \"id\": \"700w\",\n        \"name\": \"\\u5146\\u8c50-\\u65b0\\u838a\",\n        \"phone\": \"02-89913777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54783170237387,\n          25.033089164464428\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7031\",\n        \"name\": \"\\u81f4\\u548c-\\u53f0\\u5317\",\n        \"phone\": \"02-7006666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.17503317026895,\n          23.159217193865654\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7032\",\n        \"name\": \"\\u81f4\\u548c-\\u4f73\\u91cc\",\n        \"phone\": \"06-7226666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20748712090527,\n          22.988865663697815\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7033\",\n        \"name\": \"\\u81f4\\u548c-\\u5e9c\\u524d\",\n        \"phone\": \"06-2135888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19158367324256,\n          22.979759528475316\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7034\",\n        \"name\": \"\\u81f4\\u548c-\\u91d1\\u83ef\",\n        \"phone\": \"06-2619777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53053748121414,\n          25.033845482256062\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7035\",\n        \"name\": \"\\u81f4\\u548c-\\u6771\\u9580\",\n        \"phone\": \"02-23516600\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31537135154954,\n          22.625269792846776\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7036\",\n        \"name\": \"\\u81f4\\u548c-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2259255\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56374706530237,\n          25.051212713926915\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7038\",\n        \"name\": \"\\u81f4\\u548c-\\u5357\\u4eac\",\n        \"phone\": \"02-27485558\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.22470732358194,\n          22.97612845848132\n        ]\n      },\n      \"properties\": {\n        \"id\": \"703B\",\n        \"name\": \"\\u81f4\\u548c-\\u5d07\\u5fb7\",\n        \"phone\": \"06-2899000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.13981783310743,\n          22.764504101240743\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7791\",\n        \"name\": \"\\u570b\\u7968-\\u53f0\\u6771\",\n        \"phone\": \"089-321789\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49856954246648,\n          25.131038726484828\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7792\",\n        \"name\": \"\\u570b\\u7968-\\u5317\\u6295\",\n        \"phone\": \"02-28969268\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.60644409499218,\n          25.055027489790394\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7795\",\n        \"name\": \"\\u570b\\u7968-\\u5357\\u6e2f\",\n        \"phone\": \"02-26535757\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.2928471733345,\n          22.628089237897047\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7797\",\n        \"name\": \"\\u570b\\u7968-\\u4e2d\\u6b63\",\n        \"phone\": \"07-2166166\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.25826718621055,\n          24.973711236675197\n        ]\n      },\n      \"properties\": {\n        \"id\": \"7798\",\n        \"name\": \"\\u570b\\u7968-\\u5167\\u58e2\",\n        \"phone\": \"03-4618688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20538701514548,\n          22.998813941015683\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779D\",\n        \"name\": \"\\u570b\\u7968-\\u53f0\\u5357\",\n        \"phone\": \"06-2203979\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.29171271722683,\n          25.04763353137008\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779E\",\n        \"name\": \"\\u570b\\u7968-\\u5357\\u5d01\",\n        \"phone\": \"03-3115688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45211339409485,\n          25.03682602352376\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779G\",\n        \"name\": \"\\u570b\\u7968-\\u65b0\\u838a\",\n        \"phone\": \"02-29923888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44715000352896,\n          23.473830006808814\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779H\",\n        \"name\": \"\\u570b\\u7968-\\u5609\\u7fa9\",\n        \"phone\": \"05-2162888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30451615004793,\n          22.664408296772773\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779J\",\n        \"name\": \"\\u570b\\u7968-\\u5317\\u9ad8\\u96c4\",\n        \"phone\": \"07-5581777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.69420807281233,\n          24.165378624684532\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779P\",\n        \"name\": \"\\u570b\\u7968-\\u4e5d\\u9f0e\",\n        \"phone\": \"04-22321688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31901500775577,\n          22.667866491194346\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779V\",\n        \"name\": \"\\u570b\\u7968-\\u5929\\u7965\",\n        \"phone\": \"07-3477111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5295591603239,\n          24.079245170723514\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779W\",\n        \"name\": \"\\u570b\\u7968-\\u5f70\\u5316\",\n        \"phone\": \"04-7638888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51115952704313,\n          24.98885944747955\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779X\",\n        \"name\": \"\\u570b\\u7968-\\u4e2d\\u548c\",\n        \"phone\": \"02-29467777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55601739287718,\n          25.032908691391555\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779Z\",\n        \"name\": \"\\u570b\\u7968-\\u5b89\\u548c\",\n        \"phone\": \"02-27557999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56374706530237,\n          25.051212713926915\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779b\",\n        \"name\": \"\\u570b\\u7968-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"(02)25288988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54809096127657,\n          25.05156170475426\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779c\",\n        \"name\": \"\\u570b\\u7968-\\u6566\\u5317\\u6cd5\\u4eba\",\n        \"phone\": \"02-27760606\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29533190030398,\n          23.079672207725025\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779e\",\n        \"name\": \"\\u570b\\u7968-\\u5357\\u79d1\",\n        \"phone\": \"06-5890128\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3212836910708,\n          22.621230931524472\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779j\",\n        \"name\": \"\\u570b\\u7968-\\u548c\\u5e73\",\n        \"phone\": \"07-7711111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6698285,\n          24.1464193\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779m\",\n        \"name\": \"\\u570b\\u7968-\\u4e2d\\u6e2f\",\n        \"phone\": \"04-22069988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56374706530237,\n          25.051212713926915\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779n\",\n        \"name\": \"\\u570b\\u7968-\\u5357\\u4eac\",\n        \"phone\": \"(02)25287799\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31168124632619,\n          24.99349593747367\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779r\",\n        \"name\": \"\\u570b\\u7968-\\u6843\\u5712\",\n        \"phone\": \"(03)338-1123\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55575878823444,\n          25.037405545009545\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779u\",\n        \"name\": \"\\u570b\\u7968-\\u9577\\u57ce\",\n        \"phone\": \"(02)27008999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6463508053759,\n          24.15674542801355\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779v\",\n        \"name\": \"\\u570b\\u7968-\\u53f0\\u4e2d\",\n        \"phone\": \"(04)22553232\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51122610434808,\n          25.04588424998058\n        ]\n      },\n      \"properties\": {\n        \"id\": \"779z\",\n        \"name\": \"\\u570b\\u7968-\\u535a\\u611b\",\n        \"phone\": \"(02)23899988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53727417627874,\n          25.054129099486964\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8151\",\n        \"name\": \"\\u53f0\\u65b0-\\u5efa\\u5317\",\n        \"phone\": \"02-25160222\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.42589181238752,\n          25.023109784138132\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8152\",\n        \"name\": \"\\u53f0\\u65b0-\\u65b0\\u838a\",\n        \"phone\": \"02-22062828\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3334668505157,\n          22.642766604849278\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8156\",\n        \"name\": \"\\u53f0\\u65b0-\\u4e09\\u6c11\",\n        \"phone\": \"07-3871166\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29300404380312,\n          22.710641184151132\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8157\",\n        \"name\": \"\\u53f0\\u65b0-\\u5de6\\u6960\",\n        \"phone\": \"07-3643767\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5328136126953,\n          25.052326057870577\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8158\",\n        \"name\": \"\\u53f0\\u65b0-\\u677e\\u6c5f\",\n        \"phone\": \"02-25371188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20035604296905,\n          22.998691187040222\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8159\",\n        \"name\": \"\\u53f0\\u65b0-\\u53f0\\u5357\",\n        \"phone\": \"06-2218988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30512137628241,\n          22.61333762243996\n        ]\n      },\n      \"properties\": {\n        \"id\": \"815A\",\n        \"name\": \"\\u53f0\\u65b0-\\u9ad8\\u96c4\",\n        \"phone\": \"(07)537-5589\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6527816695229,\n          24.141155649443352\n        ]\n      },\n      \"properties\": {\n        \"id\": \"815B\",\n        \"name\": \"\\u53f0\\u65b0-\\u53f0\\u4e2d\",\n        \"phone\": \"(04)24755000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.49958841002872,\n          22.673407563421847\n        ]\n      },\n      \"properties\": {\n        \"id\": \"815H\",\n        \"name\": \"\\u53f0\\u65b0-\\u5c4f\\u6771\",\n        \"phone\": \"08-722-3377\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22476264020125,\n          24.95965748402164\n        ]\n      },\n      \"properties\": {\n        \"id\": \"815S\",\n        \"name\": \"\\u53f0\\u65b0-\\u4e2d\\u58e2\",\n        \"phone\": \"03-2805759\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31830343626855,\n          23.304950340662888\n        ]\n      },\n      \"properties\": {\n        \"id\": \"815Y\",\n        \"name\": \"\\u53f0\\u65b0-\\u65b0\\u71df\",\n        \"phone\": \"06-6356100\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53630180076671,\n          25.050356490639945\n        ]\n      },\n      \"properties\": {\n        \"id\": \"815Z\",\n        \"name\": \"\\u53f0\\u65b0-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-23268898\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.39823486215305,\n          22.60329657368387\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8381\",\n        \"name\": \"\\u5b89\\u6cf0-\\u5927\\u767c\",\n        \"phone\": \"07-7819121\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3331682728043,\n          22.729660802703506\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8382\",\n        \"name\": \"\\u5b89\\u6cf0-\\u6960\\u6893\",\n        \"phone\": \"07-3528866\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50985054871649,\n          25.053203175831698\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8451\",\n        \"name\": \"\\u5eb7\\u548c-\\u5ef6\\u5e73\",\n        \"phone\": \"02-25567222\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.67763184668469,\n          24.153715522989273\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8455\",\n        \"name\": \"\\u5eb7\\u548c-\\u53f0\\u4e2d\",\n        \"phone\": \"04-22015988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96118137251084,\n          24.80067681515442\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8456\",\n        \"name\": \"\\u5eb7\\u548c-\\u65b0\\u7af9\",\n        \"phone\": \"03-5255678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20172452674561,\n          22.994714358842963\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8458\",\n        \"name\": \"\\u5eb7\\u548c-\\u53f0\\u5357\",\n        \"phone\": \"06-2203371\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44364999928419,\n          23.46819000509086\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8459\",\n        \"name\": \"\\u5eb7\\u548c-\\u5609\\u7fa9\",\n        \"phone\": \"05-2851100\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.59055927548259,\n          25.08093323062439\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845A\",\n        \"name\": \"\\u5eb7\\u548c-\\u5167\\u6e56\",\n        \"phone\": \"02-27925858\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51775337262589,\n          24.999348534301767\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845B\",\n        \"name\": \"\\u5eb7\\u548c-\\u6c38\\u548c\",\n        \"phone\": \"2-86685858\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47906797537641,\n          25.019361137984383\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845D\",\n        \"name\": \"\\u5eb7\\u548c-\\u677f\\u6a4b\",\n        \"phone\": \"02-89611788\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          119.57224468809655,\n          23.570999376811006\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845E\",\n        \"name\": \"\\u5eb7\\u548c-\\u6f8e\\u6e56\",\n        \"phone\": \"06-9268858\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.547935691578,\n          25.03832728406291\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845F\",\n        \"name\": \"\\u5eb7\\u548c-\\u4ec1\\u611b\",\n        \"phone\": \"02-27511212\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30843266758355,\n          22.630586336239986\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845J\",\n        \"name\": \"\\u5eb7\\u548c-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2276688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51750208514189,\n          25.115098877624362\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845R\",\n        \"name\": \"\\u5eb7\\u548c-\\u77f3\\u724c\",\n        \"phone\": \"02-28253188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.29621217988168,\n          25.045382733307193\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845S\",\n        \"name\": \"\\u5eb7\\u548c-\\u5357\\u5d01\",\n        \"phone\": \"03-3119388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54429156630945,\n          25.053552449705762\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845U\",\n        \"name\": \"\\u5eb7\\u548c-\\u53f0\\u5317\",\n        \"phone\": \"02-27190123\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.48946906338843,\n          22.67502402819757\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845X\",\n        \"name\": \"\\u5eb7\\u548c-\\u5c4f\\u6771\",\n        \"phone\": \"08-7349999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56521045118325,\n          25.04281373711842\n        ]\n      },\n      \"properties\": {\n        \"id\": \"845Y\",\n        \"name\": \"\\u5eb7\\u548c-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-87871888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6700407397215,\n          24.149165343764878\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8561\",\n        \"name\": \"\\u65b0\\u5149-\\u53f0\\u4e2d\",\n        \"phone\": \"04-23029828\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29639556530071,\n          22.629170470281768\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8562\",\n        \"name\": \"\\u65b0\\u5149 - \\u9ad8\\u96c4\",\n        \"phone\": \"07-2692188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.0330283257699,\n          24.814022497983704\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8563\",\n        \"name\": \"\\u65b0\\u5149 - \\u65b0\\u7af9\",\n        \"phone\": \"03-6673228\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.22483253106199,\n          22.98433687315406\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8564\",\n        \"name\": \"\\u65b0\\u5149-\\u53f0\\u5357\",\n        \"phone\": \"06-2901288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.3136986028678,\n          24.992343207436345\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8565\",\n        \"name\": \"\\u65b0\\u5149-\\u6843\\u5712\",\n        \"phone\": \"03-3315888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31379598411905,\n          22.62909936662012\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8581\",\n        \"name\": \"\\u806f\\u90a6-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2262118\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.34791060294711,\n          23.556288310365893\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8582\",\n        \"name\": \"\\u806f\\u90a6-\\u5609\\u7fa9\",\n        \"phone\": \"05-2232121\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54925588062044,\n          25.041821543973978\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8583\",\n        \"name\": \"\\u806f\\u90a6-\\u6566\\u5316\",\n        \"phone\": \"02-27710999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51600312554646,\n          24.997620416712508\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8584\",\n        \"name\": \"\\u806f\\u90a6-\\u96d9\\u548c\",\n        \"phone\": \"02-29483668\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49526938522649,\n          25.061403247772095\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8585\",\n        \"name\": \"\\u806f\\u90a6-\\u4e09\\u91cd\",\n        \"phone\": \"02-29792299\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31210486232645,\n          25.013699643953977\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8586\",\n        \"name\": \"\\u806f\\u90a6-\\u5927\\u696d\",\n        \"phone\": \"03-3579739\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.65682449268643,\n          24.116007476860556\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8587\",\n        \"name\": \"\\u806f\\u90a6-\\u8208\\u4e2d\",\n        \"phone\": \"04-22613636\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.23017580379823,\n          22.9808099029803\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8588\",\n        \"name\": \"\\u806f\\u90a6-\\u5bcc\\u5f37\",\n        \"phone\": \"06-2603298\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51187427849247,\n          25.113796117446935\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8711\",\n        \"name\": \"\\u967d\\u4fe1-\\u77f3\\u724c\",\n        \"phone\": \"02-28288585\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50647414370454,\n          25.007144114738406\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8841\",\n        \"name\": \"\\u7389\\u5c71-\\u96d9\\u548c\",\n        \"phone\": \"02-8923-1313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46041494770526,\n          25.05109393264766\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8842\",\n        \"name\": \"\\u7389\\u5c71-\\u65b0\\u838a\",\n        \"phone\": \"02-29981313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.33990486530975,\n          22.637293324297865\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8843\",\n        \"name\": \"\\u7389\\u5c71-\\u9ad8\\u96c4\",\n        \"phone\": \"07-397-1313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53287034317658,\n          25.055377277174138\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8844\",\n        \"name\": \"\\u7389\\u5c71-\\u677e\\u6c5f\",\n        \"phone\": \"02-25621313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46117204171206,\n          25.009741326261064\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8846\",\n        \"name\": \"\\u7389\\u5c71-\\u677f\\u6a4b\",\n        \"phone\": \"02-22651313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.22410425169991,\n          22.98051318281805\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8847\",\n        \"name\": \"\\u7389\\u5c71-\\u53f0\\u5357\",\n        \"phone\": \"06-2699913\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44288000328582,\n          23.479410003370706\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8848\",\n        \"name\": \"\\u7389\\u5c71-\\u5609\\u7fa9\",\n        \"phone\": \"05-2169913\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5339783008776,\n          25.014787480013904\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8849\",\n        \"name\": \"\\u7389\\u5c71-\\u53f0\\u5927\",\n        \"phone\": \"02-83691313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52414483875982,\n          25.095080321000506\n        ]\n      },\n      \"properties\": {\n        \"id\": \"884A\",\n        \"name\": \"\\u7389\\u5c71-\\u58eb\\u6797\",\n        \"phone\": \"02-2833-1313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.64022826469193,\n          24.15880914795396\n        ]\n      },\n      \"properties\": {\n        \"id\": \"884B\",\n        \"name\": \"\\u7389\\u5c71-\\u53f0\\u4e2d\",\n        \"phone\": \"04-22589913\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56021223578887,\n          25.051701775095157\n        ]\n      },\n      \"properties\": {\n        \"id\": \"884C\",\n        \"name\": \"\\u7389\\u5c71-\\u5357\\u4eac\\u6771\\u8def\",\n        \"phone\": \"02-27651313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30359946748834,\n          22.66776453572205\n        ]\n      },\n      \"properties\": {\n        \"id\": \"884D\",\n        \"name\": \"\\u7389\\u5c71-\\u5de6\\u71df\",\n        \"phone\": \"07-5586613\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50966514159533,\n          25.04423232549387\n        ]\n      },\n      \"properties\": {\n        \"id\": \"884E\",\n        \"name\": \"\\u7389\\u5c71-\\u57ce\\u4e2d\",\n        \"phone\": \"02-23821313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.30493985125243,\n          25.004861189019373\n        ]\n      },\n      \"properties\": {\n        \"id\": \"884F\",\n        \"name\": \"\\u7389\\u5c71-\\u6843\\u5712\",\n        \"phone\": \"03-3366813\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.01198017517058,\n          24.785481576809666\n        ]\n      },\n      \"properties\": {\n        \"id\": \"884H\",\n        \"name\": \"\\u7389\\u5c71-\\u65b0\\u7af9\",\n        \"phone\": \"03-6669913\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.67976586816964,\n          24.108785190747636\n        ]\n      },\n      \"properties\": {\n        \"id\": \"884J\",\n        \"name\": \"\\u7389\\u5c71-\\u5927\\u91cc\",\n        \"phone\": \"(04)24079813\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5476906789493,\n          25.057382833887658\n        ]\n      },\n      \"properties\": {\n        \"id\": \"884L\",\n        \"name\": \"\\u7389\\u5c71-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"(02)55561313\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30843266758355,\n          22.630586336239986\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8881\",\n        \"name\": \"\\u570b\\u6cf0-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2285888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.67367234076991,\n          24.142639652918223\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8882\",\n        \"name\": \"\\u570b\\u6cf0-\\u53f0\\u4e2d\",\n        \"phone\": \"04-22107058\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53282589064361,\n          25.05310745618208\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8883\",\n        \"name\": \"\\u570b\\u6cf0-\\u677e\\u6c5f\",\n        \"phone\": \"02-2181-2888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20328575487899,\n          22.99343081913905\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8884\",\n        \"name\": \"\\u570b\\u6cf0-\\u53f0\\u5357\",\n        \"phone\": \"(06)2259666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.29754044531819,\n          25.01759468831495\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8885\",\n        \"name\": \"\\u570b\\u6cf0-\\u6843\\u5712\",\n        \"phone\": \"(03)3567866\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.44596359884193,\n          25.03462657669604\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8886\",\n        \"name\": \"\\u570b\\u6cf0-\\u65b0\\u838a\",\n        \"phone\": \"(02)22015666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55251260375485,\n          25.041662456144024\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8887\",\n        \"name\": \"\\u570b\\u6cf0-\\u5fe0\\u5b5d\",\n        \"phone\": \"(02)77117888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54912153699081,\n          25.02206502637147\n        ]\n      },\n      \"properties\": {\n        \"id\": \"8888\",\n        \"name\": \"\\u570b\\u6cf0-\\u6566\\u5357\",\n        \"phone\": \"02-77111128\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51513031110815,\n          25.04429820544992\n        ]\n      },\n      \"properties\": {\n        \"id\": \"888A\",\n        \"name\": \"\\u570b\\u6cf0-\\u9928\\u524d\",\n        \"phone\": \"02-23310025\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47906908932586,\n          25.018974169601893\n        ]\n      },\n      \"properties\": {\n        \"id\": \"888K\",\n        \"name\": \"\\u570b\\u6cf0-\\u677f\\u6a4b\",\n        \"phone\": \"02-89643888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54912153699081,\n          25.02206502637147\n        ]\n      },\n      \"properties\": {\n        \"id\": \"888Q\",\n        \"name\": \"\\u570b\\u6cf0-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-77123892\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54918468731599,\n          25.028912522276457\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9101\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u6566\\u5357\",\n        \"phone\": \"02-27052888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55570799487015,\n          25.05139504835985\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9103\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u677e\\u5c71\",\n        \"phone\": \"02-25708889\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30173975791494,\n          22.620253155022866\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9105\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u9ad8\\u76db\",\n        \"phone\": \"07-2615211\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45795929347729,\n          25.008461659152243\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9108\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u6d77\\u5c71\",\n        \"phone\": \"02-29699977\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55484748549783,\n          25.041185677483153\n        ]\n      },\n      \"properties\": {\n        \"id\": \"910D\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5927\\u8208\",\n        \"phone\": \"(02)55585558\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.67932882032501,\n          24.138023049092705\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9131\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u6c11\\u6b0a\",\n        \"phone\": \"04-22208822\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.22238241363277,\n          23.008386902448816\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9134\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u958b\\u5143\",\n        \"phone\": \"06-2348899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96533836853713,\n          24.812713341478428\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9135\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u7d93\\u570b\",\n        \"phone\": \"03-5317777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56400659345948,\n          25.05160846583206\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9136\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u897f\\u677e\",\n        \"phone\": \"02-27683388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52895885552017,\n          25.096158025853192\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9137\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u58eb\\u6797\",\n        \"phone\": \"02-28380567\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.53376077696647,\n          24.263548678680195\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9138\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u4e2d\\u6e2f\",\n        \"phone\": \"04-26577599\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.70140133690903,\n          24.214282897734915\n        ]\n      },\n      \"properties\": {\n        \"id\": \"913D\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u6f6d\\u5b50\",\n        \"phone\": \"04-25362345\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.74243480777429,\n          25.129790883787546\n        ]\n      },\n      \"properties\": {\n        \"id\": \"913E\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u57fa\\u9686\",\n        \"phone\": \"02-24221212\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.4870958647903,\n          22.671327162033048\n        ]\n      },\n      \"properties\": {\n        \"id\": \"913H\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5c4f\\u6771\",\n        \"phone\": \"08-7339602\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50461495615633,\n          25.037989159205914\n        ]\n      },\n      \"properties\": {\n        \"id\": \"913I\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u842c\\u83ef\",\n        \"phone\": \"02-23751399\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.44512602061451,\n          24.985452902052526\n        ]\n      },\n      \"properties\": {\n        \"id\": \"913N\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u571f\\u57ce\",\n        \"phone\": \"02-22625988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30114598743572,\n          22.66330999903929\n        ]\n      },\n      \"properties\": {\n        \"id\": \"913R\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5317\\u9ad8\\u96c4\",\n        \"phone\": \"07-5559933\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68581094816516,\n          24.17989033730249\n        ]\n      },\n      \"properties\": {\n        \"id\": \"913U\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5d07\\u5fb7\",\n        \"phone\": \"04-22468899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51333641256265,\n          25.04394390467596\n        ]\n      },\n      \"properties\": {\n        \"id\": \"913Y\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u9928\\u524d\",\n        \"phone\": \"02-23615678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49838950480493,\n          25.05952340742243\n        ]\n      },\n      \"properties\": {\n        \"id\": \"913g\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5357\\u4e09\\u91cd\",\n        \"phone\": \"02-29734388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29087478588022,\n          22.62303225925372\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9183\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2150077\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.65848090435871,\n          24.155729463871182\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9184\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u53f0\\u4e2d\",\n        \"phone\": \"04-23200088\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19706823204639,\n          22.995322303021872\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9185\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u53f0\\u5357\",\n        \"phone\": \"06-2252588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96284029055191,\n          24.80630694155966\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9186\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u65b0\\u7af9\",\n        \"phone\": \"03-5237777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54226127991265,\n          24.08201552308815\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9187\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5f70\\u5316\",\n        \"phone\": \"04-7250888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.33238238444845,\n          22.642339509782317\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9188\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u4e09\\u6c11\",\n        \"phone\": \"07-3952588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31114203803266,\n          24.99250801518787\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9189\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u6843\\u5712\",\n        \"phone\": \"03-3377555\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22643450392913,\n          24.95534687550108\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918A\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4278699\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47906908932586,\n          25.018974169601893\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918B\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u677f\\u6a4b\",\n        \"phone\": \"02-89518089\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52086624247728,\n          25.02714265053292\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918C\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u53e4\\u4ead\",\n        \"phone\": \"02-23279288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.21139442401402,\n          22.991828445949253\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918D\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u6771\\u9580\",\n        \"phone\": \"06-2290077\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53083737292548,\n          25.052253307601454\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918E\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5357\\u4eac\",\n        \"phone\": \"02-25427088\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54292665851061,\n          24.978014039935744\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918F\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u65b0\\u5e97\",\n        \"phone\": \"02-29121818\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45346034550509,\n          25.05118729858678\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918G\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u65b0\\u838a\",\n        \"phone\": \"02-89918899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52539377065762,\n          25.057733615992298\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918H\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u4e2d\\u5c71\",\n        \"phone\": \"02-21002798\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51462835278072,\n          25.007332834931628\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918J\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u6c38\\u548c\",\n        \"phone\": \"02-29207777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.60627270762394,\n          25.073700774923033\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918K\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u6771\\u6e56\",\n        \"phone\": \"02-26333988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68792600497504,\n          24.13048261051955\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918L\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5efa\\u6210\",\n        \"phone\": \"04-22830099\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.45865999999421,\n          23.474410000702267\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918M\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5609\\u7fa9\",\n        \"phone\": \"05-2258666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53086014449656,\n          25.119017132513306\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918P\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5929\\u6bcd\",\n        \"phone\": \"02-28767388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54762440067454,\n          25.04175758057881\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918W\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5fe0\\u5b5d\",\n        \"phone\": \"02-27771077\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5135552937565,\n          25.050861139530095\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918X\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u53f0\\u5317\",\n        \"phone\": \"02-25561133\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3345159189105,\n          22.60321523692496\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918c\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u9cf3\\u5c71\",\n        \"phone\": \"07-7101288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.59217586189092,\n          25.08218761760509\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918d\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5167\\u6e56\",\n        \"phone\": \"02-27911999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5504209158739,\n          25.041704571400746\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918e\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5927\\u5b89\",\n        \"phone\": \"02-27730899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.61756295053709,\n          24.34772378887844\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918g\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5927\\u7532\",\n        \"phone\": \"04-26882828\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.87830068445514,\n          24.686643046840953\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918i\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u7af9\\u5357\",\n        \"phone\": \"037-478345\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.41838909078061,\n          25.0264233743533\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918s\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u4e39\\u9cf3\",\n        \"phone\": \"02-29082388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.32982390096258,\n          22.62241277589005\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918u\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u745e\\u8c50\",\n        \"phone\": \"07-7211828\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51151687433625,\n          25.05651682923206\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918x\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5ef6\\u5e73\",\n        \"phone\": \"02-25553888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.75145085836712,\n          24.75485245293902\n        ]\n      },\n      \"properties\": {\n        \"id\": \"918z\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u5b9c\\u862d\",\n        \"phone\": \"03-9331999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5476906789493,\n          25.057382833887658\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9199\",\n        \"name\": \"\\u7fa4\\u76ca\\u91d1\\u9f0e-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-87898888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.67421135814217,\n          24.14780093700684\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9202\",\n        \"name\": \"\\u51f1\\u57fa-\\u4e2d\\u6e2f\",\n        \"phone\": \"04-22019588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68123910589931,\n          24.13836560381557\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9204\",\n        \"name\": \"\\u51f1\\u57fa-\\u53f0\\u4e2d\",\n        \"phone\": \"04-22278011\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49624769303578,\n          25.067376339772945\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9205\",\n        \"name\": \"\\u51f1\\u57fa-\\u4e09\\u91cd\",\n        \"phone\": \"02-29838833\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31838594628341,\n          22.63046637194651\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9206\",\n        \"name\": \"\\u51f1\\u57fa-\\u9ad8\\u96c4\",\n        \"phone\": \"(07)222-3211\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51715159807746,\n          25.00683343055687\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9207\",\n        \"name\": \"\\u51f1\\u57fa-\\u6c38\\u548c\",\n        \"phone\": \"(02)22324567\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31114203803266,\n          24.99250801518787\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9208\",\n        \"name\": \"\\u51f1\\u57fa-\\u6843\\u5712\",\n        \"phone\": \"(03)3336622\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29300793184731,\n          22.79940554768954\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9209\",\n        \"name\": \"\\u51f1\\u57fa-\\u5ca1\\u5c71\",\n        \"phone\": \"076233600\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45986625111436,\n          25.005087954512447\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920A\",\n        \"name\": \"\\u51f1\\u57fa-\\u677f\\u6a4b\",\n        \"phone\": \"02-89516688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50677295613193,\n          24.999511050886337\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920C\",\n        \"name\": \"\\u51f1\\u57fa-\\u96d9\\u548c\",\n        \"phone\": \"02-22468666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56401916764547,\n          25.041454803163717\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920D\",\n        \"name\": \"\\u51f1\\u57fa-\\u5e02\\u5e9c\",\n        \"phone\": \"02-27456888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.22166162773554,\n          22.98565598999399\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920E\",\n        \"name\": \"\\u51f1\\u57fa-\\u6771\\u9580\",\n        \"phone\": \"06-2698899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51695783204148,\n          25.045724850397423\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920F\",\n        \"name\": \"\\u51f1\\u57fa-\\u7ad9\\u524d\",\n        \"phone\": \"02-23831111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54361856922516,\n          24.074908198176885\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920G\",\n        \"name\": \"\\u51f1\\u57fa-\\u5f70\\u5316\",\n        \"phone\": \"04-7266565\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.7487464219939,\n          25.12815623802721\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920H\",\n        \"name\": \"\\u51f1\\u57fa-\\u57fa\\u9686\",\n        \"phone\": \"24202111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.75582133144142,\n          24.755308150607682\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920M\",\n        \"name\": \"\\u51f1\\u57fa-\\u5b9c\\u862d\",\n        \"phone\": \"03-9334999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.04163339282267,\n          24.902057500540263\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920N\",\n        \"name\": \"\\u51f1\\u57fa-\\u6e56\\u53e3\",\n        \"phone\": \"03-5907766\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54184832090682,\n          24.981319146704816\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920V\",\n        \"name\": \"\\u51f1\\u57fa-\\u65b0\\u5e97\",\n        \"phone\": \"02-29155855\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68881407266073,\n          24.104215522839834\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920W\",\n        \"name\": \"\\u51f1\\u57fa-\\u5927\\u91cc\",\n        \"phone\": \"04-24866988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.15147628264307,\n          22.756444644829838\n        ]\n      },\n      \"properties\": {\n        \"id\": \"920Z\",\n        \"name\": \"\\u51f1\\u57fa-\\u53f0\\u6771\",\n        \"phone\": \"089-353345\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.22162554325557,\n          22.985519366879632\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9211\",\n        \"name\": \"\\u51f1\\u57fa-\\u53f0\\u5357\",\n        \"phone\": \"06-2347622\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.4579476857518,\n          22.47026079834569\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9212\",\n        \"name\": \"\\u51f1\\u57fa-\\u6771\\u6e2f\",\n        \"phone\": \"(08)833-6565\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.28942092018663,\n          22.661541829112853\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9215\",\n        \"name\": \"\\u51f1\\u57fa-\\u9ad8\\u7f8e\\u9928\",\n        \"phone\": \"(07)5544888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54430607555314,\n          25.053897972398925\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9216\",\n        \"name\": \"\\u51f1\\u57fa-\\u4fe1\\u7fa9\",\n        \"phone\": \"02-27195528\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.57641948558793,\n          25.04987162553671\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9217\",\n        \"name\": \"\\u51f1\\u57fa-\\u677e\\u5c71\",\n        \"phone\": \"02-27534567\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55124089667815,\n          25.080819661221177\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9218\",\n        \"name\": \"\\u51f1\\u57fa-\\u5927\\u76f4\",\n        \"phone\": \"(02)85098288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54383571739243,\n          25.06261647561631\n        ]\n      },\n      \"properties\": {\n        \"id\": \"921C\",\n        \"name\": \"\\u51f1\\u57fa-\\u6c11\\u6b0a\",\n        \"phone\": \"02-25043388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.37227801178788,\n          24.935912457393407\n        ]\n      },\n      \"properties\": {\n        \"id\": \"921E\",\n        \"name\": \"\\u51f1\\u57fa-\\u4e09\\u5cfd\",\n        \"phone\": \"02-6729988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53086014449656,\n          25.119017132513306\n        ]\n      },\n      \"properties\": {\n        \"id\": \"921F\",\n        \"name\": \"\\u51f1\\u57fa-\\u5929\\u6bcd\",\n        \"phone\": \"02-28728787\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.43862897535404,\n          25.08289905893241\n        ]\n      },\n      \"properties\": {\n        \"id\": \"921G\",\n        \"name\": \"\\u51f1\\u57fa-\\u4e94\\u80a1\",\n        \"phone\": \"02-82950066\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46815445648248,\n          24.987780008512573\n        ]\n      },\n      \"properties\": {\n        \"id\": \"921J\",\n        \"name\": \"\\u51f1\\u57fa-\\u571f\\u57ce\",\n        \"phone\": \"02-82626998\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.29886472725848,\n          24.954266581775\n        ]\n      },\n      \"properties\": {\n        \"id\": \"921M\",\n        \"name\": \"\\u51f1\\u57fa-\\u516b\\u5fb7\",\n        \"phone\": \"03-3779688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45349313866933,\n          25.045241029771425\n        ]\n      },\n      \"properties\": {\n        \"id\": \"921S\",\n        \"name\": \"\\u51f1\\u57fa-\\u5e78\\u798f\",\n        \"phone\": \"02-89919999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.82991774701135,\n          24.25262356104572\n        ]\n      },\n      \"properties\": {\n        \"id\": \"921Y\",\n        \"name\": \"\\u51f1\\u57fa-\\u6771\\u52e2\",\n        \"phone\": \"04-25877111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.72246313453645,\n          24.25504427945391\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9223\",\n        \"name\": \"\\u51f1\\u57fa-\\u8c50\\u4e2d\",\n        \"phone\": \"04-25274180\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.42394322566575,\n          25.02398084158691\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9224\",\n        \"name\": \"\\u51f1\\u57fa-\\u65b0\\u838a\",\n        \"phone\": \"02-22019898\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.56528651547069,\n          22.618333080343522\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9225\",\n        \"name\": \"\\u51f1\\u57fa-\\u5167\\u57d4\",\n        \"phone\": \"08-7690888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.65639529076113,\n          25.06509823540654\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9226\",\n        \"name\": \"\\u51f1\\u57fa-\\u6c50\\u6b62\",\n        \"phone\": \"02-26485959\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5115208594632,\n          25.04502739906325\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9227\",\n        \"name\": \"\\u51f1\\u57fa-\\u57ce\\u4e2d\",\n        \"phone\": \"2361-6789\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52258820873917,\n          25.05682549549902\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9229\",\n        \"name\": \"\\u51f1\\u57fa-\\u4e2d\\u5c71\",\n        \"phone\": \"02-77026678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.49451811155245,\n          22.669806841426464\n        ]\n      },\n      \"properties\": {\n        \"id\": \"922C\",\n        \"name\": \"\\u51f1\\u57fa-\\u5c4f\\u6771\",\n        \"phone\": \"08-7657000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54430607555314,\n          25.053897972398925\n        ]\n      },\n      \"properties\": {\n        \"id\": \"922H\",\n        \"name\": \"\\u51f1\\u57fa-\\u5fa9\\u8208\",\n        \"phone\": \"27180718\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.57092387827193,\n          23.962075745645905\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9231\",\n        \"name\": \"\\u51f1\\u57fa-\\u54e1\\u6797\",\n        \"phone\": \"04-8399988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52466886797144,\n          25.051949889019834\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9232\",\n        \"name\": \"\\u51f1\\u57fa-\\u5efa\\u6210\",\n        \"phone\": \"02-25588080\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.36471033913739,\n          25.057730910059668\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9233\",\n        \"name\": \"\\u51f1\\u57fa-\\u9577\\u5e9a\",\n        \"phone\": \"03-3275000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.0143546019488,\n          24.833499053457487\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9234\",\n        \"name\": \"\\u51f1\\u57fa-\\u7af9\\u5317\",\n        \"phone\": \"03-5552233\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19640115060855,\n          22.987593828932575\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9235\",\n        \"name\": \"\\u51f1\\u57fa-\\u6c38\\u83ef\",\n        \"phone\": \"06-2205570\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43306492542551,\n          23.709327484787202\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9236\",\n        \"name\": \"\\u51f1\\u57fa-\\u864e\\u5c3e\",\n        \"phone\": \"(05)633-3581\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54850053728308,\n          25.05135358589174\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9237\",\n        \"name\": \"\\u51f1\\u57fa-\\u6566\\u5317\",\n        \"phone\": \"02-27401166\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52539270389224,\n          25.093343474270334\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9238\",\n        \"name\": \"\\u51f1\\u57fa-\\u58eb\\u6797\",\n        \"phone\": \"02-28823355\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6395557473533,\n          24.15913060995087\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9239\",\n        \"name\": \"\\u51f1\\u57fa-\\u5e02\\u653f\",\n        \"phone\": \"04-2258-9669\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44393000102575,\n          23.473510005249587\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9252\",\n        \"name\": \"\\u51f1\\u57fa-\\u5609\\u7fa9\",\n        \"phone\": \"05-2276879\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.01959457617244,\n          24.782126903481444\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9254\",\n        \"name\": \"\\u51f1\\u57fa-\\u79d1\\u5712\",\n        \"phone\": \"03-6686599\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52249269011226,\n          25.026639358203326\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9255\",\n        \"name\": \"\\u51f1\\u57fa-\\u548c\\u5e73\",\n        \"phone\": \"02-23697707\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.29215368747525,\n          25.04769514029347\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9256\",\n        \"name\": \"\\u51f1\\u57fa-\\u5357\\u5d01\",\n        \"phone\": \"03-3129933\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.37520921793916,\n          25.077895882421952\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9257\",\n        \"name\": \"\\u51f1\\u57fa-\\u6797\\u53e3\",\n        \"phone\": \"02-26025678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.77190984300096,\n          24.679546082233387\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9258\",\n        \"name\": \"\\u51f1\\u57fa-\\u7f85\\u6771\",\n        \"phone\": \"03-9534888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3460623087001,\n          22.641400234128035\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9259\",\n        \"name\": \"\\u51f1\\u57fa-\\u6f84\\u65b0\",\n        \"phone\": \"07-7809788\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.99497255055482,\n          24.87571882396046\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9266\",\n        \"name\": \"\\u51f1\\u57fa-\\u65b0\\u8c50\",\n        \"phone\": \"03-5575566\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53511049086421,\n          25.052216677516075\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9268\",\n        \"name\": \"\\u51f1\\u57fa-\\u53f0\\u5317\",\n        \"phone\": \"02-25166789\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96646232876482,\n          24.809628431295874\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9272\",\n        \"name\": \"\\u51f1\\u57fa-\\u7af9\\u79d1\",\n        \"phone\": \"03-5221177\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.08535441512984,\n          24.742121104343344\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9273\",\n        \"name\": \"\\u51f1\\u57fa-\\u7af9\\u6771\",\n        \"phone\": \"03-5958588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.36141262842624,\n          22.6247873775034\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9274\",\n        \"name\": \"\\u51f1\\u57fa-\\u9cf3\\u5c71\",\n        \"phone\": \"07-7198899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30171751189829,\n          22.613540352894827\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9275\",\n        \"name\": \"\\u51f1\\u57fa-\\u4e09\\u591a\",\n        \"phone\": \"07-3383288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.82191680224673,\n          24.55970693140327\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9276\",\n        \"name\": \"\\u51f1\\u57fa-\\u82d7\\u6817\",\n        \"phone\": \"037-321300\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.25561249054225,\n          23.02537878267583\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9278\",\n        \"name\": \"\\u51f1\\u57fa-\\u6c38\\u5eb7\",\n        \"phone\": \"06-2038899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54779762359985,\n          23.709800459542507\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9281\",\n        \"name\": \"\\u51f1\\u57fa-\\u6597\\u516d\",\n        \"phone\": \"05-5376688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.21137244563775,\n          22.992287519544178\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9283\",\n        \"name\": \"\\u51f1\\u57fa-\\u5317\\u9580\",\n        \"phone\": \"06-2228777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22638644203194,\n          24.96599674088113\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9285\",\n        \"name\": \"\\u51f1\\u57fa-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4336989\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.57074205421829,\n          25.08092442147297\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9287\",\n        \"name\": \"\\u51f1\\u57fa-\\u5167\\u6e56\",\n        \"phone\": \"02-27938388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47906908932586,\n          25.018974169601893\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9288\",\n        \"name\": \"\\u51f1\\u57fa-\\u57d4\\u5898\",\n        \"phone\": \"02-89517777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55632767218863,\n          25.0001711709779\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9289\",\n        \"name\": \"\\u51f1\\u57fa-\\u8208\\u9686\",\n        \"phone\": \"02-29315000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5509348737846,\n          25.029537676670095\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9291\",\n        \"name\": \"\\u51f1\\u57fa-\\u5927\\u5b89\",\n        \"phone\": \"02-27080606\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.90702636693223,\n          24.685386320291055\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9296\",\n        \"name\": \"\\u51f1\\u57fa-\\u982d\\u4efd\",\n        \"phone\": \"037-591888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.69341807795026,\n          24.171561129488683\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9297\",\n        \"name\": \"\\u51f1\\u57fa-\\u6587\\u5fc3\",\n        \"phone\": \"04-22466168\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51151687433625,\n          25.05651682923206\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9298\",\n        \"name\": \"\\u51f1\\u57fa-\\u5ef6\\u5e73\",\n        \"phone\": \"02-25558877\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55150597524369,\n          25.084875603296265\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9299\",\n        \"name\": \"\\u51f1\\u57fa-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-21818888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.65121767112213,\n          24.139714438972977\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9302\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u53f0\\u4e2d\",\n        \"phone\": \"04-24719488\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29616467042601,\n          22.621764093615855\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9303\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2728688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.4526325539753,\n          25.045094355741274\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9305\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u65b0\\u838a\",\n        \"phone\": \"02-22795688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.1843289549481,\n          22.993355299317443\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9306\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u53f0\\u5357\",\n        \"phone\": \"06-2959988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54339738480424,\n          25.03493564332671\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9307\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u5927\\u5b89\",\n        \"phone\": \"02-27549696\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.24737378943627,\n          23.183823944663263\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9308\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u9ebb\\u8c46\",\n        \"phone\": \"06-5720168\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52407136575192,\n          25.025210131448937\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9309\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u53e4\\u4ead\",\n        \"phone\": \"02-23699588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31344849061526,\n          22.6114802523025\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9312\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6c11\\u6b0a\",\n        \"phone\": \"07-3333133\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44971999951457,\n          23.477880006752166\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9314\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u5609\\u7fa9\",\n        \"phone\": \"05-2226848\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.65560631731654,\n          24.44243613649514\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9315\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u82d1\\u88e1\",\n        \"phone\": \"037-860678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.44423059064508,\n          25.169276934812704\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9316\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6de1\\u6c34\",\n        \"phone\": \"02-26255566\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.39125174808098,\n          25.07832270627713\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9317\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6797\\u53e3\",\n        \"phone\": \"02-26018288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.3504142050245,\n          24.954461716163394\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9319\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u9daf\\u6b4c\",\n        \"phone\": \"02-26776000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.743069495745,\n          25.129376850489255\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9322\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u516c\\u8aa0\",\n        \"phone\": \"02-24201201\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.35532366079507,\n          22.567043895094166\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9323\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u5c0f\\u6e2f\",\n        \"phone\": \"07-8068988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.2871877567478,\n          22.79339171020356\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9324\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u5ca1\\u5c71\",\n        \"phone\": \"07-6255911\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53180412832376,\n          25.042399028997796\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9325\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u5fe0\\u5b5d\",\n        \"phone\": \"02-23587488\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5445807397667,\n          25.051642163653675\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9326\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u5357\\u4eac\",\n        \"phone\": \"02-27755688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54335747551778,\n          23.710687142453047\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9327\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6597\\u516d\",\n        \"phone\": \"05-5330777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.53831675942214,\n          22.549178098443257\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9328\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6f6e\\u5dde\",\n        \"phone\": \"08-7805888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.24149647874056,\n          23.463971233041935\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9329\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6734\\u5b50\",\n        \"phone\": \"05-3707688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.35726199596793,\n          22.62419445902503\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9331\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u9cf3\\u5c71\",\n        \"phone\": \"07-7477600\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.32792985359536,\n          22.7321765178947\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9332\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6960\\u6893\",\n        \"phone\": \"07-3542030\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.76984961349979,\n          24.6783101295938\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9333\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u9577\\u8679\",\n        \"phone\": \"03-9574101\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55794296660697,\n          25.02986647315562\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9334\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u4e16\\u8cbf\",\n        \"phone\": \"02-27396266\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.25472077379118,\n          24.962100731439254\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9337\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u5167\\u58e2\",\n        \"phone\": \"03-4519888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.02711463417063,\n          24.82150182561268\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9339\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u7af9\\u5317\",\n        \"phone\": \"03-6580066\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.91115278462885,\n          24.68818434657197\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9343\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u982d\\u4efd\",\n        \"phone\": \"037-667999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54828993022954,\n          25.041748246738788\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9347\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6566\\u5357\",\n        \"phone\": \"02-27415858\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46012221499636,\n          25.007961367307573\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9349\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u5408\\u6cf0\",\n        \"phone\": \"02-29561688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.30797101016033,\n          24.99121209819961\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9352\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6843\\u5712\",\n        \"phone\": \"03-3478168\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.82919635481748,\n          24.25911771743565\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9358\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6771\\u52e2\",\n        \"phone\": \"04-25881811\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51310571583359,\n          25.04485397519645\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9359\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u4e2d\\u6b63\",\n        \"phone\": \"02-23821788\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.81898867489289,\n          24.555180052316743\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9362\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u82d7\\u6817\",\n        \"phone\": \"037-376118\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54090781817867,\n          24.079499337664533\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9363\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u5f70\\u5316\",\n        \"phone\": \"04-7223700\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.48186039918417,\n          25.080609955917446\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9369\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u4e09\\u91cd\",\n        \"phone\": \"02-28576789\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43867503344592,\n          23.709705780211927\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9377\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u864e\\u5c3e\",\n        \"phone\": \"(05)6334888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.47913624397326,\n          23.673207233837164\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9381\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6597\\u5357\",\n        \"phone\": \"(05)5950121\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.15356800557768,\n          22.754873259631207\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9386\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u6771\\u6607\",\n        \"phone\": \"089-332339\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55091534806718,\n          25.05773398758345\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9399\",\n        \"name\": \"\\u83ef\\u5357\\u6c38\\u660c-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"25456888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5171672188255,\n          25.11345936832575\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9604\",\n        \"name\": \"\\u5bcc\\u90a6-\\u967d\\u660e\",\n        \"phone\": \"02-28230688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.15328764070755,\n          22.754589179124842\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9608\",\n        \"name\": \"\\u5bcc\\u90a6-\\u53f0\\u6771\",\n        \"phone\": \"089-341022\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55228341974629,\n          25.038171253374973\n        ]\n      },\n      \"properties\": {\n        \"id\": \"960S\",\n        \"name\": \"\\u5bcc\\u90a6-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"(02)27716699\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.74743519218794,\n          25.1292314693545\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9614\",\n        \"name\": \"\\u5bcc\\u90a6-\\u57fa\\u9686\",\n        \"phone\": \"2421-3355\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29751096222931,\n          22.797955609815162\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9616\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5ca1\\u5c71\",\n        \"phone\": \"07-6236123\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.60706020894725,\n          23.982280436151456\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9621\",\n        \"name\": \"\\u5bcc\\u90a6-\\u82b1\\u84ee\",\n        \"phone\": \"038-350111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.01187466182161,\n          24.78559227636741\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9622\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5712\\u5340\",\n        \"phone\": \"03-5786868\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51695783204148,\n          25.045724850397423\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9623\",\n        \"name\": \"\\u5bcc\\u90a6-\\u53f0\\u5317\",\n        \"phone\": \"02-23113333\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.00593653553874,\n          24.828910457175585\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9624\",\n        \"name\": \"\\u5bcc\\u90a6-\\u7af9\\u5317\",\n        \"phone\": \"03-5515588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.08783703232633,\n          24.738998027878154\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9625\",\n        \"name\": \"\\u5bcc\\u90a6-\\u7af9\\u6771\",\n        \"phone\": \"03-5818888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56970120867673,\n          25.081698951044103\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9627\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5167\\u6e56\",\n        \"phone\": \"02\\u250087971188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.77085840895968,\n          24.684524684130597\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9634\",\n        \"name\": \"\\u5bcc\\u90a6-\\u7f85\\u6771\",\n        \"phone\": \"03-9571166\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22374,\n          24.9653199\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9636\",\n        \"name\": \"\\u5bcc\\u90a6-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4256767\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96789530695052,\n          24.80629113787544\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9647\",\n        \"name\": \"\\u5bcc\\u90a6-\\u65b0\\u7af9\\u83ef\\u4fe1\",\n        \"phone\": \"03-5228678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5471136859812,\n          25.057518322945384\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9651\",\n        \"name\": \"\\u5bcc\\u90a6-\\u6c11\\u751f\",\n        \"phone\": \"02-27128800\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50647414370454,\n          25.007144114738406\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9654\",\n        \"name\": \"\\u5bcc\\u90a6-\\u6c38\\u548c\",\n        \"phone\": \"02-22323266\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46703530163569,\n          25.02077680456859\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9655\",\n        \"name\": \"\\u5bcc\\u90a6-\\u677f\\u6a4b\",\n        \"phone\": \"02-22546996\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.8225511312893,\n          24.560845535680333\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9657\",\n        \"name\": \"\\u5bcc\\u90a6-\\u82d7\\u6817\",\n        \"phone\": \"037-327196\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53653746104725,\n          25.060057653333633\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9658\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5efa\\u570b\",\n        \"phone\": \"02-25095198\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31282502127142,\n          22.63201407500027\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9659\",\n        \"name\": \"\\u5bcc\\u90a6-\\u9ad8\\u96c4\",\n        \"phone\": \"07-2366901\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.66283277551318,\n          24.165543382211506\n        ]\n      },\n      \"properties\": {\n        \"id\": \"965K\",\n        \"name\": \"\\u5bcc\\u90a6-\\u53f0\\u4e2d\",\n        \"phone\": \"04-23129999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54346695436281,\n          24.074455197375027\n        ]\n      },\n      \"properties\": {\n        \"id\": \"965U\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5f70\\u5316\",\n        \"phone\": \"04-7259456\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54292665851061,\n          24.978014039935744\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9661\",\n        \"name\": \"\\u5bcc\\u90a6-\\u65b0\\u5e97\",\n        \"phone\": \"02-29178818\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5484832400792,\n          25.045581624965074\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9663\",\n        \"name\": \"\\u5bcc\\u90a6-\\u6566\\u5357\",\n        \"phone\": \"02-8771-5888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5325981774281,\n          25.117915568963458\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9664\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5929\\u6bcd\",\n        \"phone\": \"02-28763677\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.30669017452284,\n          25.001877530767384\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9665\",\n        \"name\": \"\\u5bcc\\u90a6-\\u6843\\u5712\",\n        \"phone\": \"03-3381668\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.63936561864415,\n          24.142207690527638\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9666\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5357\\u5c6f\",\n        \"phone\": \"04-23801168\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19181161260451,\n          22.996557620359255\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9667\",\n        \"name\": \"\\u5bcc\\u90a6-\\u53f0\\u5357\",\n        \"phone\": \"06-2265000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30358616246889,\n          22.666614235994814\n        ]\n      },\n      \"properties\": {\n        \"id\": \"966F\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5de6\\u71df\",\n        \"phone\": \"07-5570123\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5669987421793,\n          23.96676518349115\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9672\",\n        \"name\": \"\\u5bcc\\u90a6-\\u54e1\\u6797\",\n        \"phone\": \"04-8343100\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53848563561931,\n          25.037312316075305\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9676\",\n        \"name\": \"\\u5bcc\\u90a6-\\u4ec1\\u611b\",\n        \"phone\": \"02-27542866\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49523082508763,\n          25.070319467979868\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9677\",\n        \"name\": \"\\u5bcc\\u90a6-\\u4e09\\u91cd\",\n        \"phone\": \"02-89818189\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50151472257565,\n          25.133558641884644\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9678\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5317\\u6295\",\n        \"phone\": \"02-28973889\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55575878823444,\n          25.037405545009545\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9679\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5ef6\\u5409\",\n        \"phone\": \"02-27556696\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.75547794500993,\n          24.7586683682255\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9686\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5b9c\\u862d\",\n        \"phone\": \"03-9369300\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44522999910235,\n          23.482930000628155\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9692\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5609\\u7fa9\",\n        \"phone\": \"05-2236556\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30318431120037,\n          23.305250401032982\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9693\",\n        \"name\": \"\\u5bcc\\u90a6-\\u65b0\\u71df\",\n        \"phone\": \"06-6571000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.4242126783734,\n          23.557532342462796\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9695\",\n        \"name\": \"\\u5bcc\\u90a6-\\u6c11\\u96c4\",\n        \"phone\": \"05-2063669\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43272165827663,\n          23.709313224167115\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9697\",\n        \"name\": \"\\u5bcc\\u90a6-\\u864e\\u5c3e\",\n        \"phone\": \"05-6336611\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30188897787089,\n          23.56816788354149\n        ]\n      },\n      \"properties\": {\n        \"id\": \"969C\",\n        \"name\": \"\\u5bcc\\u90a6-\\u5317\\u6e2f\",\n        \"phone\": \"05-7831888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53328909055263,\n          25.055092302029973\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9801\",\n        \"name\": \"\\u5143\\u5927-\\u677e\\u6c5f\",\n        \"phone\": \"02-25010655\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54078020661113,\n          23.708316979330515\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980C\",\n        \"name\": \"\\u5143\\u5927- \\u6597\\u516d\",\n        \"phone\": \"05-5353456\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.21856935802292,\n          23.006974508980832\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980D\",\n        \"name\": \"\\u5143\\u5927-\\u958b\\u5143\",\n        \"phone\": \"06-2353366\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.01984023563872,\n          24.78215269305697\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980K\",\n        \"name\": \"\\u5143\\u5927-\\u7af9\\u79d1\",\n        \"phone\": \"03-5679988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.29151746817342,\n          25.047922728331656\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980Q\",\n        \"name\": \"\\u5143\\u5927-\\u5357\\u5d01\",\n        \"phone\": \"03-3527777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51728233625933,\n          25.032780498944202\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980R\",\n        \"name\": \"\\u5143\\u5927-\\u5357\\u6d77\",\n        \"phone\": \"02-23975399\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51814719399378,\n          25.070588608152608\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980a\",\n        \"name\": \"\\u5143\\u5927-\\u627f\\u5fb7\",\n        \"phone\": \"02-25975888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.55904817557469,\n          24.23598551413051\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980d\",\n        \"name\": \"\\u5143\\u5927-\\u6c99\\u9e7f\",\n        \"phone\": \"04-26623311\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5761698767313,\n          24.270216690187233\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980e\",\n        \"name\": \"\\u5143\\u5927-\\u6e05\\u6c34\",\n        \"phone\": \"04-26238585\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51309587724606,\n          25.043075555632672\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980h\",\n        \"name\": \"\\u5143\\u5927-\\u53f0\\u5317\",\n        \"phone\": \"02-23830968\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43867503344592,\n          23.709705780211927\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980l\",\n        \"name\": \"\\u5143\\u5927-\\u864e\\u5c3e\",\n        \"phone\": \"05-6313000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.20041292079428,\n          22.993909552925857\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980u\",\n        \"name\": \"\\u5143\\u5927-\\u5e9c\\u57ce\",\n        \"phone\": \"06-2206678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.64738688198267,\n          24.170851148974297\n        ]\n      },\n      \"properties\": {\n        \"id\": \"980w\",\n        \"name\": \"\\u5143\\u5927-\\u897f\\u5c6f\",\n        \"phone\": \"04-27067171\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68073422626173,\n          24.138388286949812\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9812\",\n        \"name\": \"\\u5143\\u5927-\\u53f0\\u4e2d\",\n        \"phone\": \"04-22218777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55170923613213,\n          25.048080698004828\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9813\",\n        \"name\": \"\\u5143\\u5927-\\u516b\\u5fb7\",\n        \"phone\": \"02-25786666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19617832481362,\n          22.97594924181992\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9814\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u76ca\",\n        \"phone\": \"06-2611151\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.2616853032625,\n          23.006815325396683\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9815\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u7063\",\n        \"phone\": \"06-2717766\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.97493921898943,\n          24.813020695879455\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9816\",\n        \"name\": \"\\u5143\\u5927-\\u65b0\\u7af9\",\n        \"phone\": \"03-5456000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.34172741822783,\n          22.636424799737625\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9817\",\n        \"name\": \"\\u5143\\u5927-\\u6771\\u6cf0\",\n        \"phone\": \"07-3903333\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.34944981259387,\n          24.956118440828327\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981A\",\n        \"name\": \"\\u5143\\u5927-\\u9daf\\u6b4c\",\n        \"phone\": \"02-26776611\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.01032994258716,\n          24.82647957697853\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981B\",\n        \"name\": \"\\u5143\\u5927-\\u7af9\\u5317\",\n        \"phone\": \"03-5536000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.2598400781243,\n          22.854513722531337\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981C\",\n        \"name\": \"\\u5143\\u5927-\\u8def\\u7af9\",\n        \"phone\": \"07-6977456\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68550079610927,\n          23.909895632180078\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981D\",\n        \"name\": \"\\u5143\\u5927-\\u5357\\u6295\",\n        \"phone\": \"049-2232111\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45349313866933,\n          25.045241029771425\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981E\",\n        \"name\": \"\\u5143\\u5927-\\u767c\\u8ca1\",\n        \"phone\": \"02-29971166\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.42223652118864,\n          25.019055977821896\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981F\",\n        \"name\": \"\\u5143\\u5927-\\u798f\\u71df\",\n        \"phone\": \"02-22010011\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54221552012775,\n          24.074378410532198\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981G\",\n        \"name\": \"\\u5143\\u5927-\\u5f70\\u5316\",\n        \"phone\": \"04-7257001\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52671544733134,\n          25.1183525689779\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981I\",\n        \"name\": \"\\u5143\\u5927-\\u5929\\u6bcd\",\n        \"phone\": \"02-28722345\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.39797691026882,\n          22.502257114890952\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981K\",\n        \"name\": \"\\u5143\\u5927-\\u6797\\u5712\",\n        \"phone\": \"07-6433001\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29878816334798,\n          22.709898982396883\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981L\",\n        \"name\": \"\\u5143\\u5927-\\u8392\\u5149\",\n        \"phone\": \"07-3651356\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.82160840444624,\n          24.55968452719333\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981M\",\n        \"name\": \"\\u5143\\u5927-\\u82d7\\u6817\",\n        \"phone\": \"037-333611\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          118.31954720449757,\n          24.43861490798446\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981N\",\n        \"name\": \"\\u5143\\u5927-\\u91d1\\u9580\",\n        \"phone\": \"082-372367\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.72022663198314,\n          24.13000834444139\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981Q\",\n        \"name\": \"\\u5143\\u5927-\\u592a\\u5e73\",\n        \"phone\": \"04-22768859\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68253093534231,\n          23.756567728734453\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981R\",\n        \"name\": \"\\u5143\\u5927-\\u7af9\\u5c71\",\n        \"phone\": \"049-2652633\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68569512829312,\n          24.169859885786213\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981S\",\n        \"name\": \"\\u5143\\u5927-\\u5d07\\u5fb7\",\n        \"phone\": \"04-22333398\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52672651320907,\n          25.044200325643104\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981U\",\n        \"name\": \"\\u5143\\u5927-\\u83ef\\u5c71\",\n        \"phone\": \"02-23223388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.42594759927167,\n          23.5557103152629\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981V\",\n        \"name\": \"\\u5143\\u5927-\\u6c11\\u96c4\",\n        \"phone\": \"05-2268899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53246603970071,\n          25.03527506223581\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981X\",\n        \"name\": \"\\u5143\\u5927-\\u6771\\u9580\",\n        \"phone\": \"02-23959988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54045130724482,\n          22.55665730304923\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981Z\",\n        \"name\": \"\\u5143\\u5927-\\u6f6e\\u5dde\",\n        \"phone\": \"08-7891678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29316036901521,\n          22.966708503857625\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981a\",\n        \"name\": \"\\u5143\\u5927-\\u6b78\\u4ec1\",\n        \"phone\": \"06-3305888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.17789962640872,\n          23.162333499195682\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981e\",\n        \"name\": \"\\u5143\\u5927-\\u4f73\\u91cc\",\n        \"phone\": \"06-7232888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68053540777612,\n          24.105973976002446\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981g\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u91cc\",\n        \"phone\": \"04-24066598\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.49184586796635,\n          22.670010701890977\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981h\",\n        \"name\": \"\\u5143\\u5927-\\u5c4f\\u6771\\u6c11\\u751f\",\n        \"phone\": \"08-7323789\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.46036620497165,\n          23.80131565094799\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981i\",\n        \"name\": \"\\u5143\\u5927-\\u897f\\u87ba\",\n        \"phone\": \"05-5870123\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52539270389224,\n          25.093343474270334\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981j\",\n        \"name\": \"\\u5143\\u5927-\\u58eb\\u6797\",\n        \"phone\": \"02-28830202\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29659603155658,\n          22.629351962991414\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981m\",\n        \"name\": \"\\u5143\\u5927-\\u524d\\u91d1\",\n        \"phone\": \"07-2152888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.482195222677,\n          22.88793592303292\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981n\",\n        \"name\": \"\\u5143\\u5927-\\u65d7\\u5c71\",\n        \"phone\": \"07-6625578\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56157189367383,\n          25.051259367732236\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981p\",\n        \"name\": \"\\u5143\\u5927-\\u677e\\u5c71\",\n        \"phone\": \"02-27535888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49920788792575,\n          25.035922640895617\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981q\",\n        \"name\": \"\\u5143\\u5927-\\u824b\\u823a\",\n        \"phone\": \"02-23363588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.49094267229353,\n          22.677037090104193\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981r\",\n        \"name\": \"\\u5143\\u5927-\\u5c4f\\u5357\",\n        \"phone\": \"08-7361777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29887849966534,\n          23.129475249349383\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981y\",\n        \"name\": \"\\u5143\\u5927-\\u5584\\u5316\",\n        \"phone\": \"06-5830888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96387647046174,\n          24.798954377184888\n        ]\n      },\n      \"properties\": {\n        \"id\": \"981z\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u7d71\",\n        \"phone\": \"03-5226166\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45831886910439,\n          24.988361553569128\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9822\",\n        \"name\": \"\\u5143\\u5927-\\u571f\\u57ce\\u5b78\\u5e9c\",\n        \"phone\": \"02-22635000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.66140911771622,\n          24.146893908777802\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9824\",\n        \"name\": \"\\u5143\\u5927-\\u5411\\u4e0a\",\n        \"phone\": \"04-23028588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3180300589156,\n          23.304821016905027\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9825\",\n        \"name\": \"\\u5143\\u5927-\\u65b0\\u71df\",\n        \"phone\": \"06-6351600\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.23580955026651,\n          22.998791977501494\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9829\",\n        \"name\": \"\\u5143\\u5927-\\u6c38\\u5eb7\",\n        \"phone\": \"06-2215888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.77199598801013,\n          24.6790942277795\n        ]\n      },\n      \"properties\": {\n        \"id\": \"982A\",\n        \"name\": \"\\u5143\\u5927-\\u7f85\\u6771\",\n        \"phone\": \"03-9532888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30555236173936,\n          22.660963029466313\n        ]\n      },\n      \"properties\": {\n        \"id\": \"982B\",\n        \"name\": \"\\u5143\\u5927-\\u535a\\u611b\",\n        \"phone\": \"07-5571133\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3130182404354,\n          22.632484507814564\n        ]\n      },\n      \"properties\": {\n        \"id\": \"982C\",\n        \"name\": \"\\u5143\\u5927-\\u516d\\u5408\",\n        \"phone\": \"07-2364788\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55627991115894,\n          25.04115534988096\n        ]\n      },\n      \"properties\": {\n        \"id\": \"982F\",\n        \"name\": \"\\u5143\\u5927-\\u5fe0\\u5b5d\\u9f0e\\u5bcc\",\n        \"phone\": \"02-87739666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30241070317618,\n          22.616445003020388\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9831\",\n        \"name\": \"\\u5143\\u5927-\\u56db\\u7dad\",\n        \"phone\": \"07-3306666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54914579883872,\n          25.030623215987312\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9833\",\n        \"name\": \"\\u5143\\u5927-\\u6566\\u5316\",\n        \"phone\": \"02-27541566\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22404077448398,\n          24.95730866271839\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9834\",\n        \"name\": \"\\u5143\\u5927-\\u4e2d\\u58e2\",\n        \"phone\": \"03-4227188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.57104956371577,\n          23.95544838587079\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9835\",\n        \"name\": \"\\u5143\\u5927-\\u54e1\\u6797\\u4e2d\\u5c71\",\n        \"phone\": \"04-8358131\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30188897787089,\n          23.56816788354149\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9837\",\n        \"name\": \"\\u5143\\u5927-\\u5317\\u6e2f\",\n        \"phone\": \"05-7838222\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.7088491559113,\n          24.250925724265016\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9838\",\n        \"name\": \"\\u5143\\u5927-\\u8c50\\u539f\",\n        \"phone\": \"04-25252511\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.22340647150024,\n          22.987364751444712\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983B\",\n        \"name\": \"\\u5143\\u5927-\\u6797\\u68ee\",\n        \"phone\": \"06-2745088\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.45965701041843,\n          25.045190325865892\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983G\",\n        \"name\": \"\\u5143\\u5927-\\u4e0a\\u65b0\\u838a\",\n        \"phone\": \"02-89911188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.18255473442218,\n          23.22913238402248\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983K\",\n        \"name\": \"\\u5143\\u5927-\\u5b78\\u7532\",\n        \"phone\": \"06-7838989\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56731982932799,\n          24.98833379889497\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983M\",\n        \"name\": \"\\u5143\\u5927-\\u6728\\u67f5\",\n        \"phone\": \"02-86619168\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54605272814307,\n          25.02487473960709\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983N\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u5b89\",\n        \"phone\": \"02-27541866\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.90686951336676,\n          24.685105555205865\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983U\",\n        \"name\": \"\\u5143\\u5927-\\u982d\\u4efd\",\n        \"phone\": \"037-683168\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.87885694367807,\n          24.68660772477575\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983V\",\n        \"name\": \"\\u5143\\u5927-\\u7af9\\u5357\",\n        \"phone\": \"03-7477890\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.69035325170306,\n          24.113157987870032\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983W\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u91cc\\u5fb7\\u82b3\",\n        \"phone\": \"04-24833000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.33112188548711,\n          22.595700098097105\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983Z\",\n        \"name\": \"\\u5143\\u5927-\\u9cf3\\u5c71\",\n        \"phone\": \"07-8133066\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.08932764012906,\n          24.730103429690054\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983f\",\n        \"name\": \"\\u5143\\u5927-\\u7af9\\u6771\",\n        \"phone\": \"03-5952166\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.64758896059143,\n          24.225156142546776\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983i\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u96c5\",\n        \"phone\": \"04-25608888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54389216881472,\n          25.037398245226957\n        ]\n      },\n      \"properties\": {\n        \"id\": \"983j\",\n        \"name\": \"\\u5143\\u5927-\\u4ec1\\u611b\",\n        \"phone\": \"02-27067777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53951732309214,\n          24.972990270244917\n        ]\n      },\n      \"properties\": {\n        \"id\": \"984C\",\n        \"name\": \"\\u5143\\u5927-\\u65b0\\u5e97\\u4e2d\\u6b63\",\n        \"phone\": \"02-29155588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51205867082078,\n          24.99098061940405\n        ]\n      },\n      \"properties\": {\n        \"id\": \"984E\",\n        \"name\": \"\\u5143\\u5927-\\u5357\\u52e2\\u89d2\",\n        \"phone\": \"02-86689955\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54142394764395,\n          24.99360455456848\n        ]\n      },\n      \"properties\": {\n        \"id\": \"984H\",\n        \"name\": \"\\u5143\\u5927-\\u666f\\u7f8e\",\n        \"phone\": \"02-86638886\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5143904411381,\n          25.04591436900629\n        ]\n      },\n      \"properties\": {\n        \"id\": \"984K\",\n        \"name\": \"\\u5143\\u5927-\\u9928\\u524d\",\n        \"phone\": \"02-23113030\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.57512766177736,\n          25.040712438154998\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9852\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u677e\\u5c71\",\n        \"phone\": \"02-87805277\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.65070971062595,\n          24.146867577739748\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9853\",\n        \"name\": \"\\u5143\\u5927-\\u5357\\u5c6f\",\n        \"phone\": \"04-23269999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6943371433014,\n          24.1707811821158\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9854\",\n        \"name\": \"\\u5143\\u5927-\\u6587\\u5fc3\\u8208\\u5b89\",\n        \"phone\": \"04-22339983\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.60138394292562,\n          23.98972249563759\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9856\",\n        \"name\": \"\\u5143\\u5927-\\u82b1\\u84ee\",\n        \"phone\": \"03-8357588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.48007059152195,\n          25.08065766454484\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9857\",\n        \"name\": \"\\u5143\\u5927-\\u6771\\u8606\",\n        \"phone\": \"02-22886699\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.21177767740993,\n          24.863535531239435\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9858\",\n        \"name\": \"\\u5143\\u5927-\\u9f8d\\u6f6d\",\n        \"phone\": \"03-4808699\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96455002852625,\n          24.812200331763783\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9859\",\n        \"name\": \"\\u5143\\u5927-\\u65b0\\u7af9\\u7d93\\u570b\",\n        \"phone\": \"03-5359888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.35236736167732,\n          22.62681319938396\n        ]\n      },\n      \"properties\": {\n        \"id\": \"985C\",\n        \"name\": \"\\u5143\\u5927-\\u9cf3\\u4e2d\",\n        \"phone\": \"07-7199889\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54310362458759,\n          25.052067367514937\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9862\",\n        \"name\": \"\\u5143\\u5927-\\u5357\\u4eac\",\n        \"phone\": \"02-27188888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53172803111879,\n          25.026139630387227\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9863\",\n        \"name\": \"\\u5143\\u5927-\\u65b0\\u548c\\u5e73\",\n        \"phone\": \"02-23687733\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.59187437157861,\n          25.068678818075647\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9867\",\n        \"name\": \"\\u5143\\u5927-\\u5317\\u6210\\u529f\",\n        \"phone\": \"02-27928288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.665768211179,\n          24.173202216300034\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9868\",\n        \"name\": \"\\u5143\\u5927-\\u6587\\u5fc3\",\n        \"phone\": \"04-22932233\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.44650213814303,\n          25.03835493541679\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9869\",\n        \"name\": \"\\u5143\\u5927-\\u65b0\\u76db\",\n        \"phone\": \"02-29969966\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.74059732807495,\n          25.130152899897983\n        ]\n      },\n      \"properties\": {\n        \"id\": \"986K\",\n        \"name\": \"\\u5143\\u5927-\\u57fa\\u9686\\u5b5d\\u4e8c\",\n        \"phone\": \"02-24202626\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55627991115894,\n          25.04115534988096\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9871\",\n        \"name\": \"\\u5143\\u5927-\\u5fe0\\u5b5d\",\n        \"phone\": \"02-27766288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54383571739243,\n          25.06261647561631\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9872\",\n        \"name\": \"\\u5143\\u5927-\\u5fa9\\u5317\",\n        \"phone\": \"02-25095998\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50906087687882,\n          25.041934678266177\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9873\",\n        \"name\": \"\\u5143\\u5927-\\u897f\\u9580\",\n        \"phone\": \"02-23893388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50677295613193,\n          24.999511050886337\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9874\",\n        \"name\": \"\\u5143\\u5927-\\u96d9\\u548c\",\n        \"phone\": \"02-22483388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.44213212468335,\n          24.976224229963208\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9875\",\n        \"name\": \"\\u5143\\u5927-\\u571f\\u57ce\\u6c38\\u5be7\",\n        \"phone\": \"02-22709191\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19386324555818,\n          22.995001078540803\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9878\",\n        \"name\": \"\\u5143\\u5927-\\u91d1\\u83ef\",\n        \"phone\": \"06-2207999\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47906965502085,\n          25.017654458969236\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9879\",\n        \"name\": \"\\u5143\\u5927-\\u677f\\u6a4b\\u4e09\\u6c11\",\n        \"phone\": \"02-29588887\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.14691032416096,\n          24.910099363319063\n        ]\n      },\n      \"properties\": {\n        \"id\": \"987A\",\n        \"name\": \"\\u5143\\u5927-\\u694a\\u6885\",\n        \"phone\": \"03-4882688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54670652354615,\n          23.71110648713886\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9884\",\n        \"name\": \"\\u5143\\u5927-\\u93ae\\u5317\",\n        \"phone\": \"05-5362088\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51456363010979,\n          25.00995109209561\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9888\",\n        \"name\": \"\\u5143\\u5927-\\u946b\\u6c38\\u548c\",\n        \"phone\": \"02-82311333\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.57316644637287,\n          23.968898328933115\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9889\",\n        \"name\": \"\\u5143\\u5927-\\u54e1\\u6797\",\n        \"phone\": \"04-8341188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.29609209187994,\n          25.023430299770137\n        ]\n      },\n      \"properties\": {\n        \"id\": \"988B\",\n        \"name\": \"\\u5143\\u5927-\\u6843\\u5712\",\n        \"phone\": \"03-3268777\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49101380313246,\n          25.05974445614952\n        ]\n      },\n      \"properties\": {\n        \"id\": \"988C\",\n        \"name\": \"\\u5143\\u5927-\\u4e09\\u91cd\",\n        \"phone\": \"02-89857788\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.36532372998435,\n          25.058892685177323\n        ]\n      },\n      \"properties\": {\n        \"id\": \"988V\",\n        \"name\": \"\\u5143\\u5927-\\u9577\\u5e9a\",\n        \"phone\": \"(03)397-8787\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52112704585363,\n          25.007700176530903\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9891\",\n        \"name\": \"\\u5143\\u5927-\\u6c38\\u548c\",\n        \"phone\": \"02-29201234\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.4962895092327,\n          22.68546307453623\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9892\",\n        \"name\": \"\\u5143\\u5927-\\u5c4f\\u6771\",\n        \"phone\": \"08-7385555\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52500393091108,\n          25.105764576725797\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9893\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u5929\\u6bcd\",\n        \"phone\": \"02-28312888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31586436350642,\n          24.991132083212282\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9894\",\n        \"name\": \"\\u5143\\u5927-\\u6843\\u8208\",\n        \"phone\": \"03-3327700\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.21792835003272,\n          22.98471084307604\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9896\",\n        \"name\": \"\\u5143\\u5927-\\u53f0\\u5357\",\n        \"phone\": \"06-2741866\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.44518717934065,\n          24.985541502671243\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9897\",\n        \"name\": \"\\u5143\\u5927-\\u571f\\u57ce\",\n        \"phone\": \"02-22708369\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.4465227829294,\n          25.03964486176146\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9898\",\n        \"name\": \"\\u5143\\u5927-\\u65b0\\u838a\",\n        \"phone\": \"02-29977123\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.44092193410515,\n          25.169566180300205\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9899\",\n        \"name\": \"\\u5143\\u5927-\\u6de1\\u6c34\",\n        \"phone\": \"02-26251966\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49856954246648,\n          25.131038726484828\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989A\",\n        \"name\": \"\\u5143\\u5927-\\u5317\\u6295\",\n        \"phone\": \"02-28961212\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.66012382637193,\n          24.156273525941895\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989B\",\n        \"name\": \"\\u5143\\u5927-\\u53f0\\u4e2d\\u4e2d\\u6e2f\",\n        \"phone\": \"04-23289000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46012221499636,\n          25.007961367307573\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989C\",\n        \"name\": \"\\u5143\\u5927-\\u677f\\u6a4b\",\n        \"phone\": \"02-29638000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.28924485940607,\n          22.683810845577522\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989D\",\n        \"name\": \"\\u5143\\u5927-\\u5de6\\u71df\",\n        \"phone\": \"07-5878899\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68224263773618,\n          23.974064312940165\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989E\",\n        \"name\": \"\\u5143\\u5927-\\u8349\\u5c6f\",\n        \"phone\": \"049-2354506\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.31665395364739,\n          22.647671995386883\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989F\",\n        \"name\": \"\\u5143\\u5927-\\u9ad8\\u96c4\",\n        \"phone\": \"07-3855678\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51872124233834,\n          25.052873731025965\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989G\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u540c\",\n        \"phone\": \"02-25598585\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46986505652634,\n          25.083415706412673\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989I\",\n        \"name\": \"\\u5143\\u5927-\\u8606\\u6d32\",\n        \"phone\": \"02-22891199\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.54593928525739,\n          24.0835049428733\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989J\",\n        \"name\": \"\\u5143\\u5927-\\u5f70\\u5316\\u6c11\\u751f\",\n        \"phone\": \"04-7261988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.31114203803266,\n          24.99250801518787\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989L\",\n        \"name\": \"\\u5143\\u5927-\\u6210\\u529f\",\n        \"phone\": \"03-3353399\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.59330144601653,\n          25.083048642448958\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989N\",\n        \"name\": \"\\u5143\\u5927-\\u5167\\u6e56\",\n        \"phone\": \"02-27933636\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5492885497475,\n          25.04056811116412\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989P\",\n        \"name\": \"\\u5143\\u5927-\\u6566\\u5357\",\n        \"phone\": \"02-27752121\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.65378841138279,\n          25.062486149734227\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989Q\",\n        \"name\": \"\\u5143\\u5927-\\u6c50\\u6b62\",\n        \"phone\": \"02-26482277\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43157897893857,\n          24.05561736206507\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989S\",\n        \"name\": \"\\u5143\\u5927-\\u9e7f\\u6e2f\",\n        \"phone\": \"04-7751211\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.62267036454291,\n          24.342577900905663\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989U\",\n        \"name\": \"\\u5143\\u5927-\\u5927\\u7532\",\n        \"phone\": \"04-26883399\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.49626518131451,\n          25.068208688513103\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989V\",\n        \"name\": \"\\u5143\\u5927-\\u5317\\u4e09\\u91cd\",\n        \"phone\": \"02-29713311\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.72246313453645,\n          24.25504427945391\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989W\",\n        \"name\": \"\\u5143\\u5927-\\u8c50\\u539f\\u7ad9\\u524d\",\n        \"phone\": \"04-25204888\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.56474618054457,\n          25.05976408947412\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989X\",\n        \"name\": \"\\u5143\\u5927-\\u6c11\\u751f\",\n        \"phone\": \"02-87872118\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.74758091169237,\n          25.12916517497072\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989Y\",\n        \"name\": \"\\u5143\\u5927-\\u57fa\\u9686\",\n        \"phone\": \"02-24246688\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.35663738406656,\n          22.5670365332859\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989Z\",\n        \"name\": \"\\u5143\\u5927-\\u5c0f\\u6e2f\",\n        \"phone\": \"07-8020068\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.65285200443665,\n          24.44029030508318\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989a\",\n        \"name\": \"\\u5143\\u5927-\\u82d1\\u88e1\",\n        \"phone\": \"037869779\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68569512829312,\n          24.169859885786213\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989d\",\n        \"name\": \"\\u5143\\u5927-\\u5317\\u5c6f\",\n        \"phone\": \"04-22389555\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.50227584108332,\n          24.999659793012313\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989e\",\n        \"name\": \"\\u5143\\u5927-\\u4e2d\\u548c\",\n        \"phone\": \"02-22452299\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.45775568814264,\n          22.470232608294967\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989f\",\n        \"name\": \"\\u5143\\u5927-\\u6771\\u6e2f\",\n        \"phone\": \"08-8338558\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.4472900045035,\n          23.48344000347856\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989g\",\n        \"name\": \"\\u5143\\u5927-\\u5609\\u7fa9\",\n        \"phone\": \"05-2237666\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.4232781473561,\n          24.991027994542804\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989j\",\n        \"name\": \"\\u5143\\u5927-\\u6a39\\u6797\",\n        \"phone\": \"02-26759585\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52536702327014,\n          25.023505222209298\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989k\",\n        \"name\": \"\\u5143\\u5927-\\u53e4\\u4ead\",\n        \"phone\": \"02-23698877\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.57234211793559,\n          25.04110495392839\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989m\",\n        \"name\": \"\\u5143\\u5927-\\u4fe1\\u7fa9\",\n        \"phone\": \"02-87878732\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54367316718195,\n          25.05204949387523\n        ]\n      },\n      \"properties\": {\n        \"id\": \"989z\",\n        \"name\": \"\\u5143\\u5927-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"02-2718-1234\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.3338516527339,\n          22.602118135364492\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A61\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u9cf3\\u5c71\",\n        \"phone\": \"07-726-3000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.48957035317076,\n          22.675317402185232\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A69\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5c4f\\u6771\",\n        \"phone\": \"08-765-5457\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.96555674858239,\n          23.96643271379503\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A79\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u57d4\\u91cc\",\n        \"phone\": \"049-298-9988\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51313466224889,\n          25.046858563293043\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A88\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u570b\\u969b\\u8b49\\u5238\",\n        \"phone\": \"23123866\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54850053728308,\n          25.05135358589174\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A89\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u6566\\u5317\",\n        \"phone\": \"02-81615000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55001154951691,\n          25.02710616910999\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A8F\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u6566\\u5357\",\n        \"phone\": \"02-2377-8355\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.57761139009415,\n          25.04769134038912\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A91\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u677e\\u5c71\",\n        \"phone\": \"02-2766-3315\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53327426552308,\n          25.053814658500837\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A92\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u842c\\u76db\",\n        \"phone\": \"02-2501-1451\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51159363625914,\n          25.044357688075525\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A96\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u535a\\u611b\",\n        \"phone\": \"02-2311-9144\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.9673082706535,\n          24.808101880081118\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A97\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u65b0\\u7af9\",\n        \"phone\": \"03-526-8198\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.19704245102339,\n          25.066318723490017\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A98\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5927\\u5712\",\n        \"phone\": \"03-385-3998\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.22470864481569,\n          24.959591477704972\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A99\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u4e2d\\u58e2\",\n        \"phone\": \"03-422-4800\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.77195700333975,\n          24.677884996991274\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9A\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u7f85\\u6771\",\n        \"phone\": \"03-956-7181\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51063566026197,\n          25.00199136294024\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9B\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u4e2d\\u548c\",\n        \"phone\": \"02-2231-3453\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.57982188951588,\n          23.96310714236305\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9C\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u54e1\\u6797\",\n        \"phone\": \"04-836-7338\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55546283202098,\n          25.041168599396077\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9D\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5fe0\\u5b5d\",\n        \"phone\": \"02-2771-6588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.4609072531808,\n          25.009002802187222\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9E\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u677f\\u6a4b\",\n        \"phone\": \"02-2959-3200\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52726207969647,\n          25.104805500993297\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9G\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5929\\u6bcd\",\n        \"phone\": \"02-8866-1992\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.4521710781931,\n          25.045812379092894\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9H\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u65b0\\u838a\",\n        \"phone\": \"02-8992-2118\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.47103075976142,\n          25.027958646705972\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9J\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u677f\\u65b0\",\n        \"phone\": \"02-2253-3458\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.48594477998098,\n          25.06494228283764\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9K\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u4e09\\u91cd\",\n        \"phone\": \"02-2981-0112\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.70963092562253,\n          24.250508434758146\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9L\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u53f0\\u4e2d\",\n        \"phone\": \"04-2202-2940\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.68775039480101,\n          23.907078197370453\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9M\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5357\\u6295\",\n        \"phone\": \"049-220-1932\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.29713408245324,\n          25.017871405255995\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9N\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u6843\\u76db\",\n        \"phone\": \"03-357-5585\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.01009841235378,\n          24.827897641481012\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9P\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u7af9\\u5317\",\n        \"phone\": \"03-553-8388\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.71834915989838,\n          24.250155167830545\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9Q\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u8c50\\u539f\",\n        \"phone\": \"04-2528-2188\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55108090979405,\n          25.03341709476413\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9R\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u4fe1\\u7fa9\",\n        \"phone\": \"02-2705-6588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.53826022613552,\n          25.051780418217778\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9S\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5357\\u4eac\",\n        \"phone\": \"02-2508-2335\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.52377471739418,\n          25.049447283756848\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9U\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u4e2d\\u6b63\",\n        \"phone\": \"02-2531-3135\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6395557473533,\n          24.15913060995087\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9W\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5e02\\u653f\",\n        \"phone\": \"04-2254-8935\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.9895408359819,\n          24.800064829646068\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9X\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u7af9\\u79d1\",\n        \"phone\": \"03-575-2000\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.46804673041318,\n          25.012823356377147\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9Y\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u677f\\u76db\",\n        \"phone\": \"02-2958-6918\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.5421963677237,\n          25.06254940663512\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9Z\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5fa9\\u8208\",\n        \"phone\": \"02-2502-8588\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.30512137628241,\n          22.61333762243996\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9a\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u82d3\\u96c5\",\n        \"phone\": \"07-537-5800\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.43591682554879,\n          23.707401143107862\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9b\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u864e\\u5c3e\",\n        \"phone\": \"05-636-5288\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.23284626403137,\n          23.009827415477957\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9c\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u6c38\\u5eb7\",\n        \"phone\": \"06-302-5982\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.51793123965273,\n          25.03010774323751\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9d\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u53e4\\u4ead\",\n        \"phone\": \"02-2321-8345\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.32808160869101,\n          22.629694426770463\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9e\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u9ad8\\u96c4\",\n        \"phone\": \"07-723-2800\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.6463508053759,\n          24.15674542801355\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9f\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u4e2d\\u76db\",\n        \"phone\": \"04-2258-7220\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.55958901545932,\n          25.085129327240065\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9g\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5167\\u6e56\",\n        \"phone\": \"02-2657-1998\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.19727671390498,\n          22.986223429449304\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9h\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u53f0\\u5357\",\n        \"phone\": \"06-224-9998\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.54292665851061,\n          24.978014039935744\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9i\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u65b0\\u5e97\",\n        \"phone\": \"02-2911-6395\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.44602999905491,\n          23.479710004329007\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9j\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5609\\u7fa9\",\n        \"phone\": \"05-229-1345\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5403739761311,\n          22.551911995873866\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9q\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u6f6e\\u5dde\",\n        \"phone\": \"08-789-0122\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.29690474406264,\n          22.66047851597464\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9r\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5317\\u9ad8\\u96c4\",\n        \"phone\": \"07-555-0455\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          120.5409354863066,\n          24.078109090527274\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9s\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u5f70\\u5316\",\n        \"phone\": \"04-722-4976\"\n      }\n    },\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"Point\",\n        \"coordinates\": [\n          121.30792079267425,\n          24.990936296998363\n        ]\n      },\n      \"properties\": {\n        \"id\": \"9A9x\",\n        \"name\": \"\\u6c38\\u8c50\\u91d1-\\u6843\\u5712\",\n        \"phone\": \"03-335-2581\"\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "twnews/res/ticksmap-template.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<title>分點進出買賣對照</title>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.5.1/leaflet.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.5.1/leaflet.css\" />\n<style>\n#banner {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    height: 30px;\n    color: #fff;\n    background: #000;\n    text-align: center;\n    line-height: 30px;\n}\n\n#bidlabel, #asklabel {\n    position: absolute;\n    top: 30px;\n    height: 30px;\n    color: #fff;\n    text-align: center;\n    line-height: 30px;\n}\n\n#bidlabel {\n    left: 0;\n    right: 50%;\n    background: #700;\n}\n\n#asklabel {\n    left: 50%;\n    right: 0;\n    background: #070;\n}\n\n#bidmap, #askmap {\n    position: absolute;\n    top: 60px;\n    bottom: 0;\n}\n\n#bidmap {\n    left: 0;\n    right: 50%;\n    border: 0px dotted #000;\n    border-right-width: 2px;\n}\n\n#askmap {\n    left: 50%;\n    right: 0;\n}\n</style>\n</head>\n<body>\n<div id=\"banner\">__SECURITY_ID__ __SECURITY_NAME__ (__DATE__)</div>\n<div id=\"bidlabel\">買進熱點</div>\n<div id=\"asklabel\">賣出熱點</div>\n<div id=\"bidmap\"></div>\n<div id=\"askmap\"></div>\n<script>\n!function(){\"use strict\";function t(i){return this instanceof t?(this._canvas=i=\"string\"==typeof i?document.getElementById(i):i,this._ctx=i.getContext(\"2d\"),this._width=i.width,this._height=i.height,this._max=1,void this.clear()):new t(i)}t.prototype={defaultRadius:25,defaultGradient:{.4:\"blue\",.6:\"cyan\",.7:\"lime\",.8:\"yellow\",1:\"red\"},data:function(t,i){return this._data=t,this},max:function(t){return this._max=t,this},add:function(t){return this._data.push(t),this},clear:function(){return this._data=[],this},radius:function(t,i){i=i||15;var a=this._circle=document.createElement(\"canvas\"),s=a.getContext(\"2d\"),e=this._r=t+i;return a.width=a.height=2*e,s.shadowOffsetX=s.shadowOffsetY=200,s.shadowBlur=i,s.shadowColor=\"black\",s.beginPath(),s.arc(e-200,e-200,t,0,2*Math.PI,!0),s.closePath(),s.fill(),this},gradient:function(t){var i=document.createElement(\"canvas\"),a=i.getContext(\"2d\"),s=a.createLinearGradient(0,0,0,256);i.width=1,i.height=256;for(var e in t)s.addColorStop(e,t[e]);return a.fillStyle=s,a.fillRect(0,0,1,256),this._grad=a.getImageData(0,0,1,256).data,this},draw:function(t){this._circle||this.radius(this.defaultRadius),this._grad||this.gradient(this.defaultGradient);var i=this._ctx;i.clearRect(0,0,this._width,this._height);for(var a,s=0,e=this._data.length;e>s;s++)a=this._data[s],i.globalAlpha=Math.max(a[2]/this._max,t||.05),i.drawImage(this._circle,a[0]-this._r,a[1]-this._r);var n=i.getImageData(0,0,this._width,this._height);return this._colorize(n.data,this._grad),i.putImageData(n,0,0),this},_colorize:function(t,i){for(var a,s=3,e=t.length;e>s;s+=4)a=4*t[s],a&&(t[s-3]=i[a],t[s-2]=i[a+1],t[s-1]=i[a+2])}},window.simpleheat=t}()\n\n!function(){\"use strict\";L.HeatLayer=(L.Layer?L.Layer:L.Class).extend({initialize:function(t,i){if(\"FeatureCollection\"===t.type){var a,s=\"weight\";for(a in void 0!==i&&void 0!==i.heat_property&&(s=i.heat_property),this._latlngs=[],t.features){var e=t.features[a],n=0;void 0!==e.properties[s]&&(n=e.properties[s]),this._latlngs.push([e.geometry.coordinates[1],e.geometry.coordinates[0],n])}}else this._latlngs=t;L.setOptions(this,i)},setLatLngs:function(t){return this._latlngs=t,this.redraw()},addLatLng:function(t){return this._latlngs.push(t),this.redraw()},setOptions:function(t){return L.setOptions(this,t),this._heat&&this._updateOptions(),this.redraw()},redraw:function(){return this._heat&&!this._frame&&this._map&&!this._map._animating&&(this._frame=L.Util.requestAnimFrame(this._redraw,this)),this},onAdd:function(t){this._map=t,this._canvas||this._initCanvas(),this.options.pane?this.getPane().appendChild(this._canvas):t._panes.overlayPane.appendChild(this._canvas),t.on(\"moveend\",this._reset,this),t.options.zoomAnimation&&L.Browser.any3d&&t.on(\"zoomanim\",this._animateZoom,this),this._reset()},onRemove:function(t){this.options.pane?this.getPane().removeChild(this._canvas):t.getPanes().overlayPane.removeChild(this._canvas),t.off(\"moveend\",this._reset,this),t.options.zoomAnimation&&t.off(\"zoomanim\",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},_initCanvas:function(){var t=this._canvas=L.DomUtil.create(\"canvas\",\"leaflet-heatmap-layer leaflet-layer\"),i=L.DomUtil.testProp([\"transformOrigin\",\"WebkitTransformOrigin\",\"msTransformOrigin\"]);t.style[i]=\"50% 50%\";var a=this._map.getSize();t.width=a.x,t.height=a.y;var s=this._map.options.zoomAnimation&&L.Browser.any3d;L.DomUtil.addClass(t,\"leaflet-zoom-\"+(s?\"animated\":\"hide\")),this._heat=simpleheat(t),this._updateOptions()},_updateOptions:function(){this._heat.radius(this.options.radius||this._heat.defaultRadius,this.options.blur),this.options.gradient&&this._heat.gradient(this.options.gradient),this.options.max&&this._heat.max(this.options.max)},_reset:function(){var t=this._map.containerPointToLayerPoint([0,0]);L.DomUtil.setPosition(this._canvas,t);var i=this._map.getSize();this._heat._width!==i.x&&(this._canvas.width=this._heat._width=i.x),this._heat._height!==i.y&&(this._canvas.height=this._heat._height=i.y),this._redraw()},_redraw:function(){if(this._map){var t,i,a,s,e,n,o,h,r,_=[],m=this._heat._r,l=this._map.getSize(),p=new L.Bounds(L.point([-m,-m]),l.add([m,m])),d=void 0===this.options.max?1:this.options.max,f=void 0===this.options.maxZoom?this._map.getMaxZoom():this.options.maxZoom,g=1/Math.pow(2,Math.max(0,Math.min(f-this._map.getZoom(),12))),u=m/2,c=[],v=this._map._getMapPanePos(),y=v.x%u,w=v.y%u;for(t=0,i=this._latlngs.length;t<i;t++){if(a=this._map.latLngToContainerPoint(this._latlngs[t]),p.contains(a))e=Math.floor((a.x-y)/u)+2,n=Math.floor((a.y-w)/u)+2,r=(void 0!==this._latlngs[t].alt?this._latlngs[t].alt:void 0!==this._latlngs[t][2]?+this._latlngs[t][2]:1)*g,c[n]=c[n]||[],(s=c[n][e])?(s[0]=(s[0]*s[2]+a.x*r)/(s[2]+r),s[1]=(s[1]*s[2]+a.y*r)/(s[2]+r),s[2]+=r):c[n][e]=[a.x,a.y,r]}for(t=0,i=c.length;t<i;t++)if(c[t])for(o=0,h=c[t].length;o<h;o++)(s=c[t][o])&&_.push([Math.round(s[0]),Math.round(s[1]),Math.min(s[2],d)]);this._heat.data(_).draw(this.options.minOpacity),this._frame=null}},_animateZoom:function(t){var i=this._map.getZoomScale(t.zoom),a=this._map._getCenterOffset(t.center)._multiplyBy(-i).subtract(this._map._getMapPanePos());L.DomUtil.setTransform?L.DomUtil.setTransform(this._canvas,a,i):this._canvas.style[L.DomUtil.TRANSFORM]=L.DomUtil.getTranslateString(a)+\" scale(\"+i+\")\"}}),L.heatLayer=function(t,i){return new L.HeatLayer(t,i)}}();\n\n!function(){\n    function build_heatmap(item) {\n        var feature_collection = __FEATURE_COLLECTION__;\n        var tile_source = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png';\n        var tile_attrib = '&copy; <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors';\n        var dom_id = item + \"map\";\n        var map = L.map(dom_id).setView([23.6, 121], 8);\n        L.tileLayer(\n            tile_source,\n            { attribution: tile_attrib }\n        ).addTo(map);\n        L.heatLayer(\n            feature_collection,\n            { \"heat_property\": item }\n        ).addTo(map);\n    }\n\n    build_heatmap(\"bid\");\n    build_heatmap(\"ask\");\n}();\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "twnews/search.py",
    "content": "\"\"\"\n新聞搜尋模組\n\"\"\"\n\nimport re\nimport time\nimport urllib.parse\nfrom string import Template\nfrom datetime import datetime\n\nfrom bs4 import BeautifulSoup\nfrom bs4.element import Tag\n\nimport twnews.common\nfrom twnews.soup import NewsSoup\n\ndef visit_dict(dict_node, path):\n    \"\"\"\n    用 CSS Selector 的形式拜訪 dict\n    \"\"\"\n    keys = []\n    if path != '':\n        keys = path.split(' > ')\n    visited = dict_node\n    for key in keys:\n        visited = visited[key]\n    return visited\n\ndef filter_duplicated(results):\n    \"\"\"\n    以連結為鍵值去重複化\n    \"\"\"\n    filtered = []\n    logger = twnews.common.get_logger()\n\n    for (cidx, result) in enumerate(results):\n        duplicated = False\n        pidx = -1\n        for pidx in range(cidx):\n            previous = results[pidx]\n            if result['link'] == previous['link']:\n                duplicated = True\n                break\n\n        if not duplicated:\n            filtered.append(result)\n        else:\n            logger.warning('查詢結果的 %d, %d 筆重複，新聞網址 %s', cidx, pidx, result['link'])\n\n    return filtered\n\nclass NewsSearchException(Exception):\n    \"\"\"\n    新聞搜尋例外\n    \"\"\"\n\nclass NewsSearch:\n    \"\"\"\n    新聞搜尋器\n    \"\"\"\n\n    def __init__(self, channel, limit=25, beg_date=None, end_date=None, proxy_first=False):\n        \"\"\"\n        配置新聞搜尋器\n        \"\"\"\n\n        # pylint: disable=too-many-arguments\n\n        # 防止用中時搜尋\n        if channel == 'chinatimes':\n            msg = '頻道 {} 不支援搜尋功能'.format(channel)\n            raise NewsSearchException(msg)\n\n        # 防止開始日期和結束日期只設定了一個\n        if beg_date is None or end_date is None:\n            if end_date is not None:\n                msg = '遺漏了開始日期'\n                raise NewsSearchException(msg)\n            if beg_date is not None:\n                msg = '遺漏了結束日期'\n                raise NewsSearchException(msg)\n\n        # 防止開始日期和結束日期格式錯誤\n        self.params = {\n            'beg_date': None,\n            'end_date': None,\n            'channel': channel,\n            'limit': limit,\n            'proxy_first': proxy_first\n        }\n        try:\n            if beg_date is not None:\n                self.params['beg_date'] = datetime.strptime(beg_date, '%Y-%m-%d')\n            if end_date is not None:\n                self.params['end_date'] = datetime.strptime(end_date, '%Y-%m-%d')\n        except ValueError:\n            msg = '日期必須是 ISO 格式 (yyyy-mm-dd)'\n            raise NewsSearchException(msg)\n\n        # 防止開始日期大於結束日期\n        if self.params['beg_date'] is not None:\n            delta = self.params['end_date'] - self.params['beg_date']\n            if delta.days < 0:\n                msg = '開始日期必須小於或等於結束日期'\n                raise NewsSearchException(msg)\n            if delta.days > 90 and channel == 'ltn':\n                msg = '頻道 {} 的日期條件必須在 90 天內'.format(channel)\n                raise NewsSearchException(msg)\n\n        self.conf = twnews.common.get_channel_conf(channel, 'search')\n        self.context = None\n        self.result = {\n            'pages': 0,\n            'elapsed': 0,\n            'items': []\n        }\n        self.url_prefix = {\n            'host': '',\n            'base': ''\n        }\n\n    def by_keyword(self, keyword, title_only=False):\n        \"\"\"\n        關鍵字搜尋\n        \"\"\"\n\n        # pylint: disable=fixme\n\n        logger = twnews.common.get_logger()\n        page = 1\n        results = []\n        no_more = False\n        begin_time = time.time()\n\n        # 如果蘋果和自由以外的媒體有設定日期範圍，先跳到合適的頁數\n        # -   支援: 東森、聯合\n        # - 不支援: 三立、中央社\n        # TODO: 三立、中央社研擬假設 500 頁的二分翻頁法\n        if self.params['beg_date'] is not None and self.params['channel'] in ['ettoday', 'udn']:\n            # 東森、聯合採取二分翻頁法\n            page = self.__flip_to_end_date(keyword)\n\n        while not no_more and len(results) < self.params['limit']:\n            self.__load_page(keyword, page)\n\n            # 拆查詢結果\n            result_nodes = self.__result_nodes()\n            result_count = len(result_nodes)\n            logger.info('第 %d 頁: 有 %d 筆搜尋結果', page, result_count)\n            if result_count > 0:\n                for node in result_nodes:\n                    date_inst = self.__parse_date_node(node)\n                    if self.params['beg_date'] is not None and \\\n                       self.params['channel'] not in ['appledaily', 'ltn']:\n                        # 過濾開頭超過日期範圍的項目\n                        if date_inst > self.params['end_date']:\n                            continue\n                        # 過濾結尾超過日期範圍的項目\n                        if date_inst < self.params['beg_date']:\n                            no_more = True\n                            break\n\n                    title = self.__parse_title_node(node)\n                    link = self.__parse_link_node(node)\n                    if (not title_only) or (keyword in title):\n                        results.append({\n                            \"title\": title,\n                            \"link\": link,\n                            'date': date_inst\n                        })\n                        if len(results) == self.params['limit']:\n                            break\n            else:\n                no_more = True\n\n            page += 1\n\n        self.result = {\n            'pages': page - 1,\n            'elapsed': time.time() - begin_time,\n            'items': filter_duplicated(results)\n        }\n\n        return self\n\n    def to_dict_list(self):\n        \"\"\"\n        回傳新聞查詢結果\n        \"\"\"\n        return self.result['items']\n\n    def to_soup_list(self):\n        \"\"\"\n        回傳新聞查詢結果的分解器\n        \"\"\"\n        soup_list = []\n        for result in self.result['items']:\n            nsoup = NewsSoup(result['link'], proxy_first=self.params['proxy_first'])\n            soup_list.append(nsoup)\n        return soup_list\n\n    def elapsed(self):\n        \"\"\"\n        耗費時間\n        \"\"\"\n        return self.result['elapsed']\n\n    def pages(self):\n        \"\"\"\n        頁數\n        \"\"\"\n        return self.result['pages']\n\n    def __flip_to_end_date(self, keyword):\n        \"\"\"\n        回傳篩選時間範圍的開始頁數\n        \"\"\"\n\n        page_range = {\n            'lower': 1,\n            'upper': 1000\n        }\n\n        date_range = {\n            'lower': datetime.fromtimestamp(0),\n            'upper': datetime.today()\n        }\n\n        # 取得最大頁數\n        self.__load_page(keyword, 1)\n        node = self.context.select(self.conf['last_page'])[0]\n        if 'page_pattern' in self.conf:\n            match = re.search(self.conf['page_pattern'], node.text)\n            if match:\n                page_range['upper'] = int(match.group(1))\n            else:\n                page_range['upper'] = -1\n        else:\n            try:\n                page_range['upper'] = int(node.text)\n            except ValueError:\n                page_range['upper'] = -1\n\n        if page_range['upper'] == -1:\n            return 1\n\n        # 取第一則搜尋結果的日期\n        date_range['upper'] = self.__parse_date_node(self.__result_nodes()[0])\n        if date_range['upper'] < self.params['end_date']:\n            return 1\n\n        # 取最後一頁最後一則搜尋結果的日期\n        self.__load_page(keyword, page_range['upper'])\n        date_range['lower'] = self.__parse_date_node(self.__result_nodes()[-1])\n        if date_range['lower'] > self.params['end_date']:\n            return -1\n\n        # 起始狀態\n        page_dist = page_range['upper'] - page_range['lower']\n        prev_dist = page_range['upper'] - page_range['lower'] + 1\n        logger = twnews.common.get_logger()\n        logger.info(\n            'page: %d ~ %d, date: %s ~ %s',\n            page_range['lower'],\n            page_range['upper'],\n            date_range['upper'],\n            date_range['lower']\n        )\n\n        # 取中間頁數，檢查是否能縮小範圍\n        # 不能縮小範圍時，表示 page_range 的新聞都有 self.params['end_date'] 這一天的\n        while page_dist < prev_dist:\n            mid_page = (page_range['lower'] + page_range['upper']) // 2\n            self.__load_page(keyword, mid_page)\n            middle_udt = self.__parse_date_node(self.__result_nodes()[0])\n            middle_ldt = self.__parse_date_node(self.__result_nodes()[-1])\n\n            if middle_udt > self.params['end_date']:\n                page_range['lower'] = mid_page\n                date_range['upper'] = middle_udt\n\n            if middle_ldt < self.params['end_date']:\n                page_range['upper'] = mid_page\n                date_range['lower'] = middle_ldt\n\n            prev_dist = page_dist\n            page_dist = page_range['upper'] - page_range['lower']\n            logger.info(\n                'page: %d ~ %d, date: %s ~ %s, mid=%d',\n                page_range['lower'],\n                page_range['upper'],\n                date_range['upper'],\n                date_range['lower'],\n                mid_page\n            )\n\n        return page_range['lower']\n\n    def __load_page(self, keyword, page):\n        # pylint: disable=fixme\n\n        # 組查詢條件\n        replacement = {\n            'PAGE': page,\n            'KEYWORD': urllib.parse.quote_plus(keyword)\n        }\n        url = Template(self.conf['url']).substitute(replacement)\n\n        # 再加上日期範圍\n        if self.params['beg_date'] is not None and self.params['channel'] in ['appledaily', 'ltn']:\n            url += self.params['beg_date'].strftime(self.conf['begin_date_format'])\n            url += self.params['end_date'].strftime(self.conf['end_date_format'])\n\n        # 查詢\n        session = twnews.common.get_session(proxy_first=self.params['proxy_first'])\n        logger = twnews.common.get_logger()\n        logger.info('新聞搜尋 %s', url)\n        resp = session.get(url, allow_redirects=False)\n        if resp.status_code == 200:\n            logger.debug('回應 200 OK')\n            ctype = resp.headers['Content-Type']\n            if 'text/html' in ctype:\n                self.context = BeautifulSoup(resp.text, 'lxml')\n            if 'application/json' in ctype:\n                # TODO: 這裡有時會發生 decode error\n                self.context = resp.json()\n        elif resp.status_code == 404:\n            logger.debug('回應 404 Not Found，視為沒有更多查詢結果')\n            self.context = None\n        else:\n            logger.warning('回應碼: %s', resp.status_code)\n            self.context = None\n\n    def __result_nodes(self):\n        \"\"\"\n        取查詢結果的 soup 或 dict\n        \"\"\"\n        if self.context is not None:\n            if isinstance(self.context, BeautifulSoup):\n                return self.context.select(self.conf['result_node'])\n            return visit_dict(self.context, self.conf['result_node'])\n        return []\n\n    def __parse_title_node(self, result_node):\n        \"\"\"\n        單筆查詢結果範圍內取標題文字\n        \"\"\"\n\n        if isinstance(result_node, Tag):\n            title_node = result_node.select(self.conf['title_node'])[0]\n            title = title_node.text.strip()\n        else:\n            title = visit_dict(result_node, self.conf['title_node'])\n        return title\n\n    def __parse_date_node(self, result_node):\n        \"\"\"\n        單筆查詢結果範圍內取報導日期\n        \"\"\"\n\n        if isinstance(result_node, Tag):\n            date_node = result_node.select(self.conf['date_node'])[0]\n            if 'date_pattern' in self.conf:\n                # DOM node 除了日期還有其他文字\n                match = re.search(self.conf['date_pattern'], date_node.text)\n                date_text = match.group(0)\n            else:\n                # DOM node 只有日期\n                date_text = date_node.text.strip()\n        else:\n            # API 的日期都很乾淨\n            date_text = visit_dict(result_node, self.conf['date_node'])\n\n        date_inst = datetime.strptime(date_text, self.conf['date_format'])\n        return date_inst\n\n    def __parse_link_node(self, result_node):\n        \"\"\"\n        單筆查詢結果範圍內取新聞連結\n        \"\"\"\n        if isinstance(result_node, Tag):\n            link_node = result_node.select(self.conf['link_node'])[0]\n            href = link_node['href']\n        else:\n            href = visit_dict(result_node, self.conf['link_node'])\n\n        # 完整網址\n        if href.startswith('https://'):\n            return href\n\n        # 絕對路徑\n        if href.startswith('/'):\n            if self.url_prefix['host'] == '':\n                match = re.match(r'^https://([^/]+)/', self.conf['url'])\n                self.url_prefix['host'] = match.group(1)\n            return 'https://{}{}'.format(self.url_prefix['host'], href)\n\n        # 相對路徑\n        # 自由的 <head> 有設定 base_url\n        if self.url_prefix['base'] == '':\n            nodes = self.context.select('head > base')\n            if len(nodes) == 1:\n                self.url_prefix['base'] = nodes[0]['href']\n            else:\n                base_end = self.conf['url'].rfind('/')\n                self.url_prefix['base'] = self.conf['url'][0:base_end+1]\n\n        full_url = self.url_prefix['base'] + href\n\n        # 消除三立的 ../\n        # 這段 code 已知在 windows 會出現 C:\\ 在網址中間 (Issue #93)\n        # 原因是 os.path.realpath() 在 windows 上會出現 C:\\\n        # 目前暫時先不處理 ../ 問題, 之後如果再發生, 需要改用替代方法\n        #spos = full_url.find('/', 10)\n        #reduced_url = full_url[0:spos] + os.path.realpath(full_url[spos:])\n        #return reduced_url\n\n        return full_url\n"
  },
  {
    "path": "twnews/soup.py",
    "content": "\"\"\"\n新聞分解模組\n\"\"\"\n\nimport io\nimport re\nimport copy\nimport lzma\nimport hashlib\nimport os\nimport os.path\nfrom datetime import datetime\n\nimport requests\nimport requests.exceptions\nfrom bs4 import BeautifulSoup\n\nimport twnews.common\n\ndef get_cache_filepath(channel, uri):\n    \"\"\"\n    取得快取檔案路徑\n    \"\"\"\n    cache_id = hashlib.md5(uri.encode('ascii')).hexdigest()\n    path = '{}/{}.html.xz'.format(twnews.common.get_cache_dir(channel), cache_id)\n    return path\n\ndef url_follow_redirection(url, proxy_first):\n    \"\"\"\n    取得轉址後的 URL\n    \"\"\"\n    logger = twnews.common.get_logger()\n    session = twnews.common.get_session(proxy_first)\n    old_url = url\n    new_url = ''\n    done = False\n\n    while not done:\n        try:\n            resp = session.head(old_url)\n            status = resp.status_code\n            if status in (301, 302):\n                dest = resp.headers['Location']\n                if dest.startswith('//'):\n                    new_url = 'https:' + dest\n                elif dest.startswith('/'):\n                    new_url = old_url[0:old_url.find('/', 10)] + dest\n                else:\n                    new_url = dest\n                logger.debug('===== 轉址細節 =====')\n                logger.debug('HTTP Status: %d', status)\n                logger.debug('Location: %s', dest)\n                logger.debug('原始 URL: %s', old_url)\n                logger.debug('變更 URL: %s', new_url)\n                logger.debug('====================')\n                old_url = new_url\n            elif status == 200:\n                done = True\n            else:\n                logger.error('檢查轉址過程發生錯誤')\n                logger.error('HTTP Status: %d，', status)\n                logger.error('URL: %s，', old_url)\n                done = True\n        except requests.exceptions.ConnectionError as ex:\n            logger.error('檢查轉址過程連線失敗: %s', ex)\n            done = True\n\n    return old_url\n\ndef url_force_https(url):\n    \"\"\"\n    強制使用 https\n    \"\"\"\n    logger = twnews.common.get_logger()\n    if url.startswith('http://'):\n        new_url = 'https://' + url[7:]\n        logger.debug('原始 URL: %s', url)\n        logger.debug('變更 URL: %s', new_url)\n    else:\n        new_url = url\n\n    # 蘋果地產例外，要喬回來\n    if new_url.startswith('https://home.appledaily.com.tw'):\n        new_url = 'http://home.appledaily.com.tw' + new_url[30:]\n\n    return new_url\n\ndef url_force_ltn_mobile(url):\n    \"\"\"\n    強制使用自由時報行動版\n    \"\"\"\n    logger = twnews.common.get_logger()\n    new_url = url\n    sub_chanels = r'^https://(3c|auto|ec|ent|food|istyle|market|playing|sports).ltn.com.tw/[^m].+'\n    if url.startswith('https://news.ltn.com.tw'):\n        new_url = 'https://m.ltn.com.tw' + url[len('https://news.ltn.com.tw'):]\n        logger.debug('原始 URL: %s', url)\n        logger.debug('變更 URL: %s', new_url)\n    elif re.match(sub_chanels, url):\n        uri_pos = url.find('/', 10)\n        new_url = url[:uri_pos] + '/m' + url[uri_pos:]\n        logger.debug('原始 URL: %s', url)\n        logger.debug('變更 URL: %s', new_url)\n\n    return new_url\n\ndef soup_from_website(url, channel, refresh, proxy_first):\n    \"\"\"\n    網址轉換成 BeautifulSoup 4 物件\n    \"\"\"\n    logger = twnews.common.get_logger()\n    session = twnews.common.get_session(proxy_first)\n\n    # 嘗試使用快取\n    soup = None\n    rawlen = 0\n    uri = url[url.find('/', 10):]\n    path = get_cache_filepath(channel, uri)\n    if os.path.isfile(path) and not refresh:\n        logger.debug('發現快取, URL: %s', url)\n        logger.debug('載入快取, PATH: %s', path)\n        (soup, rawlen) = soup_from_file(path)\n\n    # 下載網頁\n    if soup is None:\n        logger.debug('GET URL: %s', url)\n        try:\n            resp = session.get(url, allow_redirects=False)\n            if resp.status_code == 200:\n                logger.debug('回應 200 OK')\n                if resp.headers['content-type'].find('charset=') == -1:\n                    # #80: 蘋果日報主頻道 Content-Type: text/html\n                    #      因為沒有指定編碼造成 requests 誤判, 使用小伎倆迴避\n                    content = resp.content.decode('utf-8')\n                else:\n                    content = resp.text\n                soup = BeautifulSoup(content, 'lxml')\n                rawlen = len(resp.text.encode('utf-8'))\n                with lzma.open(path, 'wt') as cache_file:\n                    logger.debug('寫入快取: %s', path)\n                    cache_file.write(content)\n            else:\n                logger.warning('回應碼: %d', resp.status_code)\n        except requests.exceptions.ConnectionError as ex:\n            logger.error('連線失敗: %s', ex)\n\n    return (soup, rawlen)\n\ndef soup_from_file(file_path):\n    \"\"\"\n    本地檔案轉換成 BeautifulSoup 4 物件\n    \"\"\"\n    html = None\n    soup = None\n    clen = 0\n\n    if file_path.endswith('.xz'):\n        with lzma.open(file_path, 'rt') as cache_file:\n            html = cache_file.read()\n    else:\n        with open(file_path, 'rt') as cache_file:\n            html = cache_file.read()\n\n    if html is not None:\n        soup = BeautifulSoup(html, 'lxml')\n        clen = len(html.encode('utf-8'))\n\n    return (soup, clen)\n\ndef scan_author(article):\n    \"\"\"\n    從新聞內文找出記者姓名\n    \"\"\"\n\n    patterns = [\n        (r'(記者|中心)(\\w{2,5})[/／╱](.+報導|特稿)', 2),\n        (r'文[/／╱]記者(\\w{2,5})', 1),\n        (r'[\\(（](\\w{2,5})[/／╱].+報導[\\)）]', 1),\n        (r'記者(\\w{2,3}).{2}[縣市]?\\d{1,2}日電', 1),\n        (r'(記者|遊戲角落 )(\\w{2,5})$', 2),\n        (r'\\s(\\w{2,5})[/／╱].+報導$', 1),\n        (r'（譯者：(\\w{2,5})/.+）', 1),\n        (r'【(\\w{2,5})╱.+報導】', 1)\n    ]\n\n    exclude_list = [\n        '國際中心',\n        '地方中心',\n        '社會中心',\n        '攝影'\n    ]\n\n    for (patt, gidx) in patterns:\n        pobj = re.compile(patt)\n        match = pobj.search(article)\n        if match is not None:\n            if match.group(1) not in exclude_list:\n                return match.group(gidx)\n\n    return None\n\nclass NewsSoup:\n    \"\"\"\n    新聞分解器\n    \"\"\"\n\n    # pylint: disable=too-many-instance-attributes\n\n    def __init__(self, path, refresh=False, proxy_first=False):\n        \"\"\"\n        建立新聞分解器\n        \"\"\"\n\n        self.path = path\n        self.refresh = refresh\n        self.proxy_first = proxy_first\n        self.loaded = False\n        self.soup = None\n        self.rawlen = 0\n        self.logger = twnews.common.get_logger()\n        self.channel = twnews.common.detect_channel(path)\n        self.cache = {\n            'title': None,\n            'date_raw': None,\n            'date': None,\n            'author': None,\n            'contents': None,\n            'tags': None\n        }\n\n        if self.channel == '':\n            self.logger.error('不支援的新聞台，請檢查設定檔')\n            return\n\n        # URL 正規化\n        if self.path.startswith('http'):\n            self.path = url_follow_redirection(self.path, self.proxy_first)\n            self.path = url_force_https(self.path)\n            if self.channel == 'ltn':\n                self.path = url_force_ltn_mobile(self.path)\n\n        # Layout 偵測\n        layout = 'mobile'\n        layout_list = twnews.common.get_channel_conf(self.channel, 'layout_list')\n        for item in layout_list:\n            if self.path.startswith(item['prefix']):\n                layout = item['layout']\n\n        self.conf = twnews.common.get_channel_conf(self.channel, layout)\n\n    def __get_soup(self):\n        if not self.loaded:\n            self.loaded = True\n            try:\n                if self.path.startswith('http'):\n                    self.logger.debug('從網路載入新聞')\n                    (self.soup, self.rawlen) = soup_from_website(\n                        self.path,\n                        self.channel,\n                        self.refresh,\n                        self.proxy_first\n                    )\n                else:\n                    self.logger.debug('從檔案載入新聞')\n                    (self.soup, self.rawlen) = soup_from_file(self.path)\n            except requests.ConnectionError as ex:\n                self.logger.error('因連線問題，無法載入新聞: %s', ex)\n                self.logger.error(self.path)\n            except FileNotFoundError as ex:\n                self.logger.error('檔案不存在，無法載入新聞: %s', ex)\n                self.logger.error(self.path)\n            except TypeError as ex:\n                self.logger.error('頻道不存在，無法載入新聞: %s', ex)\n                self.logger.error(self.path)\n\n            if self.soup is None:\n                self.logger.error('無法轉換 BeautifulSoup，可能是網址或檔案路徑錯誤')\n\n        return self.soup\n\n    def title(self):\n        \"\"\"\n        取得新聞標題\n        \"\"\"\n\n        soup = self.__get_soup()\n        if soup is None:\n            return None\n\n        if self.cache['title'] is None:\n            nsel = self.conf['title_node']\n            found = soup.select(nsel)\n            if found:\n                node = copy.copy(found[0])\n                # 避免子元件干擾日期格式\n                for child_node in node.select('*'):\n                    child_node.extract()\n                self.cache['title'] = node.text.strip()\n                if len(found) > 1:\n                    self.logger.warning('找到多組標題節點 (新聞台: %s)', self.channel)\n            else:\n                self.logger.error('找不到標題節點 (新聞台: %s)', self.channel)\n\n        return self.cache['title']\n\n    def date_raw(self):\n        \"\"\"\n        取得原始時間字串\n        \"\"\"\n\n        soup = self.__get_soup()\n        if soup is None:\n            return None\n\n        if self.cache['date_raw'] is None:\n            nsel = self.conf['date_node']\n            found = soup.select(nsel)\n            if found:\n                node = copy.copy(found[0])\n                # 中時: 日期散落在兩個子節點，不可丟棄子節點\n                # 聯合: 日期在這個節點，子節點有其他文字，必須丟棄子節點\n                if 'date_with_children' not in self.conf or not self.conf['date_with_children']:\n                    # 丟棄子節點\n                    for child_node in node.select('*'):\n                        child_node.extract()\n                self.cache['date_raw'] = node.text.strip()\n                if len(found) > 1:\n                    self.logger.warning('發現多組日期節點 (新聞台: %s)', self.channel)\n            else:\n                self.logger.error('找不到日期時間節點 (新聞台: %s)', self.channel)\n\n        return self.cache['date_raw']\n\n    def date(self):\n        \"\"\"\n        取得 datetime.datetime 格式的時間\n        \"\"\"\n\n        soup = self.__get_soup()\n        if soup is None:\n            return None\n\n        if self.cache['date'] is None:\n            formats = self.conf['date_format']\n            if isinstance(formats, str):\n                formats = [formats]\n\n            for dfmt in formats:\n                try:\n                    self.cache['date'] = datetime.strptime(self.date_raw(), dfmt)\n                except TypeError as ex:\n                    errmsg = '日期格式分析失敗 {} (新聞台: {})'.format(ex, self.channel)\n                except ValueError as ex:\n                    errmsg = '日期格式分析失敗 {} (新聞台: {})'.format(ex, self.channel)\n\n            if self.cache['date'] is None:\n                self.logger.error(errmsg)\n\n        return self.cache['date']\n\n    def author(self):\n        \"\"\"\n        取得新聞記者/社論作者\n        \"\"\"\n\n        # pylint: disable=too-many-branches\n\n        soup = self.__get_soup()\n        if soup is None:\n            return None\n\n        if self.cache['author'] is None:\n            nsel = self.conf['author_node']\n            if nsel != '':\n                if isinstance(nsel, str):\n                    selectors = [nsel]\n                else:\n                    selectors = nsel\n                for nsel in selectors:\n                    found = soup.select(nsel)\n                    if found:\n                        node = copy.copy(found[0])\n                        for child_node in node.select('*'):\n                            child_node.extract()\n                        author_raw = node.text.strip()\n                        if author_raw[0] != '記' and len(author_raw) <= 5:\n                            self.cache['author'] = author_raw\n                        else:\n                            self.cache['author'] = scan_author(author_raw)\n                        if len(found) > 1:\n                            self.logger.warning('找到多組記者姓名 (新聞台: %s)', self.channel)\n                        break\n                    else:\n                        self.logger.warning('找不到記者節點 (新聞台: %s)', self.channel)\n            else:\n                contents = self.contents()\n                if contents is not None:\n                    self.cache['author'] = scan_author(contents)\n                    if self.cache['author'] is None:\n                        self.logger.warning('內文中找不到記者姓名 (新聞台: %s)', self.channel)\n                else:\n                    self.logger.error('因為沒有內文所以無法比對記者姓名 (新聞台: %s)', self.channel)\n\n        return self.cache['author']\n\n    def contents(self, limit=0):\n        \"\"\"\n        取得新聞內文\n        \"\"\"\n\n        soup = self.__get_soup()\n        if soup is None:\n            return None\n\n        if self.cache['contents'] is None:\n            nsel = self.conf['article_node']\n            found = soup.select(nsel)\n            if found:\n                contents = io.StringIO()\n                for node in found:\n                    contents.write(node.text.strip())\n                self.cache['contents'] = contents.getvalue()\n                contents.close()\n            else:\n                self.logger.error('找不到內文節點 (新聞台: %s)', self.channel)\n\n        if isinstance(self.cache['contents'], str) and limit > 0:\n            # https://github.com/PyCQA/pylint/issues/1498\n            # pylint: disable=unsubscriptable-object\n            return self.cache['contents'][0:limit]\n\n        return self.cache['contents']\n\n    def effective_text_rate(self):\n        \"\"\"\n        計算有效內容率 (有效內容位元組數/全部位元組數)\n        \"\"\"\n\n        soup = self.__get_soup()\n        if soup is None or self.rawlen == 0:\n            return 0\n\n        data = [\n            self.title(),\n            self.author(),\n            self.date_raw(),\n            self.contents()\n        ]\n\n        useful_len = 0\n        for datum in data:\n            if datum is not None:\n                useful_len += len(datum.encode('utf-8'))\n\n        return useful_len / self.rawlen\n"
  },
  {
    "path": "twnews/tests/__init__.py",
    "content": ""
  },
  {
    "path": "twnews/tests/search/__init__.py",
    "content": ""
  },
  {
    "path": "twnews/tests/search/test_search_appledaily.py",
    "content": "\"\"\"\n蘋果日報搜尋測試\n\"\"\"\n\nimport unittest\nfrom twnews.search import NewsSearch\n\n#@unittest.skip\nclass TestAppleDaily(unittest.TestCase):\n    \"\"\"\n    蘋果日報搜尋測試\n    \"\"\"\n\n    def setUp(self):\n        self.keyword = '上吊'\n        self.nsearch = NewsSearch('appledaily', limit=10)\n\n    def test_01_filter_title(self):\n        \"\"\"\n        測試蘋果日報搜尋\n        \"\"\"\n        results = self.nsearch.by_keyword(self.keyword, title_only=True).to_dict_list()\n        for topic in results:\n            if '上吊' not in topic['title']:\n                self.fail('標題必須含有 \"上吊\"')\n\n    def test_02_search_and_soup(self):\n        \"\"\"\n        測試蘋果日報搜尋+分解\n        \"\"\"\n        nsoups = self.nsearch.by_keyword(self.keyword).to_soup_list()\n        for nsoup in nsoups:\n            if nsoup.contents() is None:\n                # 因為 home.appledaily.com.tw 的 SSL 憑證有問題，忽略這個因素造成的錯誤\n                if not nsoup.path.startswith('https://home.appledaily.com.tw'):\n                    msg = '內文不可為 None, URL={}'.format(nsoup.path)\n                    self.fail(msg)\n"
  },
  {
    "path": "twnews/tests/search/test_search_cna.py",
    "content": "\"\"\"\n中央社搜尋測試\n\"\"\"\n\nimport unittest\nfrom twnews.search import NewsSearch\n\n#@unittest.skip\nclass TestCna(unittest.TestCase):\n    \"\"\"\n    中央社搜尋測試\n    \"\"\"\n\n    def setUp(self):\n        self.keyword = '上吊'\n        self.nsearch = NewsSearch('cna', limit=10)\n\n    def test_01_filter_title(self):\n        \"\"\"\n        測試中央社搜尋\n        \"\"\"\n        results = self.nsearch.by_keyword(self.keyword, title_only=True).to_dict_list()\n        for topic in results:\n            if '上吊' not in topic['title']:\n                self.fail('標題必須含有 \"上吊\"')\n\n    def test_02_search_and_soup(self):\n        \"\"\"\n        測試中央社搜尋+分解\n        \"\"\"\n        nsoups = self.nsearch.by_keyword(self.keyword).to_soup_list()\n        for nsoup in nsoups:\n            if nsoup.contents() is None:\n                self.fail('內文不可為 None')\n"
  },
  {
    "path": "twnews/tests/search/test_search_ettoday.py",
    "content": "\"\"\"\n東森新聞雲搜尋測試\n\"\"\"\n\nimport unittest\nfrom twnews.search import NewsSearch\n\n#@unittest.skip\nclass TestEttoday(unittest.TestCase):\n    \"\"\"\n    東森新聞雲搜尋測試\n    \"\"\"\n\n    def setUp(self):\n        self.keyword = '上吊'\n        self.nsearch = NewsSearch('ettoday', limit=10, proxy_first=True)\n\n    def test_01_filter_title(self):\n        \"\"\"\n        測試東森新聞雲搜尋\n        \"\"\"\n        results = self.nsearch.by_keyword(self.keyword, title_only=True).to_dict_list()\n        for topic in results:\n            if '上吊' not in topic['title']:\n                self.fail('標題必須含有 \"上吊\"')\n\n    def test_02_search_and_soup(self):\n        \"\"\"\n        測試東森新聞雲搜尋+分解\n        \"\"\"\n        nsoups = self.nsearch.by_keyword(self.keyword).to_soup_list()\n        for nsoup in nsoups:\n            if nsoup.contents() is None:\n                msg = '內文不可為 None, URL={}'.format(nsoup.path)\n                self.fail(msg)\n"
  },
  {
    "path": "twnews/tests/search/test_search_ltn.py",
    "content": "\"\"\"\n自由時報搜尋測試\n\"\"\"\n\nimport unittest\nfrom twnews.search import NewsSearch\n\n#@unittest.skip\nclass TestLtn(unittest.TestCase):\n    \"\"\"\n    自由時報搜尋測試\n    \"\"\"\n\n    def setUp(self):\n        self.keyword = '上吊'\n        self.nsearch = NewsSearch('ltn', limit=10)\n\n    def test_01_filter_title(self):\n        \"\"\"\n        測試自由時報搜尋\n        \"\"\"\n        results = self.nsearch.by_keyword(self.keyword, title_only=True).to_dict_list()\n        for topic in results:\n            if '上吊' not in topic['title']:\n                self.fail('標題必須含有 \"上吊\"')\n\n    def test_02_search_and_soup(self):\n        \"\"\"\n        測試自由時報搜尋+分解\n        \"\"\"\n        nsoups = self.nsearch.by_keyword(self.keyword).to_soup_list()\n        for nsoup in nsoups:\n            if nsoup.contents() is None:\n                self.fail('內文不可為 None')\n"
  },
  {
    "path": "twnews/tests/search/test_search_setn.py",
    "content": "\"\"\"\n三立新聞網搜尋測試\n\"\"\"\n\nimport unittest\nfrom twnews.search import NewsSearch\n\n#@unittest.skip\nclass TestSetn(unittest.TestCase):\n    \"\"\"\n    三立新聞網搜尋測試\n    \"\"\"\n\n    def setUp(self):\n        self.keyword = '上吊'\n        self.nsearch = NewsSearch('setn', limit=10)\n\n    def test_01_filter_title(self):\n        \"\"\"\n        測試三立新聞網搜尋\n        \"\"\"\n        results = self.nsearch.by_keyword(self.keyword, title_only=True).to_dict_list()\n        for topic in results:\n            if '上吊' not in topic['title']:\n                self.fail('標題必須含有 \"上吊\"')\n\n    def test_02_search_and_soup(self):\n        \"\"\"\n        測試三立新聞網搜尋+分解\n        \"\"\"\n        nsoups = self.nsearch.by_keyword(self.keyword).to_soup_list()\n        for nsoup in nsoups:\n            if nsoup.contents() is None:\n                self.fail('內文不可為 None')\n"
  },
  {
    "path": "twnews/tests/search/test_search_udn.py",
    "content": "\"\"\"\n聯合新聞網搜尋測試\n\"\"\"\n\nimport unittest\nfrom twnews.search import NewsSearch\n\n#@unittest.skip\nclass TestUdn(unittest.TestCase):\n    \"\"\"\n    聯合新聞網搜尋測試\n    \"\"\"\n\n    def setUp(self):\n        self.keyword = '上吊'\n        self.nsearch = NewsSearch('udn', limit=10)\n\n    def test_01_filter_title(self):\n        \"\"\"\n        測試聯合新聞網搜尋\n        \"\"\"\n        results = self.nsearch.by_keyword(self.keyword, title_only=True).to_dict_list()\n        for topic in results:\n            if '上吊' not in topic['title']:\n                self.fail('標題必須含有 \"上吊\"')\n\n    def test_02_search_and_soup(self):\n        \"\"\"\n        測試聯合新聞網搜尋+分解\n        \"\"\"\n        nsoups = self.nsearch.by_keyword(self.keyword).to_soup_list()\n        for nsoup in nsoups:\n            if nsoup.title() is None:\n                self.fail('標題不可為 None')\n"
  },
  {
    "path": "twnews/tests/soup/__init__.py",
    "content": ""
  },
  {
    "path": "twnews/tests/soup/test_soup_appledaily.py",
    "content": "\"\"\"\n蘋果日報分解測試\n\"\"\"\n\n# pylint: disable=duplicate-code\n\nimport unittest\nimport twnews.common\nfrom twnews.soup import NewsSoup\n\n#@unittest.skip\nclass TestAppleDaily(unittest.TestCase):\n    \"\"\"\n    蘋果日報分解測試\n    \"\"\"\n\n    def setUp(self):\n        self.dtf = '%Y-%m-%d %H:%M:%S'\n\n    def test_01_sample(self):\n        \"\"\"\n        測試蘋果日報樣本\n        \"\"\"\n        pkgdir = twnews.common.get_package_dir()\n        nsoup = NewsSoup(pkgdir + '/samples/appledaily.html.xz')\n        self.assertEqual('appledaily', nsoup.channel)\n        self.assertIn('和男友口角鎖門吞藥　女墜樓不治', nsoup.title())\n        self.assertEqual('2016-05-21 11:44:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('王煌忠', nsoup.author())\n        self.assertIn('文心路的一棟住宅大樓', nsoup.contents())\n\n    def test_02_mobile(self):\n        \"\"\"\n        測試蘋果日報行動版\n        \"\"\"\n        url = 'https://tw.news.appledaily.com/local/realtime/20181025/1453825'\n        nsoup = NewsSoup(url, refresh=True)\n        self.assertEqual('appledaily', nsoup.channel)\n        self.assertIn('男子疑久病厭世　學校圍牆上吊輕生亡', nsoup.title())\n        self.assertEqual('2018-10-25 12:03:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('江宏倫', nsoup.author())\n        self.assertIn('台北市北投區西安街二段', nsoup.contents())\n\n    def test_03_layouts(self):\n        \"\"\"\n        測試蘋果地產\n        \"\"\"\n        layouts = [\n            {\n                'url': 'http://home.appledaily.com.tw/article/index/20190313/38279127',\n                'title': '潮牌概念店撤離 東區房東陷定位危機',\n                'date': '2019-03-13 00:00:00',\n                'author': '唐家儀',\n                'contents': '英國人氣潮牌Superdry（超級乾燥）位大安區忠孝東路四段的形象概念門市竟已歇業'\n            }\n        ]\n        for layout in layouts:\n            nsoup = NewsSoup(layout['url'], refresh=True, proxy_first=True)\n            self.assertEqual('appledaily', nsoup.channel)\n            self.assertIn(layout['title'], nsoup.title())\n            if nsoup.date() is not None:\n                self.assertEqual(layout['date'], nsoup.date().strftime(self.dtf))\n            else:\n                self.assertEqual(layout['date'], nsoup.date())\n            self.assertEqual(layout['author'], nsoup.author())\n            self.assertIn(layout['contents'], nsoup.contents())\n"
  },
  {
    "path": "twnews/tests/soup/test_soup_chinatimes.py",
    "content": "\"\"\"\n中時電子報分解測試\n\"\"\"\n\n# pylint: disable=duplicate-code\n\nimport unittest\nimport twnews.common\nfrom twnews.soup import NewsSoup\n\n#@unittest.skip\nclass TestChinatimes(unittest.TestCase):\n    \"\"\"\n    中時電子報分解測試\n    \"\"\"\n\n    def setUp(self):\n        self.url = 'https://www.chinatimes.com/realtimenews/20180916001767-260402'\n        self.dtf = '%Y-%m-%d %H:%M:%S'\n\n    def test_01_sample(self):\n        \"\"\"\n        測試中時電子報樣本\n        \"\"\"\n        pkgdir = twnews.common.get_package_dir()\n        nsoup = NewsSoup(pkgdir + '/samples/chinatimes.html.xz')\n        self.assertEqual('chinatimes', nsoup.channel)\n        self.assertIn('悲慟！北市士林年邁母子 住處上吊自殺身亡', nsoup.title())\n        self.assertEqual('2018-09-16 15:31:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('謝明俊', nsoup.author())\n        self.assertIn('北市士林區葫蘆街一處民宅', nsoup.contents())\n\n    def test_02_mobile(self):\n        \"\"\"\n        測試中時電子報行動版\n        \"\"\"\n        nsoup = NewsSoup(self.url, refresh=True)\n        self.assertEqual('chinatimes', nsoup.channel)\n        self.assertIn('悲慟！北市士林年邁母子 住處上吊自殺身亡', nsoup.title())\n        self.assertEqual('2018-09-16 15:31:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('謝明俊', nsoup.author())\n        self.assertIn('北市士林區葫蘆街一處民宅', nsoup.contents())\n"
  },
  {
    "path": "twnews/tests/soup/test_soup_cna.py",
    "content": "\"\"\"\n中央社分解測試\n\"\"\"\n\n# pylint: disable=duplicate-code\n\nimport unittest\nimport twnews.common\nfrom twnews.soup import NewsSoup\n\n#@unittest.skip\nclass TestCna(unittest.TestCase):\n    \"\"\"\n    中央社分解測試\n    \"\"\"\n\n    def setUp(self):\n        self.url = 'https://www.cna.com.tw/news/asoc/201810170077.aspx'\n        self.dtf = '%Y-%m-%d %H:%M:%S'\n\n    def test_01_sample(self):\n        \"\"\"\n        測試中央社樣本\n        \"\"\"\n        pkgdir = twnews.common.get_package_dir()\n        nsoup = NewsSoup(pkgdir + '/samples/cna.html.xz')\n        self.assertEqual('cna', nsoup.channel)\n        self.assertIn('平鎮輪胎行惡火  疏散7人1女命喪', nsoup.title())\n        self.assertEqual('2016-03-19 10:48:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('邱俊欽', nsoup.author())\n        self.assertIn('桃園市平鎮區一家輪胎行', nsoup.contents())\n\n    def test_02_mobile(self):\n        \"\"\"\n        測試中央社行動版\n        \"\"\"\n        nsoup = NewsSoup(self.url, refresh=True)\n        self.assertEqual('cna', nsoup.channel)\n        self.assertIn('前女友輕生  前男友到殯儀館砍現任還開槍', nsoup.title())\n        self.assertEqual('2018-10-17 14:06:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('黃國芳', nsoup.author())\n        self.assertIn('民主進步黨籍嘉義市議員王美惠上午到殯儀館參加公祭', nsoup.contents())\n"
  },
  {
    "path": "twnews/tests/soup/test_soup_common.py",
    "content": "\"\"\"\n分解共用程式測試\n\n為了節省爬蟲開發時間，原則上 NewsSoup 盡量不丟例外，有問題以 logging 機制為主\n\"\"\"\n\n# pylint: disable=wildcard-import,unused-wildcard-import\n\nimport os\nimport unittest\nimport twnews.common\nfrom twnews.soup import *\n\nclass TestCommon(unittest.TestCase):\n    \"\"\"\n    不分頻道分解測試\n    \"\"\"\n\n    def setUp(self):\n        self.url = 'https://tw.appledaily.com/headline/daily/20181201/38194705/'\n        self.dtf = '%Y-%m-%d %H:%M:%S'\n\n    def test_01_cache(self):\n        \"\"\"\n        測試快取機制\n        \"\"\"\n\n        # 清除快取\n        cache_dir = twnews.common.get_cache_dir('appledaily')\n        cache_path = '{}/ed33e11740a7c95cb0852827b91cd37d.html.xz'.format(cache_dir)\n        if os.path.isfile(cache_path):\n            os.unlink(cache_path)\n\n        # 讀取新聞，計算快取檔案數\n        NewsSoup(self.url).title()\n        has_cache = os.path.isfile(cache_path)\n        self.assertTrue(has_cache)\n\n        # 再次讀取新聞，確認快取檔的 mtime 沒變\n        if has_cache:\n            news_mtime_old = os.path.getmtime(cache_path)\n            NewsSoup(self.url).title()\n            news_mtime_new = os.path.getmtime(cache_path)\n            self.assertEqual(news_mtime_old, news_mtime_new)\n\n    def test_02_soup_from_website(self):\n        '''\n        測試 NewSoup(URL) 輸入不理想網址\n        '''\n\n        # pylint: disable=broad-except, line-too-long\n\n        # channel 不存在\n        try:\n            nsoup = NewsSoup('https://localhost.xxx')\n            self.assertIsNone(nsoup.title(), 'channel 錯誤時，title() 應該回傳 None')\n            self.assertIsNone(nsoup.date(), 'channel 錯誤時，date() 應該回傳 None')\n            self.assertIsNone(nsoup.author(), 'channel 錯誤時，author() 應該回傳 None')\n            self.assertIsNone(nsoup.contents(), 'channel 錯誤時，contents() 應該回傳 None')\n            self.assertEqual(0, nsoup.effective_text_rate(), 'channel 錯誤時，effective_text_rate() 應該回傳 0')\n        except Exception:\n            self.fail('channel 錯誤時，__init__() 不應該發生例外')\n\n        # channel 正確但 host 漏字\n        try:\n            nsoup = NewsSoup('https://appledaily.co')\n            self.assertIsNone(nsoup.title(), 'host 錯誤時，title() 應該回傳 None')\n            self.assertIsNone(nsoup.date(), 'host 錯誤時，date() 應該回傳 None')\n            self.assertIsNone(nsoup.author(), 'host 錯誤時，author() 應該回傳 None')\n            self.assertIsNone(nsoup.contents(), 'host 錯誤時，contents() 應該回傳 None')\n            self.assertEqual(0, nsoup.effective_text_rate(), 'host 錯誤時，effective_text_rate() 應該回傳 0')\n        except Exception:\n            self.fail('host 錯誤時，__init__() 不應該發生例外')\n\n        # host 正確但 url 漏字\n        try:\n            url = 'https://tw.news.appledaily.com/local/realtime/WRONG/NEWS_ID'\n            nsoup = NewsSoup(url)\n            self.assertIsNone(nsoup.title(), 'url 錯誤時，title() 應該回傳 None')\n            self.assertIsNone(nsoup.date(), 'url 錯誤時，date() 應該回傳 None')\n            self.assertIsNone(nsoup.author(), 'url 錯誤時，author() 應該回傳 None')\n            self.assertIsNone(nsoup.contents(), 'url 錯誤時，contents() 應該回傳 None')\n            self.assertEqual(0, nsoup.effective_text_rate(), '頻道錯誤時，effective_text_rate() 應該回傳 0')\n        except Exception:\n            self.fail('url 錯誤時，__init__() 不應該發生例外')\n\n    def test_03_soup_from_file(self):\n        '''\n        測試 NewsSoup(FILE) 輸入不理想檔案\n        '''\n\n        # pylint: disable=broad-except, line-too-long\n\n        # channel 不存在\n        try:\n            nsoup = NewsSoup('/tmp/badchannel.html')\n            self.assertIsNone(nsoup.title(), 'channel 錯誤時，title() 應該回傳 None')\n            self.assertIsNone(nsoup.date(), 'channel 錯誤時，date() 應該回傳 None')\n            self.assertIsNone(nsoup.author(), 'channel 錯誤時，author() 應該回傳 None')\n            self.assertIsNone(nsoup.contents(), 'channel 錯誤時，contents() 應該回傳 None')\n            self.assertEqual(0, nsoup.effective_text_rate(), 'channel 錯誤時，effective_text_rate() 應該回傳 0')\n        except Exception:\n            self.fail('channel 錯誤時，__init__() 不應該發生例外')\n\n        # 檔案不存在\n        try:\n            nsoup = NewsSoup('/tmp/appledaily-notexisted.html')\n            self.assertIsNone(nsoup.title(), '檔案不存在時，title() 應該回傳 None')\n            self.assertIsNone(nsoup.date(), '檔案不存在時，date() 應該回傳 None')\n            self.assertIsNone(nsoup.author(), '檔案不存在時，author() 應該回傳 None')\n            self.assertIsNone(nsoup.contents(), '檔案不存在時，contents() 應該回傳 None')\n            self.assertEqual(0, nsoup.effective_text_rate(), '檔案不存在時，effective_text_rate() 應該回傳 0')\n        except Exception:\n            self.fail('檔案不存在時，__init__() 不應該發生例外')\n\n        # 空白檔案\n        try:\n            open('appledaily-empty.html', 'a').close()\n            nsoup = NewsSoup('appledaily-empty.html')\n            self.assertIsNone(nsoup.title(), '空白檔案時，title() 應該回傳 None')\n            self.assertIsNone(nsoup.date(), '空白檔案時，date() 應該回傳 None')\n            self.assertIsNone(nsoup.author(), '空白檔案時，author() 應該回傳 None')\n            self.assertIsNone(nsoup.contents(), '空白檔案時，contents() 應該回傳 None')\n            self.assertEqual(0, nsoup.effective_text_rate(), '檔案不存在時，effective_text_rate() 應該回傳 0')\n            os.unlink('appledaily-empty.html')\n        except Exception:\n            self.fail('空白檔案時，__init__() 不應該發生例外')\n\n        # 空白 gz 檔案\n        try:\n            open('appledaily-empty.html.gz', 'a').close()\n            nsoup = NewsSoup('appledaily-empty.html')\n            self.assertIsNone(nsoup.soup)\n            self.assertIsNone(nsoup.title(), '空白檔案時，title() 應該回傳 None')\n            self.assertIsNone(nsoup.date(), '空白檔案時，date() 應該回傳 None')\n            self.assertIsNone(nsoup.author(), '空白檔案時，author() 應該回傳 None')\n            self.assertIsNone(nsoup.contents(), '空白檔案時，contents() 應該回傳 None')\n            self.assertEqual(0, nsoup.effective_text_rate(), '檔案不存在時，effective_text_rate() 應該回傳 0')\n            os.unlink('appledaily-empty.html.gz')\n        except Exception:\n            self.fail('空白檔案時，__init__() 不應該發生例外')\n\n    def test_04_author_in_contents(self):\n        \"\"\"\n        測試無記者欄的記者姓名分析 (蘋果、中央社、東森、自由、三立)\n        \"\"\"\n\n        good_samples = [\n            # 蘋果\n            '(王覺一／台北報導)',\n            '（林文彬／綜合外電報導）',\n            # 中央社\n            '（中央社記者吳睿騏桃園5日電）',\n            '（中央社記者黃國芳嘉義縣17日電）',\n            '（中央社東京5日綜合外電報導）日本軟銀（譯者：何宏儒/核稿：劉學源）',\n            # 東森\n            '記者吳奕靖／高雄報導',\n            # 自由\n            '〔記者梁偉銘／台北報導〕',\n            '［記者江志雄／宜蘭報導］',\n            # 三立\n            '記者於慶璇／台中報導'\n        ]\n\n        bad_samples = [\n            # 蘋果\n            '（國際中心／綜合外電報導）',\n            # 中央社\n            '（中央社伊斯坦堡/日內瓦5日綜合外電報導）',\n            # 東森\n            '地方中心／嘉義報導',\n            # 自由\n            '〔即時新聞／綜合報導〕',\n            # 三立\n            '社會中心／綜合報導',\n            # 腦補\n            '（地方中心／綜合報導）',\n            '（社會中心／綜合報導）',\n            '〔地方中心／綜合報導〕',\n            '〔社會中心／綜合報導〕',\n        ]\n\n        for text in good_samples:\n            author = scan_author(text)\n            msg = '\"{}\" 應該分析出記者姓名'.format(text)\n            self.assertIsNotNone(author, msg)\n\n        for text in bad_samples:\n            author = scan_author(text)\n            msg = '\"{}\" 不應分析出記者姓名'.format(text)\n            self.assertIsNone(author, msg)\n\n    def test_05_author_in_node(self):\n        \"\"\"\n        測試有記者欄的記者姓名分析 (中時、聯合)\n        \"\"\"\n\n        # 中時找不到異常案例，暫不測試\n        bad_samples = [\n            # 中央社 高雄6日電 (無連結)\n            'https://udn.com/news/story/10958/3465283',\n            # 聯合新聞網 綜合報導 (無連結)\n            'https://udn.com/news/story/10958/3465161'\n        ]\n\n        for url in bad_samples:\n            nsoup = NewsSoup(url)\n            author = nsoup.author()\n            msg = '\"{}\" 不應分析出記者姓名'.format(url)\n            self.assertIsNone(author, msg)\n"
  },
  {
    "path": "twnews/tests/soup/test_soup_ettoday.py",
    "content": "\"\"\"\n東森新聞雲分解測試\n\"\"\"\n\n# pylint: disable=duplicate-code\n\nimport unittest\nimport twnews.common\nfrom twnews.soup import NewsSoup\n\nclass TestEttoday(unittest.TestCase):\n    \"\"\"\n    東森新聞雲分解測試\n    \"\"\"\n\n    def setUp(self):\n        self.dtf = '%Y-%m-%d %H:%M:%S'\n\n    def test_01_sample(self):\n        \"\"\"\n        測試東森新聞雲樣本\n        \"\"\"\n        pkgdir = twnews.common.get_package_dir()\n        nsoup = NewsSoup(pkgdir + '/samples/ettoday.html.xz')\n        self.assertEqual('ettoday', nsoup.channel)\n        self.assertIn('客運司機車禍致人於死　心情鬱悶陽台以狗鍊上吊', nsoup.title())\n        self.assertEqual('2017-12-09 00:26:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('林悅', nsoup.author())\n        self.assertIn('台南市永康區永安路住處後陽台上吊', nsoup.contents())\n\n    def test_02_mobile(self):\n        \"\"\"\n        測試東森新聞雲\n        \"\"\"\n        url = 'https://www.ettoday.net/news/20181020/1285826.htm'\n        nsoup = NewsSoup(url, refresh=True, proxy_first=True)\n        self.assertEqual('ettoday', nsoup.channel)\n        self.assertIn('快訊／整日沒出房門！三重無業男半夜住處2樓上吊　母開門才發現', nsoup.title())\n        self.assertEqual('2018-10-20 04:11:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('趙永博', nsoup.author())\n        self.assertIn('新北市三重區三和路三段101巷一處民宅2樓', nsoup.contents())\n\n    def test_03_layouts(self):\n        \"\"\"\n        測試東森新聞雲其他排版\n        \"\"\"\n        layouts = [\n            {\n                'url': 'https://fashion.ettoday.net/news/1316942',\n                'title': '漫長的冬日夜晚想閱讀　不妨參考誠品2018年度暢銷書單',\n                'date': '2018-11-28 10:10:00',\n                'author': '蔡惠如',\n                'contents': '我輩中人：寫給中年人的情書'\n            },\n            {\n                'url': 'https://game.ettoday.net/article/1315167.htm',\n                'title': '網石與DC聯名合作　《蝙蝠俠》角色進駐《天堂2 革命》',\n                'date': '2018-11-24 23:59:00',\n                'author': None,\n                'contents': '天堂2：革命'\n            },\n            {\n                'url': 'https://health.ettoday.net/news/1317507',\n                'title': '謝碧珠／沒有自費就醫資訊的健康存摺很空心',\n                'date': '2018-11-28 12:50:00',\n                'author': None,\n                'contents': '全民健康保險法'\n            },\n            {\n                'url': 'https://house.ettoday.net/news/1317619',\n                'title': '台北、新北26.1％潛勢區　「市民生命安全」柯P、漢子準備好了嗎？',\n                'date': '2018-11-28 11:16:00',\n                'author': '陳韋帆',\n                'contents': '其中「山腳斷層」更跨越了金山、三芝、淡水、五股、泰山、新莊及樹林等各區'\n            },\n            {\n                'url': 'https://pets.ettoday.net/news/1307563',\n                'title': '去睡覺囉！　傑克羅素㹴秒轉身「抱大狗娃娃」踏踏進房：晚安～',\n                'date': '2018-11-16 14:50:00',\n                'author': '陳靜',\n                'contents': '每天晚上都一定要帶著它睡覺，有時候突然想到也會馬上衝進房間'\n            },\n            {\n                'url': 'https://speed.ettoday.net/news/1316854',\n                'title': '休旅車＆轎車誰安全？數據顯示這種車「死亡率低一半」',\n                'date': '2018-11-27 20:03:00',\n                'author': None,\n                'contents': '發生各類車禍事故時，普通轎車乘客死亡率為39%，而SUV只有21%'\n            },\n            {\n                'url': 'https://sports.ettoday.net/news/1317313',\n                'title': '日職／丸佳浩MVP二連霸　山川穗高獲獎喊目標50轟',\n                'date': '2018-11-27 21:10:00',\n                'author': '楊舒帆',\n                'contents': '今年繳出打擊率0.306、39轟、97分打點的成績'\n            },\n            {\n                'url': 'https://star.ettoday.net/news/1308844',\n                'title': 'KID半夜突襲女神房間！　驚見「浴衣脫落門外」他狂喜衝進去',\n                'date': '2018-11-17 16:40:00',\n                'author': '劉宜庭',\n                'contents': 'KID親睹這一幕，更是興奮到整個人趴在地上'\n            },\n            {\n                'url': 'https://travel.ettoday.net/article/1317664.htm',\n                'title': '普羅旺斯花海、《鬼怪》蕎麥花！「全台5大花海」超醉心',\n                'date': '2018-11-28 12:30:00',\n                'author': None,\n                'contents': '粉紅波斯菊、向日葵、百合、鼠尾草、貓尾花、麒麟菊、雞冠花、鳳仙花等陸續盛開'\n            }\n        ]\n        for layout in layouts:\n            nsoup = NewsSoup(layout['url'], refresh=True, proxy_first=True)\n            self.assertEqual('ettoday', nsoup.channel)\n            self.assertIn(layout['title'], nsoup.title())\n            self.assertEqual(layout['date'], nsoup.date().strftime(self.dtf))\n            self.assertEqual(layout['author'], nsoup.author())\n            self.assertIn(layout['contents'], nsoup.contents())\n"
  },
  {
    "path": "twnews/tests/soup/test_soup_ltn.py",
    "content": "\"\"\"\n自由時報單元分解測試\n\"\"\"\n\n# pylint: disable=duplicate-code\n\nimport unittest\nimport twnews.common\nfrom twnews.soup import NewsSoup\n\n#@unittest.skip\nclass TestLtn(unittest.TestCase):\n    \"\"\"\n    自由時報單元分解測試\n    \"\"\"\n\n    def setUp(self):\n        self.dtf = '%Y-%m-%d %H:%M:%S'\n\n    def test_01_sample(self):\n        \"\"\"\n        測試自由時報樣本\n        \"\"\"\n        pkgdir = twnews.common.get_package_dir()\n        nsoup = NewsSoup(pkgdir + '/samples/ltn.html.xz')\n        self.assertEqual('ltn', nsoup.channel)\n        self.assertIn('10年前父親掐死兒後自縊... 凶宅下月拍開價425萬', nsoup.title())\n        self.assertEqual('2018-07-31 08:19:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual(None, nsoup.author())\n        self.assertIn('台北市萬華區萬大路一帶公寓的蘇姓男子', nsoup.contents())\n\n    def test_02_mobile(self):\n        \"\"\"\n        測試自由時報行動版\n        \"\"\"\n        url = 'http://news.ltn.com.tw/news/society/breakingnews/2581807'\n        nsoup = NewsSoup(url, refresh=True)\n        self.assertEqual('ltn', nsoup.channel)\n        self.assertIn('疑因病厭世 男子國小圖書館上吊身亡', nsoup.title())\n        self.assertEqual('2018-10-15 23:51:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual(None, nsoup.author())\n        self.assertIn('台北市萬華區的老松國小今（15）日早上驚傳上吊輕生事件', nsoup.contents())\n\n    def test_03_layouts(self):\n        \"\"\"\n        測試自由時報其他排版\n        \"\"\"\n        layouts = [\n            # TODO: 改善作者精準度\n            {\n                'url': 'http://3c.ltn.com.tw/m/news/35179',\n                'title': 'iPhone XR 開箱體驗（三）！相機對比 iPhone XS、Google Pixel 3',\n                'date': '2018-11-28 14:08:00',\n                'author': '黃敬淳',\n                'contents': '曝光控制也是 XR 相比 iPhone 8 Plus 的主要升級點'\n            },\n            # TODO: 改善日期精準度\n            {\n                'url': 'http://auto.ltn.com.tw/m/news/11334/3',\n                'title': '瞄準 Toyota Auris，大改款 Mazda 3 洛杉磯車展正式亮相！（內有相片集）',\n                'date': None,\n                'author': '徐煜展',\n                'contents': '其中新造型的 LED 尾燈組也與先前公佈的 Kai Concept 概念車相仿'\n            },\n            {\n                'url': 'http://ec.ltn.com.tw/m/article/breakingnews/2626720',\n                'title': '童子賢：不要幻想東南亞是下1個中國 中國模式難複製到其他國',\n                'date': '2018-11-28 12:40:03',\n                'author': '卓怡君',\n                'contents': '過去20年中國在台商和全球外商打造出製造業的基礎建設'\n            },\n            {\n                'url': 'http://ent.ltn.com.tw/m/news/breakingnews/2626753',\n                'title': '藍文青獨賠近5千萬 自稱 「韓國瑜鑾生兄弟」',\n                'date': '2018-11-28 13:05:00',\n                'author': '蕭宇涵',\n                'contents': '但吳易展以旗下公司美仕特牛排公司才剛起步'\n            },\n            {\n                'url': 'http://estate.ltn.com.tw/article/6493',\n                'title': '台南新吉工業區地上權招租 提供優惠方案',\n                'date': '2018-11-26 18:27:00',\n                'author': '林耀文',\n                'contents': '台南市新吉工業區位於臺南市安南區、安定區交界處招商也頗為亮麗'\n            },\n            {\n                'url': 'http://food.ltn.com.tw/m/article/8263',\n                'title': '菠菜影響鈣吸收？吃多了會結石？別再相信謠言了！',\n                'date': '2018-11-28 00:00:00',\n                'author': None,\n                'contents': '許多民眾擔心菠菜富含「草酸」，會抑制鈣質吸收'\n            },\n            # TODO: 改善日期精準度\n            {\n                'url': 'http://istyle.ltn.com.tw/m/article/9168',\n                'title': '明星瘋這咖》張鈞甯、陳庭妮私下都揹小包！「小叮噹大袋」暫退...',\n                'date': None,\n                'author': '余崇慧',\n                'contents': '一頭復古味十足的劉海，帶著六、七零年代阿哥哥風格'\n            },\n            {\n                'url': 'http://market.ltn.com.tw/m/article/5159',\n                'title': '2018台北國際旅展  推動原住民族文化',\n                'date': '2018-11-27 11:31:00',\n                'author': None,\n                'contents': '台北國際旅展設置形象館，推出全台36個部落的精彩遊程'\n            },\n            {\n                'url': 'http://playing.ltn.com.tw/m/article/11191',\n                'title': '北高韓粉吃雞排囉！3千份雞排賀韓國瑜當選，今起發送到週末',\n                'date': '2018-11-28 00:00:00',\n                'author': None,\n                'contents': '網友打趣地解釋，原先說是900份。後來加碼至1000份'\n            },\n            {\n                'url': 'http://sports.ltn.com.tw/m/news/breakingnews/2626821',\n                'title': 'MLB》王牌陣解體在即？印地安人傳更想出售鮑爾',\n                'date': '2018-11-28 14:21:00',\n                'author': None,\n                'contents': '鮑爾目前只剩兩年控制權，而他今年有望靠著優異表現在薪資上大幅躍進'\n            },\n            {\n                'url': 'http://talk.ltn.com.tw/article/breakingnews/2625348',\n                'title': '胡，怎麼說》正負8％造成政治雪崩效應',\n                'date': '2018-11-27 09:43:00',\n                'author': '胡文輝',\n                'contents': '2016年總統及立委選舉，民進黨才連下兩城，總統選舉得票率以56.12%狂勝國民黨的31.04%'\n            }\n        ]\n        for layout in layouts:\n            nsoup = NewsSoup(layout['url'], refresh=True, proxy_first=True)\n            self.assertEqual('ltn', nsoup.channel)\n            self.assertIn(layout['title'], nsoup.title())\n            if nsoup.date() is not None:\n                self.assertEqual(layout['date'], nsoup.date().strftime(self.dtf))\n            else:\n                self.assertEqual(layout['date'], nsoup.date())\n            self.assertEqual(layout['author'], nsoup.author())\n            self.assertIn(layout['contents'], nsoup.contents())\n\n    def test_04_switch_mobile(self):\n        \"\"\"\n        測試自動切換行動版\n        \"\"\"\n        url = 'http://sports.ltn.com.tw/news/breakingnews/2626821'\n        nsoup = NewsSoup(url, refresh=True)\n        self.assertEqual('ltn', nsoup.channel)\n        self.assertIn('MLB》王牌陣解體在即？印地安人傳更想出售鮑爾', nsoup.title())\n        self.assertEqual('2018-11-28 14:21:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual(None, nsoup.author())\n        self.assertIn('鮑爾目前只剩兩年控制權，而他今年有望靠著優異表現在薪資上大幅躍進', nsoup.contents())\n\n    def test_05_multiple_date_format(self):\n        \"\"\"\n        測試多重日期格式\n        \"\"\"\n        url = 'https://m.ltn.com.tw/news/politics/paper/1249335'\n        nsoup = NewsSoup(url, refresh=True)\n        self.assertEqual('ltn', nsoup.channel)\n        self.assertIn('狂拿15席 吳總教頭首戰告捷', nsoup.title())\n        self.assertEqual('2018-11-25 00:00:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('施曉光', nsoup.author())\n        self.assertIn('由黨魁吳敦義扮演「總教頭」並宣稱要擊出二十二支全壘打的國民黨', nsoup.contents())\n\n    def test_06_http_redirect(self):\n        \"\"\"\n        測試轉址效果\n        \"\"\"\n        url = 'https://news.ltn.com.tw/news/entertainment/breakingnews/2697368'\n        nsoup = NewsSoup(url, refresh=True)\n        self.assertEqual('ltn', nsoup.channel)\n        self.assertEqual('https://ent.ltn.com.tw/m/news/breakingnews/2697368', nsoup.path)\n        self.assertIn('摸胸夾腿都來！邵翔小蠻交往6年公布「有了」', nsoup.title())\n        self.assertEqual('2019-02-13 11:46:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('蕭宇涵', nsoup.author())\n        self.assertIn('小蠻一席黑色小禮服大露蜜腿，雙手游移挑逗扒開邵翔的襯衫', nsoup.contents())\n"
  },
  {
    "path": "twnews/tests/soup/test_soup_setn.py",
    "content": "\"\"\"\n三立新聞網分解測試\n\"\"\"\n\n# pylint: disable=duplicate-code\n\nimport unittest\nimport twnews.common\nfrom twnews.soup import NewsSoup\n\n#@unittest.skip\nclass TestSetn(unittest.TestCase):\n    \"\"\"\n    三立新聞網分解測試\n    \"\"\"\n\n    def setUp(self):\n        self.url = 'http://www.setn.com/News.aspx?NewsID=350370'\n        self.dtf = '%Y-%m-%d %H:%M:%S'\n\n    def test_01_sample(self):\n        \"\"\"\n        測試三立新聞網樣本\n        \"\"\"\n        pkgdir = twnews.common.get_package_dir()\n        nsoup = NewsSoup(pkgdir + '/samples/setn.html.xz')\n        self.assertEqual('setn', nsoup.channel)\n        self.assertIn('與母爭吵疑失足墜樓　男子送醫搶救不治', nsoup.title())\n        self.assertEqual('2018-02-21 18:03:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual(None, nsoup.author())\n        self.assertIn('新北市新店區中正路今（21）日下午3時許發生墜樓案件', nsoup.contents())\n\n    def test_02_mobile(self):\n        \"\"\"\n        測試三立新聞網行動版\n        \"\"\"\n        nsoup = NewsSoup(self.url, refresh=True)\n        self.assertEqual('setn', nsoup.channel)\n        self.assertIn('與母爭吵疑失足墜樓　男子送醫搶救不治', nsoup.title())\n        self.assertEqual('2018-02-21 18:03:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual(None, nsoup.author())\n        self.assertIn('新北市新店區中正路今（21）日下午3時許發生墜樓案件', nsoup.contents())\n\n    def test_03_layouts(self):\n        \"\"\"\n        測試三立新聞網的其他排版\n        \"\"\"\n        layouts = [\n            {\n                'url': 'https://www.setn.com/e/News.aspx?NewsID=460349',\n                'title': '不只想贏韓國！徐展元「分手女友」紅到美國…竟是切身之痛',\n                'date': '2018-11-22 17:29:00',\n                'author': '王奕棋',\n                'contents': '這個球就像變了心的女朋友，回不來了'\n            }\n        ]\n        for layout in layouts:\n            nsoup = NewsSoup(layout['url'], refresh=True, proxy_first=True)\n            self.assertEqual('setn', nsoup.channel)\n            self.assertIn(layout['title'], nsoup.title())\n            self.assertEqual(layout['date'], nsoup.date().strftime(self.dtf))\n            self.assertEqual(layout['author'], nsoup.author())\n            self.assertIn(layout['contents'], nsoup.contents())\n"
  },
  {
    "path": "twnews/tests/soup/test_soup_udn.py",
    "content": "\"\"\"\n聯合新聞網分解測試\n\"\"\"\n\n# pylint: disable=duplicate-code\n\nimport unittest\nimport twnews.common\nfrom twnews.soup import NewsSoup\n\n#@unittest.skip\nclass TestUdn(unittest.TestCase):\n    \"\"\"\n    聯合新聞網分解測試\n    \"\"\"\n\n    def setUp(self):\n        self.url = 'https://udn.com/news/story/7320/3407294'\n        self.dtf = '%Y-%m-%d %H:%M:%S'\n\n    def test_01_sample(self):\n        \"\"\"\n        測試聯合新聞網樣本\n        \"\"\"\n        pkgdir = twnews.common.get_package_dir()\n        nsoup = NewsSoup(pkgdir + '/samples/udn.html.xz')\n        self.assertEqual('udn', nsoup.channel)\n        self.assertIn('血濺桃機 他把老婆丟下樓再跳樓', nsoup.title())\n        self.assertEqual('2019-03-18 23:59:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('陳嘉寧', nsoup.author())\n        self.assertIn('萬與張女站在第二航廈出境大廳管制區外南側四樓往三樓樓梯迴轉處爭吵', nsoup.contents())\n\n    def test_02_mobile(self):\n        \"\"\"\n        測試聯合新聞網行動版\n        \"\"\"\n        nsoup = NewsSoup(self.url, refresh=True)\n        self.assertEqual('udn', nsoup.channel)\n        self.assertIn('清晨起床發現父親上吊天花板 嚇壞女兒急報案', nsoup.title())\n        self.assertEqual('2018-10-06 15:45:00', nsoup.date().strftime(self.dtf))\n        self.assertEqual('陳宏睿', nsoup.author())\n        self.assertIn('台中市北區水源街', nsoup.contents())\n\n    def test_03_layouts(self):\n        \"\"\"\n        測試聯合新聞網的其他排版\n        \"\"\"\n        layouts = [\n            {\n                'url': 'https://autos.udn.com/autos/story/7826/3506163',\n                'title': '2018洛杉磯車展／更洗鍊有型！全新第四代Mazda3發表前廠照先曝光',\n                'date': '2018-11-28 11:35:11',\n                'author': '張振群',\n                'contents': 'Mazda汽車今年壓軸重頭戲全新第四代Mazda3，在正式發表前外觀定裝照率先曝光。'\n            },\n            {\n                'url': 'https://game.udn.com/game/story/10449/3489517',\n                'title': '《轉校生》新手生存指南 對戰？先活下來再說吧！',\n                'date': '2018-11-19 17:14:00',\n                'author': '老宅',\n                'contents': '遊戲中兩大生產建設在教室下方的紙杯跟爐架，在這邊可以生產飲料跟食物'\n            },\n            {\n                'url': 'https://global.udn.com/global_vision/story/8663/3502209',\n                'title': '「二次公投」好不好？凌遲式的英國脫歐單行道',\n                'date': '2018-11-26 00:00:00',\n                'author': None,\n                'contents': '廢除脫歐決定、舉行二次脫歐公投的聲量也越來越強'\n            },\n            {\n                'url': 'https://health.udn.com/health/story/6037/3504950',\n                'title': '喝奶茶不如單喝紅茶 日本紅茶協會：加牛奶會失去兩大功效',\n                'date': '2018-11-28 00:41:00',\n                'author': '廖思涵',\n                'contents': '茶葉含有咖啡鹼、茶鹼、鞣酸、可可鹼、葉酸、維生素B群、C、P及少量的礦物質'\n            },\n            {\n                'url': 'https://house.udn.com/house/story/5887/3506297',\n                'title': '一戶19萬也沒人要！ 神才賣得掉的217戶又流標了',\n                'date': '2018-11-28 12:26:17',\n                'author': '游智文',\n                'contents': '北海岸喜凱亞渡假村法拍屋，今（28）日進行第17次拍賣'\n            },\n            {\n                'url': 'https://nba.udn.com/nba/story/6780/3506854',\n                'title': '「鳥人」現身丹佛主場 期盼能重返NBA',\n                'date': '2018-11-28 16:24:00',\n                'author': '蔡佳霖',\n                'contents': '今天現身丹佛主場，在中場時間擊鼓助威，和球迷進行互動'\n            },\n            {\n                'url': 'https://opinion.udn.com/opinion/story/12067/3506294',\n                'title': '從太陽花到韓流：未挑戰政經核心，只會出現鬼打牆的鐘擺效應',\n                'date': None,\n                'author': '陳柏謙',\n                'contents': '九合一大選結果全面潰敗，縣市首長從選前13席崩盤到僅守住6席'\n            },\n            {\n                'url': 'https://stars.udn.com/star/story/10090/3507027',\n                'title': '自嘲和李進良「大餅跟鳥」 小禎妙答李婉鈺田欣誰戰力強',\n                'date': '2018-11-28 17:11:00',\n                'author': '梅衍儂',\n                'contents': '很心疼小禎，願意把生活裡的體驗用演技來給大家看'\n            },\n            {\n                'url': 'https://style.udn.com/style/story/8065/3500832',\n                'title': '《我身後的陶斯》林世美長髮時浪漫感十足 但短髮的她更有看頭',\n                'date': '2018-11-25 10:02:00',\n                'author': '魏家娸',\n                'contents': '第二女主角林世美在戲中深情愛著蘇志燮的情感也令人為之動容'\n            }\n        ]\n        for layout in layouts:\n            nsoup = NewsSoup(layout['url'], refresh=True, proxy_first=True)\n            self.assertEqual('udn', nsoup.channel)\n            self.assertIn(layout['title'], nsoup.title())\n            if layout['date'] is not None:\n                self.assertEqual(layout['date'], nsoup.date().strftime(self.dtf))\n            else:\n                self.assertEqual(layout['date'], None)\n            self.assertEqual(layout['author'], nsoup.author())\n            self.assertIn(layout['contents'], nsoup.contents())\n"
  }
]