Python – 使用 Google Map API (2) – 解析結果

解析雷達搜尋傳回來的 json 物件

上一篇 Python – 使用Google Map API(1) – 雷達搜尋 中最後提到,將回傳的內容print出來後得到下方的結果:

{'html_attributions': [], 'status': 'OK', 'results': [{'place_id': 'ChIJSTLZ6barQjQR7OeldE1QDsU', 'id': '09bd306d8a6fff4ed4920a843bfffb77405c4dbc', 'reference': 'CmRSAAAAbulvhVx0YEexX2M3Fi3BtxLea2U8_7Ruq1HnivcsnhQfnbur1TxVfdKCFSICFQeUyoOsGnvZLDHHHzNaP7QN__fJ4LL9WNdqW2pRPRhqsUKG8ZAKYm7puNkundjgFlPTEhARhMUPDUPBbAqDYGP6G3ddGhSaoLSfPYT4cLtjcxW72QReaX93yw', 'geometry': {'location': {'lng': 121.5651166, 'lat': 25.0338119}}}, {'place_id': 'ChIJraeA2rarQjQRcsQVAszSNog', 'id': '24711f6d1d5600fb77e7fe680d251776da27bc56', 'reference': 'CmRSAAAACT67OQqRIlpQmduE4RAFWcqxSXhEbt3gZO4SYGTwLpKbZXZu30OBpb4C8D5ncJwDtMsE13xuEIqDAqAayuIOfRQSzDq3hFmdKnaWsKSI62s7LtEQSfCs1TXQO6OxehaVEhDG_WnFgjmK8QwaV_v8ZaDvGhSghBE7BlQ14yWAwQvaGYZy3oXriA', 'geometry': {'location': {'lng': 121.56481, 'lat': 25.033718}}}, {'place_id': 'ChIJSTLZ6barQjQRDNycA51cBq4', 'id': 'cdff9d8fc20ef48d0f10f3227e890d97ed3c8ce2', 'reference': 'CmRSAAAAm1FvUZQ0fWLwYXD4COXlRNfNS3KJqs9B7AdMbjthAfy0aHB6fut6Uf8MbLd9vpQoTlLr0JznkXjMRVQoMiGarDO-GHEh4DLAGOs66F8F5L5g6DU-_TgliEgsXQuyf9-tEhADSx7IIYzZGUEicpsO4CckGhT20WcmEFlbas7zM4eFHkGDvE1cjw', 'geometry': {'location': {'lng': 121.5645391, 'lat': 25.0334612}}}, {'place_id': 'ChIJ1S3Z6barQjQRKb4ubuIujDg', 'id': '5aec3fa9fee319e70950b8b265622a0adf51e8e2', 'reference': 'CmRRAAAAibD4kyOb2YztYpfYlSYiSnDYSjSgrjLL51cI0IbKHArB_dQUveca4MWIwaXxjR9D5lRxQStyZeuU2CazfKuv-3hjCejKJZuFG6lVIVryDY4mh8rvWgMOtgN80T8cCYJSEhB1BghYVb_PoZ17kPRgjxXJGhQ96erXB8xywkj9bEWtBPN0o-jkuw', 'geometry': {'location': {'lng': 121.5638627, 'lat': 25.0334962}}}, {'place_id': 'ChIJNzLZ6barQjQReRr0AwrDlfI', 'id': '64d339a0714893fa6879639e28828563ba9409de', 'reference': 'CmRSAAAAplF_qWllM9uLZU6Z8M_wgo_GHErDBYwXtAknAYtYQ-xgfQX_bLAWBBT9IVTxpUI-9BTN0xvxcBt-cHPGe5cDtNMqEGfN78sDJYKnPwvDKLNFmYNbsQaMm-fPWImw4eKXEhB3q8dK0bCg586TexrYSiEdGhRe2fDMyupgMccnLxCuTYNwiwg-uA', 'geometry': {'location': {'lng': 121.564101, 'lat': 25.033493}}}, {'place_id': 'ChIJrXJz7K2rQjQRis4azcE0bl0', 'id': 'b3055b2436ef8135d9ba12e8bb1abfcb0a07351a', 'reference': 'CmRRAAAAPC1Bv9Gw9B_IxUAL-ThPIV-E4G37rYJqWbw8TCTYQK1rN6yVacSS9sID2WdUtptvlXGziZcvtj7l_KLIOxCSnk78uJ3xWNwDlZXKD7ZSZYMPzktNyL8yA8cHHQth1_kjEhABPqmb0iD2LmijQI0MSkwXGhQJdueeyKUT3dMnhtOiwlT-escUmw', 'geometry': {'location': {'lng': 121.5648144, 'lat': 25.0335615}}}, {'place_id': 'ChIJO8RPJ7erQjQRK7lBH_vJJQs', 'id': 'e7038e4be482c4f18c7776a505999d3769c08015', 'reference': 'CmRRAAAAno6LB7BiEpmHILy7lMjvImr1_VpVQbonyJPduFaHoi50ZlLZvwdzDwjiuy4BHnIjE_D0095Lc_nGnHQln2ApukT4jug00vlEsNW1OTIftTwVdsybe0kWx6eLDpBM4JiaEhCsx61tHrcilHVrw0gPKGoXGhQrR3niCYNznqbK4Qn6JpqG1tCkEg', 'geometry': {'location': {'lng': 121.564461, 'lat': 25.0338915}}}, {'place_id': 'ChIJUwMfwrarQjQRTg3KGHwh1gU', 'id': '5fc15ea7ded0cbf6c450e61eb60ac30bd19aaf92', 'reference': 'CmRRAAAAfrv4l4ihJEuwyq9ducmmdt0RH_Z5bJJTJQgGYHTefmZSOjl7_ti7iNeZJjzFc5gLabIdzkvdXhf4TARUf4w1OR7o1Tmlsh4E-PWC6koTwZNiivnaPxOIpDa50MDLDmGsEhBbp0wWEea6Z6fIIVg0gDp2GhSBXaaHeiWIVcquFsGXTZ02ZaTfWw', 'geometry': {'location': {'lng': 121.5641948, 'lat': 25.0333792}}}, {'place_id': 'ChIJN6uq3rarQjQR12G5vIYbHAw', 'id': 'c89fd501af56ddeb6844e3f23e65c1c9120c2d49', 'reference': 'CmRRAAAAPlbRsZY1Thk7MuD1m_Dluyzs0F_RSDcrcNtDBnrfZJyhItZF4NqR6AhbEy4IX_LQumwh8vvYMUscTBGttQT2zIYRpLWeNI0XHk1FCyIbyCiNyT5jQ7n0azWDQeC2YQiVEhDoKE6X68MsDYGPuCV8P02LGhSKiN_W_GTMfU1u64plzzL_JjVNmQ', 'geometry': {'location': {'lng': 121.5644721, 'lat': 25.0339649}}}, {'place_id': 'ChIJoSJTw7arQjQRnCc70GtKTNs', 'id': 'c6423bce8f2d8f984e621fd0086981ad4aaceea2', 'reference': 'CmRSAAAAsEeZIt1HTM3L8WPFHaCemTLwzObpXdNKXcU1tAGXoupq7ZK1Eky2oINI07uXNd–55f_HI_EcvLuV1PCDIeXieOjjJKjgWTsx4ek6J4u6Zcqb0xhP_yj63u8LScN01AvEhBgjKn_0EpKjlJAyfn8RXq9GhS6WNbtnJGTXCQOd3mUkUhbPZTaBg', 'geometry': {'location': {'lng': 121.5644412, 'lat': 25.0336347}}}, {'place_id': 'ChIJsVahxLarQjQRfkqE8XAR_9E', 'id': '80142f8b863f944054639597685da4dc180b60cb', 'reference': 'CmRSAAAA9DofkcecvBbsXclrzD9TrguQsl7Fw43GZGSNQlBdOuyHx6eZUceo8hfUEImoq7JQKCeovDd_29SrNGzCCy-Jp2dKYAol8TRfLfX1SjcPzQAL93wVEgkBPu-Nh6hb_tkpEhCpBhVcasoveJ7Qc6ytTq28GhQI2mSe_IzEIw8cedGIVFPoXAvXog', 'geometry': {'location': {'lng': 121.5644932, 'lat': 25.0335639}}}, {'place_id': 'ChIJMQANxbarQjQRtrPUHgvc_F4', 'id': '46000da8d74a1f3e7269e9b257f05b7077c95e79', 'reference': 'CmRRAAAA1W-e2Pjy2RElOjCoPtnyguJotI_iHaqzGDex8fJEp0sOgybjphCn-PkwJVsxb7I4CM-iZpI75L5sQGXwpaaL3twFBritvq1eHC7fkBcLMTmdGdvK4QevISPS5chmJFSpEhAErtzFHR93_hcWNNM6vgfNGhRDDW6WOy2Y1WpBHrwT_L7rm44f8A', 'geometry': {'location': {'lng': 121.5647292, 'lat': 25.0334375}}}]}

view raw
radar_results.text
hosted with ❤ by GitHub

首先我們把這些內容丟到 json editor 來看看:

*線上 json editor 的版本很多,我就用我習慣的平台來做。

1
(圖1)複製貼上後的樣子。
2
(圖2)按下左上放自動整理按鈕之後。

整理完之後再按下中間的統計按鈕,會看到有三個根元素(圖3),分別是「html attributions」、「status」、「results」。(這是雷達搜尋的結果,其他搜尋方式可能會有所不同。)

其中要拿來解析的部分就是 results,從圖3可以看到,results 是一個 list,裡面共有12個項目,表示我們在上一篇文章裡面執行:以台北 101 為中間、半徑 100 公尺、被標記為 cafe 的地點共有 12 個。

3
(圖3)按下統計按鈕之後可看到有三個根元素。
4
(圖4)進一步打開results可以看到裡面的細項。

進一步打開 results,可以看到裡面是 12 個 dict 格式 (圖4)。

每一個 dict 內有 4 個項目,其中我們接下來會用到的只有「place_id」。

根據官方文件的說明,「id」跟「reference」都已經被「place_id」取代,而「geometry」則是下一個步驟會再出現一次,所以也暫時不用裡他。


看到這邊也許會有疑惑。

不是說會找出附近的咖啡店嗎?怎麼解析到目前為止只看到一堆編碼?

其實有別的方法可以直接解出店名跟地址等等的資料,但為什麼我要從雷達搜尋開始呢?

因為雷達搜尋一次可以回傳最多 200 個結果,也就是說你可以調整你的半徑範圍,在結果小於兩百的情況下,理論上你可以找到這個範圍內,Google 所標記的所有咖啡廳。

而其他功能,雖然可以直接給你詳細資料,但一次只能給你 20 個結果,要繼續往下看,要代入一個叫做「pagetoken」的參數,Google 就會給你再往下的 20 筆。

兩者的不同在於,每一天免費搜尋的次數是有限制的,當然一次拿到比較多筆比較好。

不過,巴特,西卡西…

Google官方部落格說,因為這個功能沒人要用,所以要在 2018 年 6 月 30 日關閉了,不過大家不用擔心,有另外的功能可以取代。

雖然說別的功能確實可以完全取代雷達搜群,但這其實就是一個變相漲價,因為別的功能一次只能回傳 20 筆,用量大的人勢必要繳一些錢給 Google。

所以如果你有需求的朋友,請快點在 2018/06/30 之前把你要的資料都抓下來吧。

下一篇我們來說,如何用「place_id」取得詳細的地點(店家)資料。

Python – 使用 Google Map API (2) – 解析結果 有 “ 2 則迴響 ”

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s