Ver código fonte

[enh] smarter currency query parse

asciimoo 11 anos atrás
pai
commit
a35128f5e0
1 arquivos alterados com 8 adições e 4 exclusões
  1. 8
    4
      searx/engines/currency_convert.py

+ 8
- 4
searx/engines/currency_convert.py Ver arquivo

1
 from datetime import datetime
1
 from datetime import datetime
2
+import re
2
 
3
 
3
 categories = []
4
 categories = []
4
 url = 'http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s={query}=X'
5
 url = 'http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s={query}=X'
5
 weight = 100
6
 weight = 100
6
 
7
 
8
+parser_re = re.compile(r'^\W*(\d+(?:\.\d+)?)\W*([a-z]{3})\W*(?:in)?\W*([a-z]{3})\W*$')
9
+
7
 def request(query, params):
10
 def request(query, params):
11
+    m = parser_re.match(query)
12
+    if not m:
13
+        # wrong query
14
+        return params
8
     try:
15
     try:
9
-        # eg.: "X EUR in USD"
10
-        ammount, from_currency, _, to_currency = query.split()
16
+        ammount, from_currency, to_currency = m.groups()
11
         ammount = float(ammount)
17
         ammount = float(ammount)
12
     except:
18
     except:
13
         # wrong params
19
         # wrong params
14
         return params
20
         return params
15
 
21
 
16
     q = (from_currency+to_currency).upper()
22
     q = (from_currency+to_currency).upper()
17
-    if not q.isalpha():
18
-        return params
19
 
23
 
20
     params['url'] = url.format(query=q)
24
     params['url'] = url.format(query=q)
21
     params['ammount'] = ammount
25
     params['ammount'] = ammount