7
7
from PIL import Image , ImageDraw , ImageFont
8
8
from io import BytesIO
9
9
10
- class User (namedtuple ('User' , ['name' , 'avatar' , 'all_sum_amount' ])):
10
+ class User (namedtuple ('User' , ['name' , 'avatar' , 'all_sum_amount' , 'remark' ])):
11
+ pass
12
+
13
+ class Order (namedtuple ('Order' , ['remark' ])):
11
14
pass
12
15
13
16
manual_sponsors = [
14
- User ('等疾风' , 'https://i0.hdslb.com/bfs/face/b658b5ca52f41e53321d04f978be6784ca6f8687.jpg' , '1000.00' ),
15
- User ('只喝白开水' , 'https://i2.hdslb.com/bfs/face/821b88a24c1319d1fb51b3854884e2f829855c75.jpg' , '100.00' ),
16
- User ('包乾' , '' , '26.90' ),
17
- User ('柿柿如意' , '' , '20.00' ),
18
- User ('Starry' , '' , '100.00' ),
19
- User ('阿哲' , '' , '100.00' ),
20
- User ('Eureka' , '' , '20.00' ),
21
- User ('孙斌' , '' , '200.00' ),
22
- User ('nullptr' , 'https://i0.hdslb.com/bfs/face/effa1ec9bb0f5d09ed415da75129aca9d16092ac.jpg' , '23.30' ),
23
- User ('Fred Song' , '' , '25.00' ),
24
- User ('**振' , '' , '20.00' ),
17
+ User ('等疾风' , 'https://i0.hdslb.com/bfs/face/b658b5ca52f41e53321d04f978be6784ca6f8687.jpg' , '1000.00' , '小彭老师加油,希望给个赞助位' ),
18
+ User ('只喝白开水' , 'https://i2.hdslb.com/bfs/face/821b88a24c1319d1fb51b3854884e2f829855c75.jpg' , '100.00' , '确实快了 30 倍[赞]' ),
19
+ User ('包乾' , '' , '26.90' , '' ),
20
+ User ('柿柿如意' , '' , '20.00' , '请小彭老师喝奶茶' ),
21
+ User ('Starry' , '' , '100.00' , '小彭老师加油!' ),
22
+ User ('阿哲' , '' , '100.00' , '从小彭老师视频里学到太多' ),
23
+ User ('Eureka' , '' , '20.00' , '希望我能赚的多一点,之后发电也就多一点' ),
24
+ User ('孙斌' , '' , '200.00' , '06班孙斌,望越来越好' ),
25
+ User ('nullptr' , 'https://i0.hdslb.com/bfs/face/effa1ec9bb0f5d09ed415da75129aca9d16092ac.jpg' , '23.30' , '小彭老师千古,伟大无需多言' ),
26
+ User ('Fred Song' , '' , '25.00' , '小彭老师早点休息' ),
27
+ User ('**振' , '' , '20.00' , '' ),
28
+ User ('**伟' , '' , '20.00' , '' ),
29
+ User ('**枫' , '' , '26.90' , '' ),
25
30
]
26
31
27
32
def afd_query (which , ** params ):
@@ -39,34 +44,58 @@ def afd_query(which, **params):
39
44
assert res ['ec' ] == 200 , res
40
45
return res ['data' ]
41
46
42
- def afd_query_sponsors ( ):
47
+ def afd_paged_query ( which ):
43
48
i = 1
44
- res = []
45
49
while True :
46
- page = afd_query ('query-sponsor' , page = i )
50
+ page = afd_query (which , page = i )
47
51
n = page ['total_page' ]
48
- for user in page ['list' ]:
49
- res . append ( User ( user [ 'user' ][ 'name' ], user [ 'user' ][ 'avatar' ], user [ 'all_sum_amount' ]))
52
+ for item in page ['list' ]:
53
+ yield item
50
54
if i >= n :
51
55
break
52
56
i += 1
57
+
58
+ def afd_query_orders ():
59
+ order_lut = {}
60
+ for order in afd_paged_query ('query-order' ):
61
+ print (f'{ order ['user_id' ]} : { order ['remark' ]} ' )
62
+ order_lut [order ['user_id' ]] = Order (order ['remark' ])
63
+ return order_lut
64
+
65
+ def afd_query_sponsors ():
66
+ res = []
67
+ order_lut = afd_query_orders ()
68
+ for user in afd_paged_query ('query-sponsor' ):
69
+ user_id = user ['user' ]['user_id' ]
70
+ last_order = order_lut .get (user_id , None )
71
+ if last_order :
72
+ remark = last_order .remark
73
+ else :
74
+ remark = ''
75
+ user_obj = User (user ['user' ]['name' ],
76
+ user ['user' ]['avatar' ],
77
+ user ['all_sum_amount' ],
78
+ remark )
79
+ res .append (user_obj )
53
80
return res
54
81
55
82
def afd_gen_thank_list ():
56
83
sponsors = afd_query_sponsors ()
57
84
sponsors += manual_sponsors
58
85
max_x = 30
59
86
max_y = 30
60
- limit_y = 600
87
+ stride_x = 450
88
+ stride_y = 120
89
+ limit_y = 720
61
90
max_max_y = max_y
62
91
for user in sponsors :
63
- max_y += 100
92
+ max_y += stride_y
64
93
if max_y + 10 >= limit_y :
65
94
max_max_y = max (max_max_y , max_y )
66
95
max_y = 30
67
- max_x += 400
96
+ max_x += stride_x
68
97
max_max_y = max (max_max_y , max_y )
69
- max_max_x = max_x + 400
98
+ max_max_x = max_x + stride_x
70
99
max_y += 10
71
100
img = Image .new ('RGB' , (max_max_x , max_max_y ), color = '#19242e' )
72
101
x = 30
@@ -75,27 +104,38 @@ def afd_gen_thank_list():
75
104
for user in sponsors :
76
105
draw = ImageDraw .Draw (img )
77
106
font = ImageFont .truetype ('/usr/share/fonts/noto-cjk/NotoSansCJK-Medium.ttc' , size = 20 )
107
+ font_small = ImageFont .truetype ('/usr/share/fonts/noto-cjk/NotoSerifCJK-Medium.ttc' , size = 13 )
78
108
if user .avatar :
79
109
avatar = Image .open (BytesIO (requests .get (user .avatar ).content ))
80
- elif os .path .exists (f'/home/bate/下载/wx-{ user .name .replace ('/' , '|' )} .png' ):
81
- avatar = Image .open (f'/home/bate/下载/wx-{ user .name .replace ('/' , '|' )} .png' )
82
110
else :
83
- this_dir = os .path .dirname (os .path .abspath (__file__ ))
84
- avatar = Image .open (os .path .join (this_dir , '../docs/img/favicon.ico' ))
85
- avatar = avatar .resize ((80 , 80 ))
111
+ wx_path = f'/home/bate/下载/wx-{ user .name .replace ('/' , '|' )} .png'
112
+ if os .path .exists (wx_path ):
113
+ avatar = Image .open (wx_path )
114
+ else :
115
+ this_dir = os .path .dirname (os .path .abspath (__file__ ))
116
+ avatar = Image .open (os .path .join (this_dir , '../docs/img/favicon.ico' ))
117
+ avatar = avatar .resize ((90 , 90 ))
86
118
img .paste (avatar , (x , y ))
87
119
draw .text ((x + 100 , y ), f'{ user .name } ' , fill = 'white' , font = font )
88
120
draw .text ((x + 100 , y + 30 ), f'¥{ user .all_sum_amount } ' , fill = '#aaaaaa' , font = font )
89
- print (f'{ user .name } ¥{ user .all_sum_amount } ' )
121
+ remark = user .remark
122
+ if remark :
123
+ remark = remark .rstrip ('。' ).replace ('.。' , ',' )
124
+ draw .text ((x + 100 , y + 60 ), f'{ remark } ' , fill = '#779977' , font = font_small )
125
+ print (f'{ user .name } ¥{ user .all_sum_amount } { remark } ' )
90
126
total += float (user .all_sum_amount )
91
- y += 100
127
+ y += stride_y
92
128
if y + 10 >= limit_y :
93
129
y = 30
94
- x += 400
130
+ x += stride_x
95
131
print (total )
96
132
return img
97
133
98
- img = afd_gen_thank_list ()
99
- file = 'docs/img/thanks.png'
100
- img .save (file )
101
- img .show ()
134
+ def main ():
135
+ img = afd_gen_thank_list ()
136
+ file = 'docs/img/thanks.png'
137
+ img .save (file )
138
+ os .system (f'display { file } ' )
139
+
140
+ if __name__ == '__main__' :
141
+ main ()
0 commit comments