[Tutor] 2016-02-03 Filter STRINGS from urllib and Pass as VARAIBLE within PYTHON script
Peter Otten
__peter__ at web.de
Wed Feb 3 04:34:42 EST 2016
knnleow GOOGLE wrote:
> advice on how to filter VARIABLES from output below.
>
> 01. need to strip out
> BEGIN_STRINGS b'{ and
> END_STRINGS }\n'
In b'{...}' the b prefix indicates that you are dealing with a byte string.
You have to decode it and then you can use the json module to parse the
data:
>>> import urllib.request, json
>>> data = urllib.request.urlopen(
... "http://freegeoip.net/json/222.187.222.220").read()
>>> data
b'{"ip":"222.187.222.220","country_code":"CN","country_name":"China","region_code":"31","region_name":"Shanghai
Shi","city":"Shanghai","zip_code":"","time_zone":"Asia/Shanghai","latitude":31.0456,"longitude":121.3997,"metro_code":0}\n'
>>> data = data.decode()
If the above fails with a UnicodeDecodeError you have to provide the actual
encoding.
>>> data
'{"ip":"222.187.222.220","country_code":"CN","country_name":"China","region_code":"31","region_name":"Shanghai
Shi","city":"Shanghai","zip_code":"","time_zone":"Asia/Shanghai","latitude":31.0456,"longitude":121.3997,"metro_code":0}\n'
> 02. need to filter out these FIELDS
> FIELD 1 "ip":"222.187.222.220"
> FIELD 2 "country_code":"CN"
> FIELD 3 "country_name":"China"
> FIELD 6 "city":"Shanghai"
> FIELD 8 "time_zone":"Asia/Shanghai"
>>> data = json.loads(data)
>>> data["city"]
'Shanghai'
> 03. need to feed this into python script so as to generate a HTML File
> by date script was run. example "/fail2ban/2016-01-31.html"
Instead of doing this manually you should pick one of the many templating
languages out there.
> i am doing this using shell script today. will like to get this working
> with python.
>
> regards,
> kuenn
>
>
> SCRIPT:
> banIP_addrs = set()
> with open("/var/log/fail2ban.log") as fail_log:
> for line in fail_log:
> if("Ban" in line and "fail2ban.actions:
> WARNING" in line and myDate in line):
> words = line.split()
> word6 = words[6]
> #print("word6:" , word6)
> banIP_addrs.add(word6)
> #print("banIP_addrs:" , banIP_addrs)
>
> for i in banIP_addrs:
> #print("i:" , i)
> myGeoip =
> urllib.request.urlopen("http://freegeoip.net/json/" + i).read()
> print(myGeoip)
>
> OUTPUT:
>
>
b'{"ip":"222.187.222.220","country_code":"CN","country_name":"China","region_code":"31","region_name":"Shanghai_Shi","city":"Shanghai","zip_code":"","time_zone":"Asia/Shanghai","latitude":31.0456,"longitude":121.3997,"metro_code":0}\n'
>
b'{"ip":"185.130.5.184","country_code":"LT","country_name":"Republic_of_Lithuania","region_code":"","region_name":"","city":"","zip_code":"","time_zone":"Europe/Vilnius","latitude":56,"longitude":24,"metro_code":0}\n'
> _______________________________________________
More information about the Tutor
mailing list