2525import requests
2626
2727SAVE_DIR = 'pictures/'
28- POTD_BASE_URL = 'http://en.wikipedia.org/wiki/Template:POTD/'
28+ POTD_PATH = 'Template:POTD/'
29+ POTD_BASE_URL = 'http://en.wikipedia.org/wiki/' + POTD_PATH
2930POTD_IMAGE_RE = re .compile (r'src="(//upload\..*?)"' )
3031PODT_EARLIEST_TEMPLATE = '2007-01-01'
3132
@@ -84,7 +85,7 @@ def validate_date(text):
8485 test_parts = parts [:]
8586 while len (test_parts ) < 3 :
8687 test_parts .append (1 )
87- date = datetime .datetime (* (int (part ) for part in test_parts ))
88+ date = datetime .date (* (int (part ) for part in test_parts ))
8889 iso_date = date .strftime (ISO_DATE_FMT )
8990 iso_date = iso_date [:1 + len (parts )* 3 ]
9091 if iso_date < PODT_EARLIEST_TEMPLATE :
@@ -95,7 +96,7 @@ def validate_date(text):
9596def gen_month_dates (iso_month ):
9697 first = datetime .datetime .strptime (iso_month + '-01' , ISO_DATE_FMT )
9798 one_day = datetime .timedelta (days = 1 )
98- date = first
99+ date = first . date ()
99100 while date .month == first .month :
100101 yield date .strftime (ISO_DATE_FMT )
101102 date += one_day
@@ -115,6 +116,26 @@ def gen_dates(iso_parts):
115116 yield iso_parts
116117
117118
119+ def get_picture_urls (dates , verbose = False , save_fixture = False ):
120+ urls = []
121+ count = 0
122+ for date in dates :
123+ try :
124+ url = get_picture_url (date )
125+ except NoPictureForDate as exc :
126+ if verbose :
127+ print ('*** {!r} ***' .format (exc ))
128+ continue
129+ count += 1
130+ if verbose :
131+ print (format (count , '3d' ), end = ' ' )
132+ print (url .split ('/' )[- 1 ])
133+ else :
134+ print (url )
135+ urls .append (url )
136+ return urls
137+
138+
118139def parse_args (argv ):
119140 parser = argparse .ArgumentParser (description = main .__doc__ )
120141 date_help = 'YYYY-MM-DD or YYYY-MM or YYYY: year, month and day'
@@ -123,6 +144,8 @@ def parse_args(argv):
123144 help = 'maximum number of items to fetch' )
124145 parser .add_argument ('-u' , '--url_only' , action = 'store_true' ,
125146 help = 'get picture URLS only' )
147+ parser .add_argument ('-f' , '--fixture_save' , action = 'store_true' ,
148+ help = 'save data for local test fixture' )
126149 parser .add_argument ('-v' , '--verbose' , action = 'store_true' ,
127150 help = 'display progress information' )
128151 args = parser .parse_args (argv )
@@ -145,34 +168,14 @@ def parse_args(argv):
145168 return dates , args
146169
147170
148- def get_picture_urls (dates , verbose = False ):
149- urls = []
150- count = 0
151- for date in dates :
152- try :
153- url = get_picture_url (date )
154- except NoPictureForDate as exc :
155- if verbose :
156- print ('*** {!r} ***' .format (exc ))
157- continue
158- count += 1
159- if verbose :
160- print (format (count , '3d' ), end = ' ' )
161- print (url .split ('/' )[- 1 ])
162- else :
163- print (url )
164- urls .append (url )
165- return urls
166-
167-
168171def main (argv , get_picture_urls ):
169172 """Get Wikipedia "Picture of The Day" for date, month or year"""
170173
171174 dates , args = parse_args (argv )
172175
173176 t0 = time .time ()
174177
175- urls = get_picture_urls (dates , args .verbose )
178+ urls = get_picture_urls (dates , args .verbose , args . fixture_save )
176179
177180 elapsed = time .time () - t0
178181 if args .verbose :
0 commit comments