| 
									
										
										
										
											2013-11-10 22:03:16 +01:00
										 |  |  | from datetime import datetime | 
					
						
							| 
									
										
										
										
											2013-12-01 16:41:24 +01:00
										 |  |  | import re | 
					
						
							| 
									
										
										
										
											2013-11-04 21:47:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | categories = [] | 
					
						
							|  |  |  | url = 'http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s={query}=X' | 
					
						
							| 
									
										
										
										
											2013-11-10 21:20:22 +01:00
										 |  |  | weight = 100 | 
					
						
							| 
									
										
										
										
											2013-11-04 21:47:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-20 02:31:20 +01:00
										 |  |  | parser_re = re.compile(r'^\W*(\d+(?:\.\d+)?)\W*([a-z]{3})\W*(?:in)?\W*([a-z]{3})\W*$', re.I)  # noqa | 
					
						
							| 
									
										
										
										
											2013-12-01 16:41:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-19 22:59:01 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-04 21:47:16 +01:00
										 |  |  | def request(query, params): | 
					
						
							| 
									
										
										
										
											2013-12-01 16:41:24 +01:00
										 |  |  |     m = parser_re.match(query) | 
					
						
							|  |  |  |     if not m: | 
					
						
							|  |  |  |         # wrong query | 
					
						
							|  |  |  |         return params | 
					
						
							| 
									
										
										
										
											2013-11-04 21:47:16 +01:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2013-12-01 16:41:24 +01:00
										 |  |  |         ammount, from_currency, to_currency = m.groups() | 
					
						
							| 
									
										
										
										
											2013-11-04 21:47:16 +01:00
										 |  |  |         ammount = float(ammount) | 
					
						
							|  |  |  |     except: | 
					
						
							|  |  |  |         # wrong params | 
					
						
							|  |  |  |         return params | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-19 22:59:01 +01:00
										 |  |  |     q = (from_currency + to_currency).upper() | 
					
						
							| 
									
										
										
										
											2013-11-04 21:47:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     params['url'] = url.format(query=q) | 
					
						
							|  |  |  |     params['ammount'] = ammount | 
					
						
							|  |  |  |     params['from'] = from_currency | 
					
						
							|  |  |  |     params['to'] = to_currency | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return params | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def response(resp): | 
					
						
							|  |  |  |     results = [] | 
					
						
							|  |  |  |     try: | 
					
						
							| 
									
										
										
										
											2014-01-19 22:59:01 +01:00
										 |  |  |         _, conversion_rate, _ = resp.text.split(',', 2) | 
					
						
							| 
									
										
										
										
											2013-11-04 21:47:16 +01:00
										 |  |  |         conversion_rate = float(conversion_rate) | 
					
						
							|  |  |  |     except: | 
					
						
							|  |  |  |         return results | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-19 22:59:01 +01:00
										 |  |  |     title = '{0} {1} in {2} is {3}'.format( | 
					
						
							|  |  |  |         resp.search_params['ammount'], | 
					
						
							|  |  |  |         resp.search_params['from'], | 
					
						
							|  |  |  |         resp.search_params['to'], | 
					
						
							|  |  |  |         resp.search_params['ammount'] * conversion_rate | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2013-11-04 21:47:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-20 02:31:20 +01:00
										 |  |  |     content = '1 {0} is {1} {2}'.format(resp.search_params['from'], | 
					
						
							|  |  |  |                                         conversion_rate, | 
					
						
							|  |  |  |                                         resp.search_params['to']) | 
					
						
							| 
									
										
										
										
											2013-11-10 22:03:16 +01:00
										 |  |  |     now_date = datetime.now().strftime('%Y%m%d') | 
					
						
							| 
									
										
										
										
											2014-01-20 02:31:20 +01:00
										 |  |  |     url = 'http://finance.yahoo.com/currency/converter-results/{0}/{1}-{2}-to-{3}.html'  # noqa | 
					
						
							| 
									
										
										
										
											2014-01-19 22:59:01 +01:00
										 |  |  |     url = url.format( | 
					
						
							|  |  |  |         now_date, | 
					
						
							|  |  |  |         resp.search_params['ammount'], | 
					
						
							|  |  |  |         resp.search_params['from'].lower(), | 
					
						
							|  |  |  |         resp.search_params['to'].lower() | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2013-11-04 21:47:16 +01:00
										 |  |  |     results.append({'title': title, 'content': content, 'url': url}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return results |