1
+ from collections import namedtuple
1
2
import os
2
3
import requests
3
4
import time
6
7
from PIL import Image , ImageDraw , ImageFont
7
8
from io import BytesIO
8
9
10
+ class User (namedtuple ('User' , ['name' , 'avatar' , 'all_sum_amount' ])):
11
+ pass
12
+
13
+ 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
+ ]
22
+
9
23
def afd_query (which , ** params ):
10
24
user_id = '6256dedc1af911eebf8152540025c377'
11
25
token = os .environ ['AFDIAN_TOKEN' ]
@@ -28,34 +42,49 @@ def afd_query_sponsors():
28
42
page = afd_query ('query-sponsor' , page = i )
29
43
n = page ['total_page' ]
30
44
for user in page ['list' ]:
31
- res .append (user )
45
+ res .append (User ( user [ 'user' ][ 'name' ], user [ 'user' ][ 'avatar' ], user [ 'all_sum_amount' ]) )
32
46
if i >= n :
33
47
break
34
48
i += 1
35
49
return res
36
50
37
51
def afd_gen_thank_list ():
38
- sponsors = list (reversed (afd_query_sponsors ()))
52
+ sponsors = afd_query_sponsors ()
53
+ sponsors += manual_sponsors
54
+ max_x = 30
39
55
max_y = 30
56
+ limit_y = 600
57
+ max_max_y = max_y
40
58
for user in sponsors :
41
59
max_y += 100
60
+ if max_y + 10 >= limit_y :
61
+ max_max_y = max (max_max_y , max_y )
62
+ max_y = 30
63
+ max_x += 400
64
+ max_max_y = max (max_max_y , max_y )
65
+ max_max_x = max_x + 400
42
66
max_y += 10
43
- img = Image .new ('RGB' , (800 , max_y ), color = '#19242e' )
67
+ img = Image .new ('RGB' , (max_max_x , max_max_y ), color = '#19242e' )
44
68
x = 30
45
69
y = 30
46
70
for user in sponsors :
47
71
draw = ImageDraw .Draw (img )
48
72
font = ImageFont .truetype ('/usr/share/fonts/noto-cjk/NotoSansCJK-Medium.ttc' , size = 20 )
49
- avatar = Image .open (BytesIO (requests .get (user ['user' ]['avatar' ]).content ))
73
+ avatar = Image .open (BytesIO (requests .get (user .avatar ).content )) if user .avatar else Image .open (
74
+ os .path .join (os .path .dirname (os .path .abspath (__file__ )), '../docs/img/favicon.ico' ))
50
75
avatar = avatar .resize ((80 , 80 ))
51
76
img .paste (avatar , (x , y ))
52
- draw .text ((x + 100 , y ), f'{ user [ 'user' ][ ' name' ] } ' , fill = 'white' , font = font )
53
- draw .text ((x + 100 , y + 30 ), f'¥{ user [ ' all_sum_amount' ] } ' , fill = '#aaaaaa' , font = font )
54
- print (f'{ user [ 'user' ][ ' name' ] } ¥{ user [ ' all_sum_amount' ] } ' )
77
+ draw .text ((x + 100 , y ), f'{ user . name } ' , fill = 'white' , font = font )
78
+ draw .text ((x + 100 , y + 30 ), f'¥{ user . all_sum_amount } ' , fill = '#aaaaaa' , font = font )
79
+ print (f'{ user . name } ¥{ user . all_sum_amount } ' )
55
80
print (user )
56
81
y += 100
82
+ if y + 10 >= limit_y :
83
+ y = 30
84
+ x += 400
57
85
return img
58
86
59
87
img = afd_gen_thank_list ()
60
88
file = 'docs/img/thanks.png'
61
89
img .save (file )
90
+ img .show ()
0 commit comments