David Blume commited on 2018-01-20 20:18:09
Showing 1 changed files, with 36 additions and 17 deletions.
... | ... |
@@ -39,6 +39,7 @@ import simplejson as json |
39 | 39 |
import cookielib |
40 | 40 |
import xml |
41 | 41 |
import texttime |
42 |
+import operator |
|
42 | 43 |
from datetime import timedelta |
43 | 44 |
|
44 | 45 |
debug = True |
... | ... |
@@ -91,9 +92,12 @@ threshold_color = "FF8C00" |
91 | 92 |
tag_color = "F01000" |
92 | 93 |
|
93 | 94 |
even_background = "F8F8F8" |
94 |
-#even_background = "FFFFFF" |
|
95 | 95 |
odd_background = "E8E8E8" |
96 | 96 |
|
97 |
+even_watermark = "E0E0FF" |
|
98 |
+odd_watermark = "D0D0F0" |
|
99 |
+ |
|
100 |
+ |
|
97 | 101 |
def asciiize( s ): |
98 | 102 |
try: |
99 | 103 |
return s.encode( 'ascii' ) |
... | ... |
@@ -111,9 +115,9 @@ def sendEmail( subject, message, toaddrs, fromaddr='"techcrunch.py" <techcrunch@ |
111 | 115 |
( fromaddr, ", ".join( toaddrs ), subject, message ) ) |
112 | 116 |
smtp.quit() |
113 | 117 |
|
114 |
-def index_id(a_list, elem): |
|
118 |
+def index_id( a_list, op, elem ): |
|
115 | 119 |
try: |
116 |
- return (index for index, item in enumerate( a_list ) if item == elem).next() |
|
120 |
+ return (index for index, item in enumerate( a_list ) if op( item, elem ) ).next() |
|
117 | 121 |
except: |
118 | 122 |
return -1 |
119 | 123 |
|
... | ... |
@@ -125,7 +129,8 @@ def index_id_simple(a_list, elem): |
125 | 129 |
index += 1 |
126 | 130 |
return -1 |
127 | 131 |
|
128 |
-def make_chart_url( time_posted, comment_times, comment_values, retweet_times, retweet_values, met_threshold_pt, bg_color, tag_hit ): |
|
132 |
+def make_chart_url( time_posted, comment_times, comment_values, retweet_times, |
|
133 |
+ retweet_values, threshold_value, is_odd_row, tag_hit ): |
|
129 | 134 |
# comment_times, comment_values = zip( *comments ) |
130 | 135 |
# retweet_times, retweet_values = zip( *retweets ) |
131 | 136 |
|
... | ... |
@@ -154,6 +159,22 @@ def make_chart_url( time_posted, comment_times, comment_values, retweet_times, r |
154 | 159 |
min_retweet_value = min( retweet_values ) |
155 | 160 |
max_retweet_value = max( retweet_values ) |
156 | 161 |
|
162 |
+ met_threshold_pt = -1 |
|
163 |
+ if threshold_value != -1: |
|
164 |
+ met_threshold_pt = index_id( retweet_values, operator.ge, threshold_value ) |
|
165 |
+ if met_threshold_pt == -1 or tag_hit: |
|
166 |
+ # This can happen if threshold_value was set to a number |
|
167 |
+ # because the author or a tag was matched, but the article |
|
168 |
+ # was unpopular. We choose to put a marker at point index 0. |
|
169 |
+ met_threshold_pt = 0 |
|
170 |
+ |
|
171 |
+ if is_odd_row != 0: |
|
172 |
+ bg_color = even_background |
|
173 |
+ watermark_color = even_watermark |
|
174 |
+ else: |
|
175 |
+ bg_color = odd_background |
|
176 |
+ watermark_color = odd_watermark |
|
177 |
+ |
|
157 | 178 |
if len( comment_values ) < 8 and len( comment_values ) > 1: |
158 | 179 |
# max_comment_value *= 2 |
159 | 180 |
pass |
... | ... |
@@ -176,6 +197,11 @@ def make_chart_url( time_posted, comment_times, comment_values, retweet_times, r |
176 | 197 |
','.join( [ str( n ) for n in retweet_values ] ) ) |
177 | 198 |
# TODO: Consider watermark levels, like: |
178 | 199 |
# chm=h,B0B0B0,1,0.3,1|r,E0E0E0,0,0,0.5 |
200 |
+ if max_retweet_value > 0: |
|
201 |
+ threshold_percent = max( 0, min( (float(threshold_value) / max_retweet_value) - 0.01, 1.0 ) ) |
|
202 |
+ else: |
|
203 |
+ threshold_percent = 1.0 |
|
204 |
+ chart_url += "&chm=r,%s,0,0,%1.3f" % ( watermark_color, threshold_percent ) |
|
179 | 205 |
if met_threshold_pt != -1: |
180 | 206 |
if tag_hit: |
181 | 207 |
dot_color = tag_color |
... | ... |
@@ -183,7 +209,7 @@ def make_chart_url( time_posted, comment_times, comment_values, retweet_times, r |
183 | 209 |
else: |
184 | 210 |
dot_color = threshold_color |
185 | 211 |
dot_shape = 'o' |
186 |
- chart_url += "&chm=%s,%s,1,%d,10" % ( dot_shape, dot_color, met_threshold_pt ) |
|
212 |
+ chart_url += "|%s,%s,1,%d,10" % ( dot_shape, dot_color, met_threshold_pt ) |
|
187 | 213 |
chart_url += "&chxt=y,r&chxl=0:|%d|%d|1:|%d|%d&chds=%d,%d,%d,%d,%d,%d,%d,%d" % \ |
188 | 214 |
( min_comment_value, max_comment_value, min_retweet_value, max_retweet_value, |
189 | 215 |
0, max( 7, max_comment_time ), |
... | ... |
@@ -550,17 +576,10 @@ def Make_index_html( yaml_items, weekend_stats, weekday_stats ): |
550 | 576 |
cache_path = os.path.join( localdir, 'cache' ) |
551 | 577 |
|
552 | 578 |
files_to_delete = glob.glob( cache_path + '*.png' ) |
553 |
-# shutil.rmtree( cache_path ) |
|
554 |
-# os.mkdir( cache_path ) |
|
555 | 579 |
|
556 | 580 |
f = file( new_index_fullpath, 'w' ) |
557 | 581 |
f.write( html_head % ( even_background, odd_background ) ) |
558 |
-# f.write( '<div align="center">\n<table cellpadding="4">' ) |
|
559 | 582 |
|
560 |
-# f.write( '<div align="center">\n<table class="legend">\n<tr><th>0:30</th><th>1:00</th><th>1:30</th><th>2:00</th><th>2:30</th><th>3:00</th><th>3:30</th><th>4:00</th></tr><tr>' ) |
|
561 |
-# for median, mean, std_dev in weekday_stats: |
|
562 |
-# f.write( '<td>med=%1.1f μ=%1.1f σ=%1.1f </td> ' % ( median, mean, std_dev ) ) |
|
563 |
-# f.write( '</tr>\n</table></div>\n<br />\n' ) |
|
564 | 583 |
|
565 | 584 |
f.write( '<div align="center">\n<table class="legend">\n<tr><th></th><th>Median</th><th>Mean</th><th>Std. Dev</th><th>Threshold</th></tr>\n' ) |
566 | 585 |
f.write( '<tr><th>Weekday</th><td>%1.1f</td><td>%1.1f</td><td>%1.1f</td><td>%1.1f</td></tr>\n' % ( weekday_stats[2][0], weekday_stats[2][1], weekday_stats[2][2], weekday_stats[2][1] + weekday_stats[2][2] ) ) |
... | ... |
@@ -582,10 +601,10 @@ def Make_index_html( yaml_items, weekend_stats, weekday_stats ): |
582 | 601 |
i['retweet_times'], |
583 | 602 |
i['retweets'], |
584 | 603 |
i['qualified'], |
585 |
- image_index % 2 and even_background or odd_background, |
|
604 |
+ image_index % 2, |
|
586 | 605 |
tag_hit |
587 | 606 |
) |
588 |
-# if i['title'].startswith( 'Verizon To' ): |
|
607 |
+# if i['title'].startswith( 'Too ' ): |
|
589 | 608 |
# print i['title'], i['qualified'], i['retweet_times'] |
590 | 609 |
# print chart_url |
591 | 610 |
image_url = Save_image( chart_url, os.path.join( cache_path, '%d_%d.png' % ( cur_time, image_index ) ) ) |
... | ... |
@@ -694,7 +713,7 @@ if __name__=='__main__': |
694 | 713 |
r_time = item['retweet_times'][i] |
695 | 714 |
if r_time - item['orig_posted'] < 5400: |
696 | 715 |
if item['retweets'][i] >= threshold: |
697 |
- item['qualified'] = i |
|
716 |
+ item['qualified'] = threshold |
|
698 | 717 |
if r_time - item['orig_posted'] >= 3600: |
699 | 718 |
break |
700 | 719 |
|
... | ... |
@@ -702,9 +721,9 @@ if __name__=='__main__': |
702 | 721 |
for item in items: |
703 | 722 |
if item['qualified'] == -1 and len( item['retweet_times'] ) > 0: |
704 | 723 |
if item['author'].lower() in authors_to_post: |
705 |
- item['qualified'] = 0 |
|
724 |
+ item['qualified'] = threshold |
|
706 | 725 |
elif len( set([j.lower() for j in item['tags']]) & tags_to_post ) > 0: |
707 |
- item['qualified'] = 0 |
|
726 |
+ item['qualified'] = threshold |
|
708 | 727 |
|
709 | 728 |
# |
710 | 729 |
# Write out the updated yaml file. |
711 | 730 |