python_微信公眾號(hào)獲取經(jīng)緯度

本文只做微信公眾號(hào)測(cè)試用

一、功能

關(guān)注微信公眾號(hào) 西安氣象愛(ài)好者,發(fā)送通過(guò)高德地圖分享的鏈接地址,格式為 http://surl.amap.com/xxxxxxxxxxxxx ,公眾號(hào)將自動(dòng)回復(fù)對(duì)應(yīng)地點(diǎn)的經(jīng)度和緯度,可獲取自己定位位置的經(jīng)緯度,也可搜索地圖任意位置獲取經(jīng)緯度。

二、操作方法:

1、在高德地圖APP上定位或者搜索地址,選擇分享,按住下圖紅圈即可復(fù)制鏈接。


獲取鏈接地址

2、將復(fù)制的鏈接發(fā)送給微信公眾號(hào)“西安氣象愛(ài)好者”,獲取地址數(shù)據(jù)。

如:
三、python代碼:

1、高德地圖鏈接解析:原理就是這個(gè)鏈接地址會(huì)經(jīng)過(guò)302跳轉(zhuǎn),跳轉(zhuǎn)的中間地址包括了經(jīng)度和緯度,只要通過(guò)requests庫(kù)獲取到,再由正則表達(dá)式提取就可以。
(實(shí)際上,如果用瀏覽器打開鏈接,經(jīng)緯度也會(huì)直接出現(xiàn)在最終的200狀態(tài)的地址中,但瀏覽器地址欄的地址最終會(huì)被js代碼替換掉,禁用js就不會(huì)被替換)

禁用js后瀏覽器打開鏈接地址

不禁用js打開同一個(gè)鏈接地址
import re
import requests

def dd2dms(deg):
    d = int(float(deg))
    md = abs(float(deg) - d) * 60
    m = int(md)
    sd = (md - m) * 60
    return '{:d}° {:d}′ {:.7f}″'.format(d, m, sd)

headers = {
    "User-Agent": "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
    "Referer": "https://www.amap.com"
}

def Locate(url_string):
    amapUrl = r'^http://surl.amap.com/\w{13}$'
    if re.match(amapUrl, url_string) is None:
        return 'NOT FOUND'

    try:
        url_string = 'https://' + url_string[7:]
        r = requests.head(url_string, stream=True, headers=headers)
        realUrl = r.headers['Location']

        posPattern = r'(\d{1,3}\.\d{6,20}),(\d{1,3}\.\d{6,20})'
        jingdu = re.search(posPattern, realUrl).group(2)
        # print(jingdu)

        weidu = re.search(posPattern, realUrl).group(1)
        # print(weidu)
        result = '({0},{1})\r\n({2},{3})'.format(weidu, jingdu, dd2dms(weidu), dd2dms(jingdu))

        return result

    except BaseException as e:
        print(e)
        return 'NOT FOUND'

if __name__ == '__main__':
    url_string = 'http://surl.amap.com/3U9wY_0957DEP'
    print(Locate(url_string))

2、微信公眾號(hào)自動(dòng)回復(fù)
也是用python來(lái)做微信公眾號(hào)的后臺(tái)接入,web.py模塊比較簡(jiǎn)單,寫兩個(gè)方法,一個(gè)接收一個(gè)回復(fù)。
GET:

    def GET(self):
        try:
            data = web.input()
            if len(data) == 0:
                return "hello, this is handle view"
            signature = data.signature
            timestamp = data.timestamp
            nonce = data.nonce
            echostr = data.echostr
            token = "xxxxxxxxxxx"
            list1 = [token,timestamp,nonce]
            list1.sort()
            str_list1 = ''.join(list1)
            print(str_list1)
            sha1 = hashlib.sha1()
            sha1.update(str_list1.encode('utf-8'))
            hashcode = sha1.hexdigest()
            print("handle/GET func: hashcode, signature: ", hashcode, signature)
            if hashcode == signature:
                return echostr
            else:
                return ""
        except Exception as Argument:
            return Argument

POST:

   def POST(self):
        str_xml = web.data()
        xml = etree.fromstring(str_xml)
        msgType = xml.find("MsgType").text
        fromUser = xml.find("FromUserName").text
        toUser = xml.find("ToUserName").text
        #如果符合高德鏈接格式則返回經(jīng)緯度,否則返回test+原字符串
        if msgType == 'text':
            getMsg=xml.find("Content").text.strip()
            amapUrl = r'^http://surl.amap.com/\w{13}$'
            if re.match(amapUrl, getMsg) is None:
                content = "test"+ getMsg
            else:
                content=getLocate.Locate(getText)
            render = web.template.render('templates/')
            return render.reply_text(fromUser, toUser, int(time.time()), content)
        elif msgType == 'image':
            pass
        else:
            pass
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容