并不复杂,采用https://ip.zxinc.org/api.php的ip地址api,虽然比较慢,但能用。

2020.10.15 更新

前几天签名图的访问量(有记录以来)超过了一万次,昨天抽时间把代码重写了一遍,两年多以前的代码真的是惨不忍睹现在的也好不到哪里去,基本上就是沿着之前的思路,改了几个变量名,增强了可读性,在外表的功能性上来看和以前还应该是一样的。

立个flag:过几天加上随机图功能 然后仔细介绍一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

#!python3

import io
import json
import random
import time

import requests
from flask import (Flask, flash, redirect, render_template, request,send_from_directory, url_for)
from flask_redis import FlaskRedis
from PIL import Image, ImageDraw, ImageFont
from user_agents import parse

app = Flask(__name__)
app.config['REDIS_URL'] = "redis://:dogcatdog@127.0.0.1:6542/0"
rc = FlaskRedis(app, decode_responses=True)
basdog = Image.open('bd.png', 'r')


def get_number():
dog_number = rc.incr('dogg')
return dog_number


def rndColor2():
return (random.randint(1, 144), random.randint(1, 120), random.randint(1, 100))


def get_ip_info(dogip):
canshu = {'ip': dogip, 'type': 'json'}
r = requests.get('https://ip.shanshan-business.com/api.php', params=canshu)
resd = (r.content.decode('utf8'))
res = json.loads(resd[1:])
if res['code'] != 0:
fu = [' ', ' ']
return fu
dog_location = res['data']['location']
dog_ip_fw = '{} - {}'.format(res['data']['ip']['start'], res['data']['ip']['end'])
return [dog_location, dog_ip_fw]


def dog_pic(ip, refer, ua):
"""
docstring
"""
[dog_location, dog_ip_fw] = get_ip_info(ip)
dog_uap = parse(str(ua))
dog_os = dog_uap.get_os()
dog_browser = dog_uap.get_browser()
dog_device = dog_uap.get_device()
dog_num = get_number()
dog_text_1 = '只争朝夕,不负韶华。 IP段 : {}'.format(dog_ip_fw)
dog_text_2 = 'IP地址: {} {}'.format(ip, dog_location)
dog_text_3 = '{}'.format(refer)
dog_text_4 = '浏览器: {} OS: {} 设备: {}'.format(
dog_browser, dog_os, dog_device)
dog_text_5 = '已被访问{}次 北京时间:{}'.format(dog_num, time.ctime())
dog_text_6 = '为庆祝有记录以来访问量已经突破十万次,本签名图即将改版!'
# 开始画图了
image = basdog.copy()
font1 = ImageFont.truetype('/home/yu/.local/share/fonts/仿宋_GB2312.ttf', 14)
font2 = ImageFont.truetype('/home/yu/.local/share/fonts/仿宋_GB2312.ttf', 20)
draw = ImageDraw.Draw(image)
draw.text((10, 30), dog_text_1, font=font2, fill=(255, 0, 0))
draw.text((10, 70), dog_text_2, font=font2, fill=(0, 0, 0))
draw.text((10, 110), dog_text_3, font=font1, fill=rndColor2())
draw.text((10, 150), dog_text_4, font=font2, fill=rndColor2())
draw.text((10, 180), dog_text_5, font=font2, fill=rndColor2())
draw.text((10, 210), dog_text_6, font=font1, fill=rndColor2())
buf = io.BytesIO()
image.save(buf, 'jpeg')
image.close()
buf_str = buf.getvalue()
response = app.make_response(buf_str)
response.headers['Content-Type'] = 'image/jpeg'
return response


@app.route('/')
def index():
dog_ip = request.remote_addr
dog_ua = request.user_agent
dog_uap = parse(str(dog_ua))
dog_os = dog_uap.get_os()
dog_browser = dog_uap.get_browser()
dog_device = dog_uap.get_device()
dog_refer = request.referrer
[dog_location, dog_ip_fw] = get_ip_info(dog_ip)
dog_num = get_number()
dog_text = '只争朝夕 不负韶华 <br>{} {} <br>Hits: {}<br>浏览器: {} OS: {} 设备: {}<br>{}<br>{}\n'.format(dog_ip, dog_location, dog_num, dog_browser, dog_os, dog_device, dog_refer, dog_ip_fw)
return dog_text


@app.route('/img.jpg')
def img():
return dog_pic(str(request.remote_addr), str(request.referrer), request.user_agent)


if __name__ == "__main__":
app.run(debug=True)