This commit is contained in:
yumoqing 2021-02-25 20:20:42 +08:00
commit d2a15f7780
4 changed files with 70 additions and 3 deletions

View File

@ -8,4 +8,4 @@ class Background(Thread):
self.__kw = kw self.__kw = kw
def run(self): def run(self):
self.__callee(*self.__args, **self.__kw) return self.__callee(*self.__args, **self.__kw)

View File

@ -40,7 +40,7 @@ def find_players(port):
#设置阻塞 #设置阻塞
#udpCliSock.setblocking(2) #udpCliSock.setblocking(2)
#设置超时时间 #设置超时时间
udpCliSock.settimeout(0.5) udpCliSock.settimeout(5)
udpCliSock.bind(('', 0)) udpCliSock.bind(('', 0))
udpCliSock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) udpCliSock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
udpCliSock.sendto(b'findplayers', ('255.255.255.255',port)) udpCliSock.sendto(b'findplayers', ('255.255.255.255',port))

63
appPublic/iplocation.py Normal file
View File

@ -0,0 +1,63 @@
import os
import sys
from bs4 import BeautifulSoup
from appPublic.http_client import Http_Client
from appPublic.sockPackage import get_free_local_addr
public_headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36"
}
def ipip(ip):
# ipip.net
api= f"http://freeapi.ipip.net/{ip}"
hc = Http_Client()
r= hc.get(api, headers=public_headers)
return {
'country':r[0],
'city':r[2]
}
def iplocation(ip):
# apikey come from
# https://app.apiary.io/globaliptv/tests/runs
# using my github accout
apikey='c675f89c4a0e9315437a1a5edca9b92c'
api = f"https://www.iplocate.io/api/lookup/{ip}?apikey={apikey}",
hc = Http_Client()
r= hc.get(api, headers=public_headers)
return r
def ipaddress_com(ip):
url = f'https://www.ipaddress.com/ipv4/{ip}'
hc = Http_Client()
r = hc.get(url, headers=public_headers)
bs = BeautifulSoup(r, 'html.parser')
section = bs.find_all('section')[0]
tds = section.find_all('td')
d = {
"country":tds[6].contents[1].split(' ')[0],
"city":tds[8].contents[0],
"lat":float(tds[10].contents[0].split(' ')[0]),
"lon":float(tds[11].contents[0].split(' ')[0])
}
return d
def get_ip_location(ip):
apis = {
"ipaddress":ipaddress_com,
"ipip.net":ipip,
"iplocation":iplocation,
}
hc = Http_Client()
for k,v in apis.items():
try:
r = v(ip)
return r
except:
pass
if __name__ == '__main__':
print(get_free_local_addr())
if len(sys.argv) > 1:
info = get_ip_location(sys.argv[1])
print(info)

View File

@ -4,7 +4,7 @@ try:
import ujson as json import ujson as json
except: except:
import json import json
from jinja2 import Environment,FileSystemLoader from jinja2 import Environment,FileSystemLoader, BaseLoader
import codecs import codecs
from appPublic.argsConvert import ArgsConvert from appPublic.argsConvert import ArgsConvert
from appPublic.dictObject import DictObject from appPublic.dictObject import DictObject
@ -12,6 +12,10 @@ def isNone(obj):
return obj is None return obj is None
def string_template_render(tmp_string, data):
rtemplate = Environment(loader=BaseLoader()).from_string(myString)
return rtemplate.render(**data)
class MyTemplateEngine: class MyTemplateEngine:
def __init__(self,pathList,file_coding='utf-8',out_coding='utf-8'): def __init__(self,pathList,file_coding='utf-8',out_coding='utf-8'):
self.file_coding = file_coding self.file_coding = file_coding