微信小程式通過ip獲取使用者所在城市
根據使用者ip獲取地理位置
- 根據使用者ip獲取使用者地理位置, 用爬蟲實現!
- 博主所用的api:
"http://www.ip138.com/ips138.asp?ip="+ ip_addr
- 查詢ip的函式
import requests from lxml import etree # 查詢ip歸屬地 def query_ip_attribution(ip_addr): # 設定使用者代理頭 headers = { # 設定使用者代理頭(為狼披上羊皮) "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36", } target_url = "http://www.ip138.com/ips138.asp?ip="+ ip_addr response = requests.get(target_url, headers = headers).content data_etree = etree.HTML(response) ip_attr = data_etree.xpath('//tr[3]/td/ul/li[1]//text()') ip_attr = ip_attr[0].strip("本站資料:") return {"ip_attr": ip_attr, "ip": ip_addr}
nginx配置
-
nginx負責將請求轉發到django(django在9000埠開啟了服務)
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
- Host包含客戶端真實的域名和埠號;
- X-Real-IP表示客戶端真實的IP;
- X-Forwarded-For這個Header和X-Real-IP類似,但它在多層代理時會包含真實客戶端及中間每個代理伺服器的IP。
- X-Forwarded-Proto表示客戶端真實的協議(http還是https);
Django讀取使用者ip, 查詢並返回結果
from django.http import JsonResponse # 獲取使用者ip def get_ip(request): if 'HTTP_X_FORWARDED_FOR' in request.META: ip =request.META['HTTP_X_FORWARDED_FOR'] else: ip = request.META['REMOTE_ADDR'] return JsonResponse(query_ip_attribution(ip))
微信小程式獲取返回的資料


可以作為開源介面呼叫 (支援http, https, 無需引數)
- 返回ip歸屬介面1: ofollow,noindex">http://fangyuanxiaozhan.com/get_ip
- 返回ip歸屬介面2: https://fangyuanxiaozhan.com/get_ip

小結:
網頁雲音樂, 非常注重分析自己的使用者, 並對使用者的歌單進行個性化定製, 收穫了大量好評, 對於個人開發者, 用複雜的演算法分析使用者, 不太現實,但通過分析使用者所在城市, 對軟體定位做一些優化, 還是很容易實現的