中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • Python如何通過微信控制實現app定位發送到個人服務器再轉發微信服務器接收位置信息

Python如何通過微信控制實現app定位發送到個人服務器再轉發微信服務器接收位置信息

發布時間:2021-07-24 09:21:16 來源:億速云 閱讀:166 作者:小新 欄目:開發技術

這篇文章主要介紹Python如何通過微信控制實現app定位發送到個人服務器再轉發微信服務器接收位置信息,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

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

import socket
import threading
import os
import requests
from flask import Flask
from flask import request
from bs4 import BeautifulSoup
import json
global sock
#實現通過微信控制手機app定位發送給服務器顯示位置信息
loca = "welcome"
app = Flask(__name__)
#搭建web服務器通過socket發送消息給app索取定位信息,然后轉發給微信服務器
@app.route("/wx_check",methods=["POST","GET"]) #這里用了一個Web框架  "/wx_check" 是你在微信中填的開發者服務器路徑
def application():
  openID = request.args['openid'] # 微信發的,詳見開發者文檔
  soup = BeautifulSoup(request.data,"html.parser")
  content = soup.find("content") # content 是微信用戶發的消息,可用來驗證用戶
  sock.send(b"getlocation") # 發送信息通知android
  global loca
  while True: #手動阻塞
    if loca != "welcome":
      break
  back = loca
  loca = "welcome"
  return """
  <xml> 
  <ToUserName>%s</ToUserName> 
  <FromUserName>qqmsssssssss</FromUserName>
  <CreateTime>12345678</CreateTime> 
  <MsgType>text</MsgType> 
  <Content>%s</Content> 
  </xml>"""%(openID,back)
def start():
  app.run('0.0.0.0',80)
threading.Thread(target=start,args=()).start()
# 與app進行socket連接 接受定位信息 另外用到經緯度兼容轉換API 和經緯度轉位置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)
      # 以下進行經緯度 地圖信息的轉換 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來連接
    t = threading.Thread(target=tcplink,args=(sock,addr))
    t.start()
finally:
  print("ending")
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
以下是android端代碼:

# 獲取定位,其實就是獲取經緯度
private Location getLastKnownLocation() {
    LocationManager mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
    List<String> 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) {
      //獲取當前位置,這里只用到了經緯度
      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();
    }
  }

以上是“Python如何通過微信控制實現app定位發送到個人服務器再轉發微信服務器接收位置信息”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

和平县| 黄山市| 织金县| 偏关县| 武清区| 盐山县| 稷山县| 西吉县| 兴义市| 漳浦县| 克拉玛依市| 奉节县| 全南县| 拉孜县| 中方县| 班玛县| 新巴尔虎右旗| 礼泉县| 平定县| 色达县| 镇赉县| 沐川县| 嘉义县| 岳普湖县| 安溪县| 沁阳市| 新蔡县| 六安市| 九江市| 林口县| 平顺县| 彝良县| 琼海市| 延寿县| 紫阳县| 崇仁县| 静乐县| 镇远县| 翼城县| 天水市| 兴化市|