9
9
import logging
10
10
import smtplib
11
11
import datetime
12
+ from operator import itemgetter
12
13
from email .mime .text import MIMEText
13
14
from email .header import Header
14
15
21
22
format = '%(name)s %(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'
22
23
)
23
24
logger = logging .getLogger ('Bot' ) # 设置log名称
24
-
25
- API = {
26
- 'events' : 'https://api.github.com/users/你的github用户名/received_events/public'
27
- }
28
-
29
25
# github帐号
30
26
ACCOUNT = {
31
27
'username' : '' ,
32
28
'password' : ''
33
29
}
34
30
31
+ API = {
32
+ 'events' : 'https://api.github.com/users/{username}/received_events/public' .format (username = ACCOUNT ['username' ])
33
+ }
34
+
35
35
# 发送邮件,邮箱的信息
36
36
MAIL = {
37
37
'mail' : '' , # 发送邮件的邮箱地址
59
59
<th>starred日期</th>
60
60
<th>项目star数量</th>
61
61
</tr>
62
- {starred_info }
62
+ {project_info_string }
63
63
</table>
64
64
"""
65
65
@@ -111,42 +111,53 @@ def analyze(json_data):
111
111
return result_data
112
112
113
113
114
- def make_content ( ):
114
+ def get_stars ( data ):
115
115
"""
116
- 生成发布邮件的内容
116
+ 获取stars数量
117
117
"""
118
- json_data = get_data ()
119
- data = analyze (json_data )
120
- content = []
121
-
118
+ project_info_list = []
122
119
for fi_data in data :
123
- user = fi_data ['actor' ]['login' ]
124
- user_url = 'https://github.com/' + user
125
- avatar_url = fi_data ['actor' ]['avatar_url' ]
126
- repo_name = fi_data ['repo' ]['name' ]
127
- repo_url = 'https://github.com/' + repo_name
128
- date_time = fi_data ['date_time' ]
120
+ project_info = dict ()
121
+ project_info ['user' ] = fi_data ['actor' ]['login' ]
122
+ project_info ['user_url' ] = 'https://github.com/' + project_info ['user' ]
123
+ project_info ['avatar_url' ] = fi_data ['actor' ]['avatar_url' ]
124
+ project_info ['repo_name' ] = fi_data ['repo' ]['name' ]
125
+ project_info ['repo_url' ] = 'https://github.com/' + project_info ['repo_name' ]
126
+ project_info ['date_time' ] = fi_data ['date_time' ]
129
127
try :
130
128
repo_stars = requests .get (fi_data ['repo' ]['url' ], timeout = 2 ).json ()
131
129
if repo_stars :
132
- repo_stars = repo_stars ['stargazers_count' ]
130
+ project_info [ ' repo_stars' ] = int ( repo_stars ['stargazers_count' ])
133
131
else :
134
- repo_stars = '未知数'
132
+ project_info [ ' repo_stars' ] = - 1
135
133
except Exception as e :
136
- repo_stars = '未知数'
137
- logger .warning (u'获取:{} 项目星数失败——{}' .format (repo_name , e ))
138
- starred_info = """<tr>
139
- <td><img src={avatar_url} width=32px></img></td>
140
- <td><a href={user_url}>{user}</a></td>
141
- <td><a href={repo_url}>{repo_name}</a></td>
142
- <td>{date_time}</td>
143
- <td>{repo_stars}</td>
144
- </tr>
145
- """ .format (user = user , repo_name = repo_name ,
146
- repo_url = repo_url , user_url = user_url ,
147
- avatar_url = avatar_url , repo_stars = repo_stars ,
148
- date_time = date_time )
149
- content .append (starred_info )
134
+ project_info ['repo_stars' ] = - 1
135
+ logger .warning (u'获取:{} 项目星数失败——{}' .format (
136
+ project_info ['repo_name' ], e ))
137
+ finally :
138
+ project_info_list .append (project_info )
139
+ project_info_list = sorted (project_info_list , key = itemgetter ('repo_stars' ), reverse = True )
140
+ return project_info_list
141
+
142
+
143
+ def make_content ():
144
+ """
145
+ 生成发布邮件的内容
146
+ """
147
+ json_data = get_data ()
148
+ data = analyze (json_data )
149
+ content = []
150
+ project_info_list = get_stars (data )
151
+ for project_info in project_info_list :
152
+ project_info_string = """<tr>
153
+ <td><img src={avatar_url} width=32px></img></td>
154
+ <td><a href={user_url}>{user}</a></td>
155
+ <td><a href={repo_url}>{repo_name}</a></td>
156
+ <td>{date_time}</td>
157
+ <td>{repo_stars}</td>
158
+ </tr>
159
+ """ .format (** project_info )
160
+ content .append (project_info_string )
150
161
return content
151
162
152
163
@@ -159,7 +170,7 @@ def send_email(receivers, email_content):
159
170
160
171
# 三个参数:第一个为文本内容,第二个 html 设置文本格式,第三个 utf-8 设置编码
161
172
message = MIMEText (
162
- CONTENT_FORMAT .format (starred_info = '' .join (email_content )),
173
+ CONTENT_FORMAT .format (project_info_string = '' .join (email_content )),
163
174
'html' , 'utf-8'
164
175
)
165
176
message ['From' ] = Header (u'Github机器人' , 'utf-8' )
0 commit comments