@@ -2,6 +2,7 @@ use crate::core;
2
2
use chrono:: { DateTime , Utc } ;
3
3
use futures:: future:: join_all;
4
4
use html_escape:: decode_html_entities;
5
+ use regex:: Regex ;
5
6
use scraper:: { Html , Selector } ;
6
7
use serde:: { Deserialize , Serialize } ;
7
8
@@ -170,6 +171,23 @@ fn parse_concert_json(
170
171
}
171
172
}
172
173
174
+ // Figure out prices
175
+ let prices_text = json[ "data" ] [ "page" ] [ "pricesText" ] . as_str ( ) . unwrap ( ) ;
176
+ let ( min_price, max_price) = match prices_text {
177
+ _ if prices_text. to_lowercase ( ) == "free" => ( Some ( 0 ) , Some ( 0 ) ) ,
178
+ _ => {
179
+ let re = Regex :: new ( r"£(\d+)" ) . unwrap ( ) ;
180
+ let all_prices_in_pennies: Vec < u32 > = re
181
+ . captures_iter ( prices_text)
182
+ . map ( |cap| cap[ 1 ] . parse :: < u32 > ( ) . unwrap ( ) )
183
+ . collect :: < Vec < u32 > > ( ) ;
184
+ (
185
+ all_prices_in_pennies. iter ( ) . min ( ) . map ( |& x| x * 100 ) ,
186
+ all_prices_in_pennies. iter ( ) . max ( ) . map ( |& x| x * 100 ) ,
187
+ )
188
+ }
189
+ } ;
190
+
173
191
fn clean_up_description ( s : & str ) -> String {
174
192
// Split paragraphs
175
193
let s = decode_html_entities ( s)
@@ -204,6 +222,8 @@ fn parse_concert_json(
204
222
is_wigmore_u35,
205
223
performers,
206
224
pieces,
225
+ min_price,
226
+ max_price,
207
227
}
208
228
}
209
229
0 commit comments