日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python 通過(guò)微信控制實(shí)現(xiàn)app定位發(fā)送到個(gè)人服務(wù)器再轉(zhuǎn)發(fā)微信服務(wù)器接收

系統(tǒng) 1985 0

考慮到女友的安全問(wèn)題,就做了一個(gè)app實(shí)現(xiàn)定位和服務(wù)器實(shí)現(xiàn)轉(zhuǎn)發(fā)的東西。剛學(xué)python,竟沒(méi)想到用對(duì)象編程會(huì)更加方便,全程過(guò)程式開(kāi)發(fā),代碼有點(diǎn)臃腫,就當(dāng)學(xué)習(xí)下python吧.

效果就是:在微信公眾號(hào)中輸入指定字符比如:”我要知道你的位置”,手機(jī)那端的位置就彈出來(lái)了.主要是講一下思路:先是app實(shí)現(xiàn)定位,當(dāng)微信發(fā)送消息時(shí),消息從微信服務(wù)器轉(zhuǎn)發(fā)到開(kāi)發(fā)者服務(wù)器然后用socket發(fā)送指定消息來(lái)通知app,I need your location,app接收到消息之后再發(fā)送給開(kāi)發(fā)服務(wù)器(app 開(kāi)service實(shí)現(xiàn)后臺(tái)全程運(yùn)行),由于定位信息是經(jīng)緯度,所以用了高德API,但是發(fā)現(xiàn)谷歌地球的定位是準(zhǔn)的,可能和android內(nèi)置的定位有關(guān)系吧,然后就轉(zhuǎn)換了一下不同地圖的經(jīng)緯度,然后轉(zhuǎn)成位置信息發(fā)送給微信服務(wù)器.

            
import socket
import threading
import os
import requests
from flask import Flask
from flask import request
from bs4 import BeautifulSoup
import json
global sock
#實(shí)現(xiàn)通過(guò)微信控制手機(jī)app定位發(fā)送給服務(wù)器顯示位置信息
loca = "welcome"
app = Flask(__name__)
#搭建web服務(wù)器通過(guò)socket發(fā)送消息給app索取定位信息,然后轉(zhuǎn)發(fā)給微信服務(wù)器
@app.route("/wx_check",methods=["POST","GET"]) #這里用了一個(gè)Web框架  "/wx_check" 是你在微信中填的開(kāi)發(fā)者服務(wù)器路徑
def application():
  openID = request.args['openid'] # 微信發(fā)的,詳見(jiàn)開(kāi)發(fā)者文檔
  soup = BeautifulSoup(request.data,"html.parser")
  content = soup.find("content") # content 是微信用戶發(fā)的消息,可用來(lái)驗(yàn)證用戶
  sock.send(b"getlocation") # 發(fā)送信息通知android
  global loca
  while True: #手動(dòng)阻塞
    if loca != "welcome":
      break
  back = loca
  loca = "welcome"
  return """
  
            
              
                %s
              
              
                qqmsssssssss
              
              
                12345678
              
              
                text
              
              
                %s
              
            
            """%(openID,back)
def start():
  app.run('0.0.0.0',80)
threading.Thread(target=start,args=()).start()
# 與app進(jìn)行socket連接 接受定位信息 另外用到經(jīng)緯度兼容轉(zhuǎn)換API 和經(jīng)緯度轉(zhuǎn)位置API
def tcplink(sock,addr):
  try:
    print('Accept new connection from %s:%s...' % addr)
    while True:
      sock.setblocking(True)
      data = sock.recv(1024)
      location = data.decode('utf-8')
      print("client:"+location)
      # 以下進(jìn)行經(jīng)緯度 地圖信息的轉(zhuǎn)換 loca為app所在地址接上面的 堵塞
      if location != "":
        global loca
        print(location)
        lis = location.split(",")
        location = "%s,%s"%(lis[1],lis[0])
        print(location)
        xml = requests.get("http://api.gpsspg.com/convert/coord/?oid=xxxx&key=xxxxxxxxxxxxxxxxxx&from=0&to=3&latlng=%s&output=xml"%location)
        soup = BeautifulSoup(xml.text,"html.parser")
        print(soup.text)
        lat= soup.find("lat").string
        lng= soup.find("lng").string
        location = "%s,%s"%(lng,lat)
        print("after"+location)
        a = requests.get("http://restapi.amap.com/v3/geocode/regeo?key=xxxxxxxxxxxxxxxxx&location="+location)
        loca = a.text
        obj = json.loads(loca)
        loca = obj["regeocode"]["formatted_address"]
      else:
        print("socket is close,waiting new accept")
        sock.close()
        break
  except Exception as e:
    location = "raise error"
  finally:
    pass

try:
  s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  s.bind(('0.0.0.0',9999))
  s.listen(10)
  print('waiting to connect')
  while True:
    sock,addr = s.accept()  #等待app來(lái)連接
    t = threading.Thread(target=tcplink,args=(sock,addr))
    t.start()
finally:
  print("ending")
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
以下是android端代碼:

# 獲取定位,其實(shí)就是獲取經(jīng)緯度
private Location getLastKnownLocation() {
    LocationManager mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
    List
            
               providers = mLocationManager.getProviders(true);
    Location bestLocation = null;
    for (String provider : providers) {
      Location l = mLocationManager.getLastKnownLocation(provider);
      if (l == null) {
        continue;
      }
      if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
        // Found best last known location: %s", l);
        bestLocation = l;
      }
    }
    return bestLocation;
  }

  String provider;
  public void GetLocation(){
    LocationManager mLocationManager;
    Location location = getLastKnownLocation();

//    Log.d("TAG", provider.toString());
    Log.d("TAG", location.toString());
    if (location != null) {
      //獲取當(dāng)前位置,這里只用到了經(jīng)緯度
      String string =location.getLongitude() + ","+ location.getLatitude();
      try {
        OutputStream outputStream = socket.getOutputStream();
        PrintWriter writer = new PrintWriter(outputStream);
        writer.write(string);
        writer.flush();
//       writer.close();
//       socket.shutdownOutput();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
  @SuppressLint("ShowToast") public void Connect(){
    try {
      socket = new Socket();
      socket.connect(new InetSocketAddress("xxx.xxx.xxx.xxx",9999));
      while (true) {
        Log.d("TAG", socket.isConnected()+"");
        InputStream stream = socket.getInputStream(); 
        byte[] b = new byte[11];
        stream.read(b);
        String sb = new String(b);
        if(sb.equalsIgnoreCase("getlocation")){
          GetLocation();
        }else
        {
          OutputStream outoStream = socket.getOutputStream();
          outoStream.write("error code".getBytes());
          socket.shutdownOutput();
        }
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      Log.d("TAG", "error");
      e.printStackTrace();
    }
  }
            
          

總結(jié)

以上所述是小編給大家介紹的Python 通過(guò)微信控制實(shí)現(xiàn)app定位發(fā)送到個(gè)人服務(wù)器再轉(zhuǎn)發(fā)微信服務(wù)器接收位置信息 ,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 拉孜县| 周至县| 隆德县| 昌吉市| 墨江| 襄汾县| 桦甸市| 内乡县| 博罗县| 平阳县| 巴林右旗| 左云县| 张家口市| 土默特右旗| 泉州市| 通渭县| 长岛县| 昭苏县| 伊金霍洛旗| 乌苏市| 墨竹工卡县| 温州市| 赣榆县| 鹤岗市| 德庆县| 仙居县| 蓝山县| 克什克腾旗| 苗栗县| 隆回县| 宿州市| 沂南县| 铁岭县| 凤庆县| 甘孜县| 萨嘎县| 江永县| 黄梅县| 安溪县| 新乐市| 清水县|