Terren Peterson
Published © Apache-2.0

Parliament Election Support from your Alexa

Democracy calls! Use this Alexa skill for who is running for the UK Parliament on the snap election for the 8th of June, as well as who won.

IntermediateFull instructions provided12 hours366

Things used in this project

Hardware components

Amazon Echo
Amazon Alexa Amazon Echo
This is a published skill in the UK, and works on every device.
×1

Software apps and online services

Alexa Skills Kit
Amazon Alexa Alexa Skills Kit
Can be cloned from GitHub.
JSONLint
Used for validating JSON files.
AWS Lambda
Amazon Web Services AWS Lambda
Used for hosting the Skill.
Postcodes.io
Open source postal code lookup API.

Story

Read more

Code

IntentSchema.json

JSON
This is the model used for the Alexa skill.
{
  "intents": [
    {
      "slots": [
        {
          "name": "constituency",
          "type": "LIST_OF_CONSTITUENCIES"
        }
      ],
      "intent": "ElectionIntent"
    },
    {
      "slots": [
        {
          "name": "country",
          "type": "LIST_OF_UK_COUNTRIES"
        }
      ],
      "intent": "LocateDistrict"
    },
    {
      "slots": [
        {
          "name": "region",
          "type": "LIST_OF_ENGLAND_REGIONS"
        }
      ],
      "intent": "LocateEngland"
    },
    {
      "slots": [
        {
          "name": "postalCodeDistrict",
          "type": "LIST_OF_OUTWARD_CODES"
        },
        {
          "name": "postalCodeInward",
          "type": "LIST_OF_INWARD_CODES"
        }
      ],
      "intent": "FindByPostCode"
    },
    {
      "intent": "FindDistrict"
    },
    {
      "intent": "AMAZON.YesIntent"
    },
    {
      "intent": "AMAZON.NoIntent"
    },
    {
      "intent": "AMAZON.HelpIntent"
    },
    {
      "intent": "AMAZON.StopIntent"
    },
    {
      "intent": "AMAZON.CancelIntent"
    }
  ]
}

Custom Slot of Postal Districts - the "Outward" code

Plain text
This is the list of postal districts - the first set of characters within the postal address.
AB10
AB11
AB12
AB13
AB14
AB30
AB31
AB32
AB33
AB34
AB35
AB36
AB37
AB38
AB39
AB41
AB42
AB43
AB44
AB45
AB51
AB52
AB53
AB54
AB55
AB56
AL1
AL2
AL3
AL4
AL5
AL6
AL7
AL9
AL10
B1
B2
B3
B4
B5
B6
B7
B8
B9
B10
B11
B12
B13
B14
B15
B16
B17
B18
B19
B20
B21
B23
B24
B25
B26
B27
B28
B29
B30
B31
B32
B33
B34
B35
B36
B37
B38
B40
B42
B43
B44
B45
B46
B47
B48
B49
B50
B60
B61
B62
B63
B64
B65
B66
B67
B68
B69
B70
B71
B72
B73
B74
B75
B76
B77
B78
B79
B80
B90
B91
B92
B93
B94
B95
B96
B97
B98
BA1
BA2
BA3
BA4
BA5
BA6
BA7
BA8
BA9
BA10
BA11
BA12
BA13
BA14
BA15
BA16
BA20
BA21
BA22
BB1
BB2
BB3
BB4
BB5
BB6
BB7
BB8
BB9
BB10
BB11
BB12
BB18
BD1
BD2
BD3
BD4
BD5
BD6
BD7
BD8
BD9
BD10
BD11
BD12
BD13
BD14
BD15
BD16
BD17
BD18
BD19
BD20
BD21
BD22
BD23
BD24
BH1
BH2
BH3
BH4
BH5
BH6
BH7
BH8
BH9
BH10
BH11
BH12
BH13
BH14
BH15
BH16
BH17
BH18
BH19
BH20
BH21
BH22
BH23
BH24
BH25
BH31
BL0
BL1
BL2
BL3
BL4
BL5
BL6
BL7
BL8
BL9
BN1
BN2
BN41
BN42
BN45
BN3
BN5
BN6
BN7
BN8
BN9
BN10
BN11
BN12
BN13
BN14
BN15
BN16
BN17
BN18
BN20
BN21
BN22
BN23
BN24
BN25
BN26
BN27
BN43
BN44
BR1
BR2
BR3
BR4
BR5
BR6
BR7
BR8
BS1
BS2
BS3
BS4
BS5
BS6
BS7
BS8
BS9
BS10
BS11
BS12
BS13
BS14
BS15
BS16
BS20
BS30
BS31
BS32
BS34
BS35
BS36
BS37
BS39
BS40
BS41
BS48
BS49
BS21
BS22
BS23
BS24
BS25
BS26
BS27
BS28
BS29
BT1
BT2
BT3
BT4
BT5
BT6
BT7
BT8
BT9
BT10
BT11
BT12
BT13
BT14
BT15
BT16
BT17
BT18
BT19
BT20
BT21
BT22
BT23
BT24
BT25
BT26
BT27
BT28
BT29
BT30
BT31
BT32
BT33
BT34
BT35
BT36
BT37
BT38
BT39
BT40
BT41
BT42
BT43
BT44
BT45
BT46
BT47
BT48
BT49
BT51
BT52
BT53
BT54
BT55
BT56
BT57
BT60
BT61
BT62
BT63
BT64
BT65
BT66
BT67
BT68
BT69
BT70
BT71
BT74
BT92
BT93
BT94
BT75
BT76
BT77
BT78
BT79
BT80
BT81
BT82
CA1
CA2
CA3
CA4
CA5
CA6
CA7
CA8
CA9
CA10
CA11
CA12
CA13
CA14
CA15
CA16
CA17
CA18
CA19
CA20
CA21
CA22
CA23
CA24
CA25
CA26
CA27
CA28
CB1
CB2
CB3
CB4
CB5
CB21
CB22
CB23
CB24
CB25
CB6
CB7
CB8
CB9
CB10
CB11
CF3
CF5
CF10
CF11
CF14
CF15
CF23
CF24
CF31
CF32
CF33
CF34
CF35
CF36
CF37
CF38
CF39
CF40
CF41
CF42
CF43
CF44
CF45
CF46
CF47
CF48
CF61
CF62
CF63
CF64
CF71
CF72
CF81
CF82
CF83
CH1
CH2
CH3
CH4
CH5
CH6
CH7
CH8
CH41
CH42
CH43
CH44
CH45
CH46
CH47
CH48
CH49
CH60
CH61
CH62
CH63
CH64
CH65
CH66
CM0
CM1
CM2
CM3
CM4
CM5
CM6
CM7
CM77
CM8
CM9
CM11
CM12
CM13
CM14
CM15
CM16
CM17
CM18
CM19
CM20
CM21
CM22
CM23
CM24
CO1
CO2
CO3
CO4
CO5
CO6
CO7
CO8
CO9
CO10
CO11
CO12
CO13
CO14
CO15
CO16
CR2
CR3
CR4
CR5
CR6
CR7
CR8
CT1
CT2
CT3
CT4
CT5
CT6
CT7
CT8
CT9
CT10
CT11
CT12
CT13
CT14
CT15
CT16
CT17
CT18
CT19
CT20
CT21
CV1
CV2
CV3
CV4
CV5
CV6
CV7
CV8
CV9
CV10
CV11
CV12
CV21
CV22
CV23
CV31
CV32
CV33
CV34
CV35
CV36
CV37
CV47
CW1
CW2
CW3
CW4
CW5
CW6
CW7
CW8
CW9
CW10
CW11
CW12
DA1
DA2
DA3
DA4
DA5
DA6
DA7
DA8
DA9
DA10
DA11
DA12
DA13
DA14
DA15
DA16
DA17
DA18
DD1
DD2
DD3
DD4
DD5
DD6
DD7
DD8
DD9
DD10
DD11
DE1
DE3
DE21
DE22
DE23
DE24
DE65
DE72
DE73
DE74
DE4
DE5
DE6
DE7
DE11
DE12
DE13
DE14
DE15
DE45
DE55
DE56
DE75
DG1
DG2
DG3
DG4
DG5
DG6
DG7
DG8
DG9
DG10
DG11
DG12
DG13
DG14
DG16
DH1
DH2
DH3
DH4
DH5
DH6
DH7
DH8
DH9
DL1
DL2
DL3
DL4
DL5
DL6
DL7
DL8
DL9
DL10
DL11
DL12
DL13
DL14
DL15
DL16
DL17
DN1
DN2
DN3
DN4
DN5
DN6
DN7
DN8
DN9
DN10
DN11
DN12
DN13
DN14
DN15
DN16
DN17
DN18
DN19
DN20
DN21
DN22
DN31
DN32
DN33
DN34
DN36
DN37
DN41
DN35
DN38
DN39
DN40
DT1
DT2
DT3
DT4
DT5
DT6
DT7
DT8
DT9
DT10
DT11
DY1
DY2
DY3
DY4
DY5
DY6
DY7
DY8
DY9
DY10
DY11
DY14
DY12
DY13
E1W
E1
E2
E3
E4
E5
E6
E7
E8
E9
E10
E11
E12
E13
E14
E15
E16
E17
E18
E20
EC1A
EC1M
EC1N
EC1P
EC1V
EC1Y
EC2A
EC2M
EC2N
EC2P
EC2R
EC2V
EC2Y
EC3A
EC3M
EC3N
EC3P
EC3R
EC3V
EC4A
EC4M
EC4N
EC4P
EC4R
EC4V
EC4Y
EH1
EH2
EH3
EH4
EH5
EH6
EH7
EH8
EH9
EH10
EH11
EH12
EH13
EH14
EH15
EH16
EH17
EH18
EH19
EH20
EH21
EH22
EH23
EH24
EH25
EH26
EH27
EH28
EH29
EH30
EH31
EH32
EH33
EH34
EH35
EH36
EH37
EH38
EH39
EH40
EH41
EH42
EH43
EH44
EH45
EH46
EH47
EH48
EH49
EH51
EH52
EH53
EH54
EH55
EN1
EN2
EN3
EN4
EN5
EN6
EN7
EN8
EN9
EN10
EN11
EX1
EX2
EX3
EX4
EX5
EX6
EX7
EX8
EX9
EX10
EX11
EX12
EX13
EX14
EX15
EX16
EX17
EX18
EX19
EX20
EX21
EX22
EX23
EX24
EX31
EX32
EX33
EX34
EX35
EX36
EX37
EX38
EX39
FK1
FK2
FK3
FK4
FK5
FK6
FK7
FK8
FK9
FK10
FK11
FK12
FK13
FK14
FK15
FK16
FK17
FK18
FK19
FK20
FK21
FY0
FY1
FY2
FY3
FY4
FY5
FY6
FY7
FY8
G1
G2
G3
G4
G5
G9
G11
G12
G13
G14
G15
G20
G21
G22
G23
G31
G32
G33
G34
G40
G41
G42
G43
G44
G45
G46
G51
G52
G53
G58
G60
G61
G62
G63
G64
G65
G66
G67
G68
G69
G70
G71
G72
G73
G74
G75
G76
G77
G78
G79
G81
G82
G83
G84
GL1
GL2
GL3
GL4
GL5
GL6
GL7
GL8
GL9
GL10
GL11
GL12
GL13
GL14
GL15
GL16
GL17
GL18
GL19
GL20
GL50
GL51
GL52
GL53
GL54
GL55
GL56
GU1
GU2
GU3
GU4
GU5
GU6
GU7
GU8
GU9
GU10
GU11
GU12
GU14
GU15
GU16
GU17
GU18
GU19
GU20
GU21
GU22
GU23
GU24
GU25
GU26
GU27
GU28
...

This file has been truncated, please download it to see its full contents.

Custom Slot for Inward Postal Codes

Plain text
This is all of the potential combinations of a numeric digit followed by two alpha characters.
0AA
0AB
0AC
0AD
0AE
0AF
0AG
0AH
0AI
0AJ
0AK
0AL
0AM
0AN
0AO
0AP
0AQ
0AR
0AS
0AT
0AU
0AV
0AW
0AX
0AY
0AZ
0BA
0BB
0BC
0BD
0BE
0BF
0BG
0BH
0BI
0BJ
0BK
0BL
0BM
0BN
0BO
0BP
0BQ
0BR
0BS
0BT
0BU
0BV
0BW
0BX
0BY
0BZ
0CA
0CB
0CC
0CD
0CE
0CF
0CG
0CH
0CI
0CJ
0CK
0CL
0CM
0CN
0CO
0CP
0CQ
0CR
0CS
0CT
0CU
0CV
0CW
0CX
0CY
0CZ
0DA
0DB
0DC
0DD
0DE
0DF
0DG
0DH
0DI
0DJ
0DK
0DL
0DM
0DN
0DO
0DP
0DQ
0DR
0DS
0DT
0DU
0DV
0DW
0DX
0DY
0DZ
0EA
0EB
0EC
0ED
0EE
0EF
0EG
0EH
0EI
0EJ
0EK
0EL
0EM
0EN
0EO
0EP
0EQ
0ER
0ES
0ET
0EU
0EV
0EW
0EX
0EY
0EZ
0FA
0FB
0FC
0FD
0FE
0FF
0FG
0FH
0FI
0FJ
0FK
0FL
0FM
0FN
0FO
0FP
0FQ
0FR
0FS
0FT
0FU
0FV
0FW
0FX
0FY
0FZ
0GA
0GB
0GC
0GD
0GE
0GF
0GG
0GH
0GI
0GJ
0GK
0GL
0GM
0GN
0GO
0GP
0GQ
0GR
0GS
0GT
0GU
0GV
0GW
0GX
0GY
0GZ
0HA
0HB
0HC
0HD
0HE
0HF
0HG
0HH
0HI
0HJ
0HK
0HL
0HM
0HN
0HO
0HP
0HQ
0HR
0HS
0HT
0HU
0HV
0HW
0HX
0HY
0HZ
0IA
0IB
0IC
0ID
0IE
0IF
0IG
0IH
0II
0IJ
0IK
0IL
0IM
0IN
0IO
0IP
0IQ
0IR
0IS
0IT
0IU
0IV
0IW
0IX
0IY
0IZ
0JA
0JB
0JC
0JD
0JE
0JF
0JG
0JH
0JI
0JJ
0JK
0JL
0JM
0JN
0JO
0JP
0JQ
0JR
0JS
0JT
0JU
0JV
0JW
0JX
0JY
0JZ
0KA
0KB
0KC
0KD
0KE
0KF
0KG
0KH
0KI
0KJ
0KK
0KL
0KM
0KN
0KO
0KP
0KQ
0KR
0KS
0KT
0KU
0KV
0KW
0KX
0KY
0KZ
0LA
0LB
0LC
0LD
0LE
0LF
0LG
0LH
0LI
0LJ
0LK
0LL
0LM
0LN
0LO
0LP
0LQ
0LR
0LS
0LT
0LU
0LV
0LW
0LX
0LY
0LZ
0MA
0MB
0MC
0MD
0ME
0MF
0MG
0MH
0MI
0MJ
0MK
0ML
0MM
0MN
0MO
0MP
0MQ
0MR
0MS
0MT
0MU
0MV
0MW
0MX
0MY
0MZ
0NA
0NB
0NC
0ND
0NE
0NF
0NG
0NH
0NI
0NJ
0NK
0NL
0NM
0NN
0NO
0NP
0NQ
0NR
0NS
0NT
0NU
0NV
0NW
0NX
0NY
0NZ
0OA
0OB
0OC
0OD
0OE
0OF
0OG
0OH
0OI
0OJ
0OK
0OL
0OM
0ON
0OO
0OP
0OQ
0OR
0OS
0OT
0OU
0OV
0OW
0OX
0OY
0OZ
0PA
0PB
0PC
0PD
0PE
0PF
0PG
0PH
0PI
0PJ
0PK
0PL
0PM
0PN
0PO
0PP
0PQ
0PR
0PS
0PT
0PU
0PV
0PW
0PX
0PY
0PZ
0QA
0QB
0QC
0QD
0QE
0QF
0QG
0QH
0QI
0QJ
0QK
0QL
0QM
0QN
0QO
0QP
0QQ
0QR
0QS
0QT
0QU
0QV
0QW
0QX
0QY
0QZ
0RA
0RB
0RC
0RD
0RE
0RF
0RG
0RH
0RI
0RJ
0RK
0RL
0RM
0RN
0RO
0RP
0RQ
0RR
0RS
0RT
0RU
0RV
0RW
0RX
0RY
0RZ
0SA
0SB
0SC
0SD
0SE
0SF
0SG
0SH
0SI
0SJ
0SK
0SL
0SM
0SN
0SO
0SP
0SQ
0SR
0SS
0ST
0SU
0SV
0SW
0SX
0SY
0SZ
0TA
0TB
0TC
0TD
0TE
0TF
0TG
0TH
0TI
0TJ
0TK
0TL
0TM
0TN
0TO
0TP
0TQ
0TR
0TS
0TT
0TU
0TV
0TW
0TX
0TY
0TZ
0UA
0UB
0UC
0UD
0UE
0UF
0UG
0UH
0UI
0UJ
0UK
0UL
0UM
0UN
0UO
0UP
0UQ
0UR
0US
0UT
0UU
0UV
0UW
0UX
0UY
0UZ
0VA
0VB
0VC
0VD
0VE
0VF
0VG
0VH
0VI
0VJ
0VK
0VL
0VM
0VN
0VO
0VP
0VQ
0VR
0VS
0VT
0VU
0VV
0VW
0VX
0VY
0VZ
0WA
0WB
0WC
0WD
0WE
0WF
0WG
0WH
0WI
0WJ
0WK
0WL
0WM
0WN
0WO
0WP
0WQ
0WR
0WS
0WT
0WU
0WV
0WW
0WX
0WY
0WZ
0XA
0XB
0XC
0XD
0XE
0XF
0XG
0XH
0XI
0XJ
0XK
0XL
0XM
0XN
0XO
0XP
0XQ
0XR
0XS
0XT
0XU
0XV
0XW
0XX
0XY
0XZ
0YA
0YB
0YC
0YD
0YE
0YF
0YG
0YH
0YI
0YJ
0YK
0YL
0YM
0YN
0YO
0YP
0YQ
0YR
0YS
0YT
0YU
0YV
0YW
0YX
0YY
0YZ
0ZA
0ZB
0ZC
0ZD
0ZE
0ZF
0ZG
0ZH
0ZI
0ZJ
0ZK
0ZL
0ZM
0ZN
0ZO
0ZP
0ZQ
0ZR
0ZS
0ZT
0ZU
0ZV
0ZW
0ZX
0ZY
0ZZ
1AA
1AB
1AC
1AD
1AE
1AF
1AG
1AH
1AI
1AJ
1AK
1AL
1AM
1AN
1AO
1AP
1AQ
1AR
1AS
1AT
1AU
1AV
1AW
1AX
1AY
1AZ
1BA
1BB
1BC
1BD
1BE
1BF
1BG
1BH
1BI
1BJ
1BK
1BL
1BM
1BN
1BO
1BP
1BQ
1BR
1BS
1BT
1BU
1BV
1BW
1BX
1BY
1BZ
1CA
1CB
1CC
1CD
1CE
1CF
1CG
1CH
1CI
1CJ
1CK
1CL
1CM
1CN
1CO
1CP
1CQ
1CR
1CS
1CT
1CU
1CV
1CW
1CX
1CY
1CZ
1DA
1DB
1DC
1DD
1DE
1DF
1DG
1DH
1DI
1DJ
1DK
1DL
1DM
1DN
1DO
1DP
1DQ
1DR
1DS
1DT
1DU
1DV
1DW
1DX
1DY
1DZ
1EA
1EB
1EC
1ED
1EE
1EF
1EG
1EH
1EI
1EJ
1EK
1EL
1EM
1EN
1EO
1EP
1EQ
1ER
1ES
1ET
1EU
1EV
1EW
1EX
1EY
1EZ
1FA
1FB
1FC
1FD
1FE
1FF
1FG
1FH
1FI
1FJ
1FK
1FL
1FM
1FN
1FO
1FP
1FQ
1FR
1FS
1FT
1FU
1FV
1FW
1FX
1FY
1FZ
1GA
1GB
1GC
1GD
1GE
1GF
1GG
1GH
1GI
1GJ
1GK
1GL
1GM
1GN
1GO
1GP
1GQ
1GR
1GS
1GT
1GU
1GV
1GW
1GX
1GY
1GZ
1HA
1HB
1HC
1HD
1HE
1HF
1HG
1HH
1HI
1HJ
1HK
1HL
1HM
1HN
1HO
1HP
1HQ
1HR
1HS
1HT
1HU
1HV
1HW
1HX
1HY
1HZ
1IA
1IB
1IC
1ID
1IE
1IF
1IG
1IH
1II
1IJ
1IK
1IL
1IM
1IN
1IO
1IP
1IQ
1IR
1IS
1IT
1IU
1IV
1IW
1IX
1IY
1IZ
1JA
1JB
1JC
1JD
1JE
1JF
1JG
1JH
1JI
1JJ
1JK
1JL
1JM
1JN
1JO
1JP
1JQ
1JR
1JS
1JT
1JU
1JV
1JW
1JX
1JY
1JZ
1KA
1KB
1KC
1KD
1KE
1KF
1KG
1KH
1KI
1KJ
1KK
1KL
1KM
1KN
1KO
1KP
1KQ
1KR
1KS
1KT
1KU
1KV
1KW
1KX
1KY
1KZ
1LA
1LB
1LC
1LD
1LE
1LF
1LG
1LH
1LI
1LJ
1LK
1LL
1LM
1LN
1LO
1LP
1LQ
1LR
1LS
1LT
1LU
1LV
1LW
1LX
1LY
1LZ
1MA
1MB
1MC
1MD
1ME
1MF
1MG
1MH
1MI
1MJ
1MK
1ML
...

This file has been truncated, please download it to see its full contents.

districts.json

JSON
This is the lookup table for the constituency names within the skill.
[
{"name":"Aberavon", "id":1},
{"name":"Aberconwy", "id":2},
{"name":"Aberdeen North", "id":3},
{"name":"Aberdeen South", "id":4},
{"name":"Airdrie and Shotts", "id":6},
{"name":"Airdrie", "id":6},
{"name":"Shotts", "id":6},
{"name":"Aldershot", "id":7},
{"name":"Aldridge-Brownhills", "id":8},
{"name":"Altrincham and Sale West", "id":9},
{"name":"Altrincham", "id":9},
{"name":"Sale West", "id":9},
{"name":"Alyn and Deeside", "id":10},
{"name":"Alyn", "id":10},
{"name":"Deeside", "id":10},
{"name":"Amber Valley", "id":11},
{"name":"Angus", "id":12},
{"name":"Arfon", "id":16},
{"name":"Argyll and Bute", "id":17},
{"name":"Argyll", "id":17},
{"name":"Bute", "id":17},
{"name":"Arundel and South Downs", "id":18},
{"name":"Arundel", "id":18},
{"name":"South Downs", "id":18},
{"name":"Ashfield", "id":19},
{"name":"Ashford", "id":20},
{"name":"Ashton-under-Lyne", "id":21},
{"name":"Aylesbury", "id":22},
{"name":"Ayr Carrick and Cumnock", "id":23},
{"name":"Ayr", "id":23},
{"name":"Carrick", "id":23},
{"name":"Cumnock", "id":23},
{"name":"Banbury", "id":26},
{"name":"Banff and Buchan", "id":27},
{"name":"Banff", "id":27},
{"name":"Buchan", "id":27},
{"name":"Barking", "id":28},
{"name":"Barnsley Central", "id":29},
{"name":"Barnsley East", "id":30},
{"name":"Barrow and Furness", "id":31},
{"name":"Barrow", "id":31},
{"name":"Furness", "id":31},
{"name":"Basildon and Billericay", "id":32},
{"name":"Billericay", "id":32},
{"name":"Basildon", "id":32},
{"name":"Basingstoke", "id":34},
{"name":"Bassetlaw", "id":35},
{"name":"Bath", "id":36},
{"name":"Batley and Spen", "id":37},
{"name":"Batley", "id":37},
{"name":"Spen", "id":37},
{"name":"Battersea", "id":38},
{"name":"Beaconsfield", "id":39},
{"name":"Beckenham", "id":40},
{"name":"Bedford", "id":41},
{"name":"Belfast East", "id":45},
{"name":"Belfast North", "id":46},
{"name":"Belfast South", "id":47},
{"name":"Belfast West", "id":48},
{"name":"Bermondsey and Old Southwark", "id":49},
{"name":"Old Southwark", "id":49},
{"name":"Bermondsey", "id":49},
{"name":"Berwick-upon-Tweed", "id":50},
{"name":"Berwickshire Roxburgh and Selkirk", "id":51},
{"name":"Berwickshire", "id":51},
{"name":"Roxburgh", "id":51},
{"name":"Selkirk", "id":51},
{"name":"Bethnal Green and Bow", "id":52},
{"name":"Beverley and Holderness", "id":53},
{"name":"Beverley", "id":53},
{"name":"Holderness", "id":53},
{"name":"Bexhill and Battle", "id":54},
{"name":"Bexhill", "id":54},
{"name":"Battle", "id":54},
{"name":"Bexleyheath and Crayford", "id":55},
{"name":"Crayford", "id":55},
{"name":"Bexleyheath", "id":55},
{"name":"Birkenhead", "id":56},
{"name":"Birmingham Edgbaston", "id":57},
{"name":"Birmingham Erdington", "id":58},
{"name":"Birmingham Hall Green", "id":59},
{"name":"Birmingham Hodge Hill", "id":60},
{"name":"Birmingham Ladywood", "id":61},
{"name":"Birmingham Northfield", "id":62},
{"name":"Birmingham Perry Barr", "id":63},
{"name":"Birmingham Selly Oak", "id":64},
{"name":"Birmingham Yardley", "id":65},
{"name":"Bishop Auckland", "id":66},
{"name":"Blackburn", "id":67},
{"name":"Blackley and Broughton", "id":68},
{"name":"Blackley", "id":68},
{"name":"Broughton", "id":68},
{"name":"Blackpool North and Cleveleys", "id":69},
{"name":"Blackpool North", "id":69},
{"name":"Cleveleys", "id":69},
{"name":"Blackpool South", "id":70},
{"name":"Blaenau Gwent", "id":71},
{"name":"Blaydon", "id":72},
{"name":"Blyth Valley", "id":73},
{"name":"Bognor Regis and Littlehampton", "id":74},
{"name":"Bognor Regis", "id":74},
{"name":"Littlehampton", "id":74},
{"name":"Bolsover", "id":75},
{"name":"Bolton North East", "id":76},
{"name":"Bolton South East", "id":77},
{"name":"Bolton West", "id":78},
{"name":"Bootle", "id":79},
{"name":"Boston and Skegness", "id":80},
{"name":"Boston", "id":80},
{"name":"Skegness", "id":80},
{"name":"Bosworth", "id":81},
{"name":"Bournemouth East", "id":82},
{"name":"Bournemouth West", "id":83},
{"name":"Bracknell", "id":84},
{"name":"Bradford East", "id":85},
{"name":"Bradford South", "id":86},
{"name":"Bradford West", "id":87},
{"name":"Braintree", "id":88},
{"name":"Brecon and Radnorshire", "id":89},
{"name":"Radnorshire", "id":89},
{"name":"Brecon", "id":89},
{"name":"Brent Central", "id":90},
{"name":"Brent North", "id":91},
{"name":"Brentford and Isleworth", "id":92},
{"name":"Brentford", "id":92},
{"name":"Isleworth", "id":92},
{"name":"Brentwood and Ongar", "id":93},
{"name":"Brentwood", "id":93},
{"name":"Ongar", "id":93},
{"name":"Bridgend", "id":94},
{"name":"Bridgwater and West Somerset", "id":95},
{"name":"Bridgwater", "id":95},
{"name":"West Somerset", "id":95},
{"name":"Brigg and Goole", "id":96},
{"name":"Brigg", "id":96},
{"name":"Goole", "id":96},
{"name":"Brighton Kemptown", "id":98},
{"name":"Brighton Pavilion", "id":98},
{"name":"Bristol East", "id":99},
{"name":"Bristol North West", "id":100},
{"name":"Bristol South", "id":101},
{"name":"Bristol West", "id":102},
{"name":"Broadland", "id":103},
{"name":"Bromley and Chislehurst", "id":104},
{"name":"Bromley", "id":104},
{"name":"Chislehurst", "id":104},
{"name":"Bromsgrove", "id":105},
{"name":"Broxbourne", "id":106},
{"name":"Broxtowe", "id":107},
{"name":"Buckingham", "id":108},
{"name":"Burnley", "id":109},
{"name":"Burton", "id":110},
{"name":"Bury North", "id":111},
{"name":"Bury South", "id":112},
{"name":"Bury St Edmunds", "id":113},
{"name":"Caerphilly", "id":114},
{"name":"Caithness Sutherland and Easter Ross", "id":115},
{"name":"Caithness", "id":115},
{"name":"Sutherland", "id":115},
{"name":"Easter Ross", "id":115},
{"name":"Calder Valley", "id":116},
{"name":"Camberwell and Peckham", "id":117},
{"name":"Camberwell", "id":117},
{"name":"Peckham", "id":117},
{"name":"Camborne and Redruth", "id":118},
{"name":"Camborne", "id":118},
{"name":"Redruth", "id":118},
{"name":"Cambridge", "id":119},
{"name":"Cannock Chase", "id":124},
{"name":"Canterbury", "id":125},
{"name":"Cardiff Central", "id":547},
{"name":"Cardiff North", "id":127},
{"name":"Cardiff South and Penarth", "id":128},
{"name":"Cardiff South", "id":128},
{"name":"Penarth", "id":128},
{"name":"Cardiff West", "id":129},
{"name":"Carlisle", "id":130},
{"name":"Carmarthen East and Dinefwr", "id":131},
{"name":"Carmarthen East", "id":131},
{"name":"Dinefwr", "id":131},
{"name":"Carmarthen West and South Pembrokeshire", "id":132},
{"name":"South Pembrokeshire", "id":132},
{"name":"Carmarthen West", "id":132},
{"name":"Carshalton and Wallington", "id":133},
{"name":"Castle Point", "id":134},
{"name":"Central Ayrshire", "id":134},
{"name":"Central Devon", "id":188},
{"name":"Central Suffolk and North Ipswich", "id":134},
{"name":"Central Suffolk", "id":134},
{"name":"North Ipswich", "id":134},
{"name":"Ceredigion", "id":135},
{"name":"Charnwood", "id":136},
{"name":"Chatham and Aylesford", "id":137},
{"name":"Aylesford", "id":137},
{"name":"Chatham", "id":137},
{"name":"Cheadle", "id":138},
{"name":"Chelmsford", "id":139},
{"name":"Chelsea and Fulham", "id":140},
{"name":"Chelsea", "id":140},
{"name":"Fulham", "id":140},
{"name":"Cheltenham", "id":141},
{"name":"Chesham and Amersham", "id":142},
{"name":"Chesham", "id":142},
{"name":"Amersham", "id":142},
{"name":"Chesterfield", "id":144},
{"name":"Chichester", "id":145},
{"name":"Chingford and Woodford Green", "id":146},
{"name":"Chingford", "id":146},
{"name":"Woodford Green", "id":146},
{"name":"Chippenham", "id":147},
{"name":"Chipping Barnet", "id":148},
{"name":"Chorley", "id":149},
{"name":"Christchurch", "id":150},
{"name":"Cities of London and Westminster", "id":151},
{"name":"City of Chester", "id":143},
{"name":"City of Durham", "id":214},
{"name":"Clacton", "id":152},
{"name":"Cleethorpes", "id":153},
{"name":"Clwyd South", "id":154},
{"name":"Clwyd West", "id":155},
{"name":"Coatbridge Chryston and Bellshill", "id":156},
{"name":"Coatbridge", "id":156},
{"name":"Chryston", "id":156},
{"name":"Bellshill", "id":156},
{"name":"Colchester", "id":157},
{"name":"Colne Valley", "id":158},
{"name":"Congleton", "id":159},
{"name":"Copeland", "id":160},
{"name":"Corby", "id":161},
{"name":"Coventry North East", "id":165},
{"name":"Coventry North West", "id":166},
{"name":"Coventry South", "id":167},
{"name":"Crawley", "id":168},
{"name":"Crewe and Nantwich", "id":169},
{"name":"Nantwich", "id":169},
{"name":"Crewe", "id":169},
{"name":"Croydon Central", "id":170},
{"name":"Croydon North", "id":171},
{"name":"Croydon South", "id":172},
{"name":"Cumbernauld, Kilsyth and Kirkintilloch East", "id":173},
{"name":"Cumbernauld", "id":173},
{"name":"Kilsyth", "id":173},
{"name":"Kirkintilloch East", "id":173},
{"name":"Cynon Valley", "id":174},
{"name":"Dagenham and Rainham", "id":175},
{"name":"Rainham", "id":175},
{"name":"Dagenham", "id":175},
{"name":"Darlington", "id":176},
{"name":"Dartford", "id":177},
{"name":"Daventry", "id":178},
{"name":"Delyn", "id":179},
{"name":"Denton and Reddish", "id":180},
{"name":"Reddish", "id":180},
{"name":"Denton", "id":180},
{"name":"Derby North", "id":181},
{"name":"Derby South", "id":182},
{"name":"Derbyshire Dales", "id":183},
{"name":"Devizes", "id":187},
{"name":"Dewsbury", "id":193},
{"name":"Don Valley", "id":194},
{"name":"Doncaster Central", "id":195},
{"name":"Doncaster North", "id":196},
{"name":"Dover", "id":201},
{"name":"Dudley North", "id":204},
{"name":"Dudley South", "id":205},
{"name":"Dulwich and West Norwood", "id":206},
{"name":"West Norwood", "id":206},
{"name":"Dulwich", "id":206},
{"name":"Dumfries and Galloway", "id":207},
{"name":"Dumfriesshire, Clydesdale and Tweeddale", "id":208},
{"name":"Dundee East", "id":211},
{"name":"Dundee West", "id":212},
{"name":"Dunfermline and West Fife", "id":213},
{"name":"Dwyfor Meirionnydd", "id":217},
{"name":"Ealing Central and Acton", "id":218},
{"name":"Ealing North", "id":219},
{"name":"Ealing, Southall", "id":220},
{"name":"Easington", "id":221},
{"name":"East Antrim", "id":13},
{"name":"East Devon", "id":189},
{"name":"East Dunbartonshire", "id":209},
{"name":"East Ham", "id":222},
{"name":"East Hampshire", "id":287},
{"name":"East Kilbride, Strathaven and Lesmahagow", "id":223},
{"name":"East Londonderry", "id":376},
{"name":"East Lothian", "id":224},
{"name":"East Renfrewshire", "id":469},
{"name":"East Surrey", "id":552},
{"name":"East Worthing and Shoreham", "id":638},
{"name":"East Yorkshire", "id":650},
{"name":"Eastbourne", "id":225},
{"name":"Eastleigh", "id":226},
{"name":"Eddisbury", "id":227},
{"name":"Edinburgh East", "id":228},
{"name":"Edinburgh North and Leith", "id":229},
{"name":"Edinburgh South", "id":230},
{"name":"Edinburgh South West", "id":231},
{"name":"Edinburgh West", "id":232},
{"name":"Edmonton", "id":233},
{"name":"Ellesmere Port and Neston", "id":234},
{"name":"Elmet and Rothwell", "id":235},
{"name":"Eltham", "id":236},
{"name":"Enfield North", "id":237},
{"name":"Enfield, Southgate", "id":238},
{"name":"Epping Forest", "id":239},
{"name":"Epsom and Ewell", "id":240},
{"name":"Epsom", "id":240},
{"name":"Ewell", "id":240},
{"name":"Erewash", "id":241},
{"name":"Erith and Thamesmead", "id":242},
{"name":"Erith", "id":242},
{"name":"Thamesmead", "id":242},
{"name":"Esher and Walton", "id":243},
{"name":"Exeter", "id":244},
{"name":"Falkirk", "id":245},
{"name":"Fareham", "id":246},
{"name":"Faversham and Mid Kent", "id":247},
{"name":"Faversham", "id":247},
{"name":"Mid Kent", "id":247},
{"name":"Feltham and Heston", "id":248},
{"name":"Heston", "id":248},
{"name":"Feltham", "id":248},
{"name":"Fermanagh and South Tyrone", "id":249},
{"name":"South Tyrone", "id":249},
{"name":"Fermanagh", "id":249},
{"name":"Filton and Bradley Stoke", "id":251},
{"name":"Filton", "id":251},
{"name":"Bradley Stoke", "id":251},
{"name":"Finchley and Golders Green", "id":252},
{"name":"Finchley", "id":252},
{"name":"Golders Green", "id":252},
{"name":"Folkestone and Hythe", "id":253},
{"name":"Folkestone", "id":253},
{"name":"Hythe", "id":253},
{"name":"Forest of Dean", "id":254},
{"name":"Foyle", "id":255},
{"name":"Fylde", "id":256},
{"name":"Gainsborough", "id":257},
{"name":"Garston and Halewood", "id":258},
{"name":"Garston", "id":258},
{"name":"Halewood", "id":258},
{"name":"Gateshead", "id":259},
{"name":"Gedling", "id":260},
{"name":"Gillingham and Rainham", "id":261},
{"name":"Gillingham", "id":261},
{"name":"Rainham", "id":261},
{"name":"Glasgow Central", "id":262},
{"name":"Glasgow East", "id":263},
{"name":"Glasgow North", "id":264},
{"name":"Glasgow North East", "id":265},
{"name":"Glasgow North West", "id":266},
{"name":"Glasgow South", "id":267},
{"name":"Glasgow South West", "id":268},
{"name":"Glenrothes", "id":269},
{"name":"Gloucester", "id":270},
{"name":"Gordon", "id":271},
{"name":"Gosport", "id":272},
{"name":"Gower", "id":273},
{"name":"Grantham and Stamford", "id":274},
{"name":"Grantham", "id":274},
{"name":"Stamford", "id":274},
{"name":"Gravesham", "id":275},
{"name":"Great Grimsby", "id":276},
{"name":"Great Yarmouth", "id":277},
{"name":"Greenwich and Woolwich", "id":278},
{"name":"Greenwich", "id":278},
{"name":"Woolwich", "id":278},
{"name":"Guildford", "id":279},
{"name":"Hackney North and Stoke Newington", "id":280},
{"name":"Stoke Newington", "id":280},
{"name":"Hackney North", "id":280},
{"name":"Hackney South and Shoreditch", "id":281},
{"name":"Hackney South", "id":281},
{"name":"Shoreditch", "id":281},
{"name":"Halesowen and Rowley Regis", "id":282},
{"name":"Halesowen", "id":282},
{"name":"Rowley Regis", "id":282},
{"name":"Halifax", "id":283},
{"name":"Haltemprice and Howden", "id":284},
{"name":"Haltemprice", "id":284},
{"name":"Howden", "id":284},
{"name":"Halton", "id":285},
{"name":"Hammersmith", "id":286},
{"name":"Hampstead and Kilburn", "id":290},
{"name":"Hampstead", "id":290},
{"name":"Kilburn", "id":290},
{"name":"Harborough", "id":291},
{"name":"Harlow", "id":292},
{"name":"Harrogate and Knaresborough", "id":293},
{"name":"Harrogate", "id":293},
{"name":"Knaresborough", "id":293},
{"name":"Harrow East", "id":294},
{"name":"Harrow West", "id":295},
{"name":"Hartlepool", "id":296},
{"name":"Harwich and North Essex", "id":297},
{"name":"Harwich", "id":297},
{"name":"North Essex", "id":297},
{"name":"Hastings and Rye", "id":298},
{"name":"Hastings", "id":298},
{"name":"Rye", "id":298},
{"name":"Havant", "id":299},
{"name":"Hayes and Harlington", "id":300},
{"name":"Hayes", "id":300},
{"name":"Harlington", "id":300},
{"name":"Hazel Grove", "id":301},
{"name":"Hemel Hempstead", "id":302},
{"name":"Hemsworth", "id":303},
{"name":"Hendon", "id":304},
{"name":"Henley", "id":305},
{"name":"Hereford and South Herefordshire", "id":306},
{"name":"Hereford", "id":306},
{"name":"South Herefordshire", "id":306},
{"name":"Hertford and Stortford", "id":308},
{"name":"Stortford", "id":308},
{"name":"Hertsmere", "id":311},
{"name":"Hexham", "id":312},
{"name":"Heywood and Middleton", "id":313},
{"name":"Middleton", "id":313},
{"name":"Heywood", "id":313},
{"name":"High Peak", "id":314},
{"name":"Hitchin and Harpenden", "id":315},
{"name":"Harpenden", "id":315},
{"name":"Hitchin", "id":315},
{"name":"Holborn and St Pancras", "id":316},
{"name":"Holborn", "id":316},
{"name":"St Pancras", "id":316},
{"name":"Hornchurch and Upminster", "id":317},
{"name":"Hornchurch", "id":317},
{"name":"Upminster", "id":317},
{"name":"Hornsey and Wood Green", "id":318},
{"name":"Hornsey", "id":318},
{"name":"Wood Green", "id":318},
{"name":"Horsham", "id":319},
{"name":"Houghton and Sunderland South", "id":320},
{"name":"Sunderland South", "id":320},
{"name":"Houghton", "id":320},
{"name":"Hove", "id":321},
{"name":"Huddersfield", "id":322},
{"name":"Huntingdon", "id":326},
{"name":"Hyndburn", "id":327},
{"name":"Ilford North", "id":328},
{"name":"Ilford South", "id":329},
{"name":"Inverclyde", "id":330},
{"name":"Inverness Nairn Badenoch and Strathspey", "id":331},
{"name":"Inverness", "id":331},
{"name":"Nairn", "id":331},
{"name":"Badenoch", "id":331},
{"name":"Strathspey", "id":331},
{"name":"Ipswich", "id":332},
{"name":"Isle of Wight", "id":333},
{"name":"Islington North", "id":334},
{"name":"Islington South and Finsbury", "id":335},
{"name":"Islington South", "id":335},
{"name":"Finsbury", "id":335},
{"name":"Islwyn", "id":336},
{"name":"Jarrow", "id":337},
{"name":"Keighley", "id":338},
{"name":"Kenilworth and Southam", "id":339},
{"name":"Southam", "id":339},
{"name":"Kenilworth", "id":339},
{"name":"Kensington", "id":340},
{"name":"Kettering", "id":341},
{"name":"Kilmarnock and Loudoun", "id":342},
{"name":"Kilmarnock", "id":342},
{"name":"Loudoun", "id":342},
{"name":"Kingston and Surbiton", "id":343},
{"name":"Kingston upon Hull East", "id":323},
{"name":"Kingston upon Hull North", "id":324},
{"name":"Kingston upon Hull West and Hessle", "id":325},
{"name":"Kingswood", "id":344},
{"name":"Kirkcaldy and Cowdenbeath", "id":345},
{"name":"Kirkcaldy", "id":345},
{"name":"Cowdenbeath", "id":345},
{"name":"Knowsley", "id":346},
{"name":"Lagan Valley", "id":347},
{"name":"Lanark and Hamilton East", "id":348},
{"name":"Lanark", "id":348},
{"name":"Hamilton East", "id":348},
{"name":"Lancaster and Fleetwood", "id":350},
{"name":"Lancaster", "id":350},
{"name":"Fleetwood", "id":350},
{"name":"Leeds Central", "id":351},
{"name":"Leeds East", "id":352},
{"name":"Leeds North East", "id":353},
{"name":"Leeds North West", "id":354},
{"name":"Leeds West", "id":355},
{"name":"Leicester East", "id":356},
{"name":"Leicester South", "id":357},
{"name":"Leicester West", "id":358},
{"name":"Leigh", "id":361},
{"name":"Lewes", "id":362},
{"name":"Lewisham East", "id":364},
{"name":"Lewisham West and Penge", "id":365},
{"name":"Lewisham West", "id":365},
{"name":"Penge", "id":365},
{"name":"Lewisham Deptford", "id":365},
{"name":"Leyton and Wanstead", "id":366},
{"name":"Leyton", "id":366},
{"name":"Wanstead", "id":366},
{"name":"Lichfield", "id":367},
{"name":"Lincoln", "id":368},
{"name":"Linlithgow and East Falkirk", "id":368},
{"name":"Linlithgow", "id":368},
{"name":"East Falkirk", "id":368},
{"name":"Liverpool Riverside", "id":370},
{"name":"Liverpool Walton", "id":371},
{"name":"Liverpool Wavertree", "id":372},
{"name":"Liverpool West Derby", "id":373},
{"name":"Livingston", "id":374},
{"name":"Llanelli", "id":375},
{"name":"Loughborough", "id":377},
{"name":"Louth and Horncastle", "id":378},
{"name":"Louth", "id":378},
{"name":"Horncastle", "id":378},
{"name":"Ludlow", "id":379},
{"name":"Luton North", "id":380},
{"name":"Luton South", "id":381},
{"name":"Macclesfield", "id":382},
{"name":"Maidenhead", "id":383},
{"name":"Maidstone and The Weald", "id":384},
{"name":"Maidstone", "id":384},
{"name":"The Weald", "id":384},
{"name":"Makerfield", "id":385},
{"name":"Maldon", "id":386},
{"name":"Manchester Central", "id":387},
{"name":"Manchester Gorton", "id":389},
{"name":"Manchester Withington", "id":389},
{"name":"Mansfield", "id":390},
{"name":"Meon Valley", "id":391},
{"name":"Meriden", "id":392},
{"name":"Merthyr Tydfil and Rhymney", "id":393},
{"name":"Merthyr Tydfil", "id":393},
{"name":"Rhymney", "id":393},
{"name":"Mid Bedfordshire", "id":42},
{"name":"Mid Derbyshire", "id":184},
{"name":"Mid Dorset and North Poole", "id":197},
{"name":"Mid Dorset", "id":197},
{"name":"North Poole", "id":197},
{"name":"Mid Norfolk", "id":421},
{"name":"Mid Sussex", "id":555},
{"name":"Mid Ulster", "id":585},
{"name":"Mid Worcestershire", "id":634},
{"name":"Middlesbrough", "id":394},
{"name":"Middlesbrough South and East Cleveland", "id":395},
{"name":"East Cleveland", "id":395},
{"name":"Middlesbrough South", "id":395},
{"name":"Midlothian", "id":396},
{"name":"Milton Keynes North", "id":397},
{"name":"Milton Keynes South", "id":398},
{"name":"Mitcham and Morden", "id":399},
{"name":"Morden", "id":399},
{"name":"Mitcham", "id":399},
{"name":"Mole Valley", "id":400},
{"name":"Monmouth", "id":401},
{"name":"Montgomeryshire", "id":402},
{"name":"Moray", "id":403},
{"name":"Morecambe and Lunesdale", "id":404},
{"name":"Morecambe", "id":404},
{"name":"Lunesdale", "id":404},
{"name":"Morley and Outwood", "id":405},
{"name":"Morley", "id":405},
{"name":"Outwood", "id":405},
{"name":"Motherwell and Wishaw", "id":406},
{"name":"Motherwell", "id":406},
{"name":"Wishaw", "id":406},
{"name":"Na h-Eileanan an Iar", "id":407},
{"name":"Neath", "id":408},
{"name":"New Forest East", "id":409},
{"name":"New Forest West", "id":410},
{"name":"Newark", "id":411},
{"name":"Newbury", "id":412},
{"name":"Newcastle upon Tyne Central", "id":412},
{"name":"Newcastle upon Tyne East", "id":412},
{"name":"Newcastle upon Tyne North", "id":416},
{"name":"Newcastle-under-Lyme", "id":416},
{"name":"Newport East", "id":417},
{"name":"Newport West", "id":418},
{"name":"Newry and Armagh", "id":419},
{"name":"Newton Abbot", "id":420},
{"name":"Normanton, Pontefract and Castleford", "id":426},
{"name":"North Antrim", "id":14},
{"name":"North Ayrshire and Arran", "id":25},
{"name":"North Cornwall", "id":162},
{"name":"North Devon", "id":190},
{"name":"North Dorset", "id":198},
{"name":"North Down", "id":202},
{"name":"North Durham", "id":215},
{"name":"North East Bedfordshire", "id":43},
{"name":"North East Cambridgeshire", "id":120},
{"name":"North East Derbyshire", "id":185},
{"name":"North East Fife", "id":250},
{"name":"North East Hampshire", "id":288},
{"name":"North East Hertfordshire", "id":309},
{"name":"North East Somerset", "id":518},
{"name":"North Herefordshire", "id":307},
{"name":"North Norfolk", "id":422},
{"name":"North Shropshire", "id":511},
{"name":"North Somerset", "id":517},
{"name":"North Swindon", "id":560},
{"name":"North Thanet", "id":567},
{"name":"North Tyneside", "id":583},
{"name":"North Warwickshire", "id":602},
{"name":"North West Cambridgeshire", "id":121},
{"name":"North West Durham", "id":216},
{"name":"North West Hampshire", "id":289},
{"name":"North West Leicestershire", "id":359},
{"name":"North West Norfolk", "id":423},
{"name":"North Wiltshire", "id":619},
{"name":"Northampton North", "id":427},
{"name":"Northampton South", "id":428},
{"name":"Norwich North", "id":430},
{"name":"Norwich South", "id":431},
{"name":"Nottingham East", "id":432},
{"name":"Nottingham North", "id":433},
{"name":"Nottingham South", "id":434},
{"name":"Nuneaton", "id":435},
{"name":"Ochil and South Perthshire", "id":436},
{"name":"Ochil", "id":436},
{"name":"South Perthshire", "id":436},
{"name":"Ogmore", "id":437},
{"name":"Old Bexley and Sidcup", "id":438},
{"name":"Sidcup", "id":438},
{"name":"Old Bexley", "id":438},
{"name":"Oldham East and Saddleworth", "id":439},
{"name":"Oldham East", "id":439},
{"name":"Saddleworth", "id":439},
{"name":"Oldham West and Royton", "id":440},
{"name":"Oldham West", "id":440},
{"name":"Royton", "id":440},
{"name":"Orkney and Shetland", "id":441},
{"name":"Orkney", "id":441},
{"name":"Shetland", "id":441},
{"name":"Orpington", "id":442},
{"name":"Oxford East", "id":443},
{"name":"Oxford West and Abingdon", "id":444},
{"name":"Abingdon", "id":444},
{"name":"Oxford West", "id":444},
{"name":"Paisley and Renfrewshire North", "id":445},
{"name":"Renfrewshire North", "id":445},
{"name":"Paisley and Renfrewshire South", "id":446},
{"name":"Renfrewshire South", "id":446},
{"name":"Pendle", "id":447},
{"name":"Penistone and Stocksbridge", "id":448},
{"name":"Stocksbridge", "id":448},
{"name":"Penistone", "id":448},
{"name":"Penrith and The Border", "id":449},
{"name":"The Border", "id":449},
{"name":"Penrith", "id":449},
{"name":"Perth and North Perthshire", "id":449},
{"name":"North Perthshire", "id":449},
{"name":"Perth", "id":449},
{"name":"Peterborough", "id":451},
{"name":"Plymouth, Moor View", "id":453},
{"name":"Moor View", "id":453},
{"name":"Plymouth, Sutton and Devonport", "id":453},
{"name":"Devonport", "id":453},
{"name":"Sutton", "id":453},
{"name":"Pontypridd", "id":454},
{"name":"Poole", "id":455},
{"name":"Poplar and Limehouse", "id":456},
{"name":"Poplar", "id":456},
{"name":"Limehouse", "id":456},
{"name":"Portsmouth North", "id":457},
{"name":"Portsmouth South", "id":458},
{"name":"Preseli Pembrokeshire", "id":459},
{"name":"Preston", "id":460},
{"name":"Pudsey", "id":461},
{"name":"Putney", "id":462},
{"name":"Rayleigh and Wickford", "id":463},
{"name":"Rayleigh", "id":463},
{"name":"Wickford", "id":463},
{"name":"Reading East", "id":464},
{"name":"Reading West", "id":465},
{"name":"Redcar", "id":466},
{"name":"Redditch", "id":467},
{"name":"Reigate", "id":468},
{"name":"Rhondda", "id":470},
{"name":"Ribble Valley", "id":471},
{"name":"Richmond", "id":471},
{"name":"Richmond Park", "id":471},
{"name":"Rochdale", "id":474},
{"name":"Rochester and Strood", "id":475},
{"name":"Rochester", "id":475},
{"name":"Strood", "id":475},
{"name":"Rochford and Southend East", "id":476},
{"name":"Southend East", "id":476},
{"name":"Rochford", "id":476},
{"name":"Romford", "id":477},
{"name":"Romsey and Southampton North", "id":478},
{"name":"Romsey", "id":478},
{"name":"Southampton North", "id":478},
{"name":"Ross Skye and Lochaber", "id":479},
{"name":"Skye", "id":479},
{"name":"Ross", "id":479},
{"name":"Lochaber", "id":479},
{"name":"Rossendale and Darwen", "id":480},
{"name":"Rossendale", "id":480},
{"name":"Darwen", "id":480},
{"name":"Rother Valley", "id":481},
{"name":"Rotherham", "id":482},
{"name":"Rugby", "id":483},
{"name":"Ruislip Northwood and Pinner", "id":484},
{"name":"Ruislip", "id":484},
{"name":"Northwood", "id":484},
{"name":"Pinner", "id":484},
{"name":"Runnymede and Weybridge", "id":485},
{"name":"Weybridge", "id":485},
{"name":"Runnymede", "id":485},
{"name":"Rushcliffe", "id":486},
{"name":"Rutherglen and Hamilton West", "id":487},
{"name":"Hamilton West", "id":487},
{"name":"Rutherglen", "id":487},
{"name":"Rutland and Melton", "id":488},
{"name":"Rutland", "id":488},
{"name":"Melton", "id":488},
{"name":"Saffron Walden", "id":489},
{"name":"Salford and Eccles", "id":489},
{"name":"Salford", "id":489},
{"name":"Eccles", "id":489},
{"name":"Salisbury", "id":496},
{"name":"Scarborough and Whitby", "id":497},
{"name":"Whitby", "id":497},
{"name":"Scarborough", "id":497},
{"name":"Scunthorpe", "id":498},
{"name":"Sedgefield", "id":499},
{"name":"Sefton Central", "id":500},
{"name":"Selby and Ainsty", "id":501},
{"name":"Selby", "id":501},
{"name":"Ainsty", "id":501},
{"name":"Sevenoaks", "id":502},
{"name":"Sheffield Central", "id":504},
{"name":"Sheffield South East", "id":507},
{"name":"Sheffield Brightside and Hillsborough", "id":503},
{"name":"Sheffield Brightside", "id":503},
{"name":"Hillsborough", "id":503},
{"name":"Sheffield Hallam", "id":505},
{"name":"Sheffield Heeley", "id":506},
{"name":"Sherwood", "id":508},
{"name":"Shipley", "id":509},
{"name":"Shrewsbury and Atcham", "id":510},
{"name":"Shrewsbury", "id":510},
{"name":"Atcham", "id":510},
{"name":"Sittingbourne and Sheppey", "id":512},
{"name":"Sittingbourne", "id":512},
{"name":"Sheppey", "id":512},
{"name":"Skipton and Ripon", "id":513},
{"name":"Skipton", "id":513},
{"name":"Ripon", "id":513},
{"name":"Sleaford and North Hykeham", "id":514},
{"name":"Sleaford", "id":514},
{"name":"North Hykeham", "id":514},
{"name":"Slough", "id":515},
{"name":"Solihull", "id":516},
{"name":"Somerton and Frome", "id":519},
{"name":"Frome", "id":519},
{"name":"Somerton", "id":519},
{"name":"South Antrim", "id":15},
{"name":"South Basildon and East Thurrock", "id":33},
{"name":"South Basildon", "id":33},
{"name":"East Thurrock", "id":33},
{"name":"South Cambridgeshire", "id":122},
{"name":"South Derbyshire", "id":186},
{"name":"South Dorset", "id":199},
{"name":"South Down", "id":203},
{"name":"South East Cambridgeshire", "id":123},
{"name":"South East Cornwall", "id":163},
{"name":"South Holland and The Deepings", "id":520},
{"name":"South Leicestershire", "id":360},
{"name":"South Norfolk", "id":424},
{"name":"South Northamptonshire", "id":429},
{"name":"South Ribble", "id":521},
{"name":"South Shields", "id":522},
{"name":"South Staffordshire", "id":530},
{"name":"South Suffolk", "id":549},
{"name":"South Swindon", "id":561},
{"name":"South Thanet", "id":568},
{"name":"South West Bedfordshire", "id":44},
{"name":"South West Devon", "id":191},
{"name":"South West Hertfordshire", "id":310},
{"name":"South West Norfolk", "id":425},
{"name":"South West Surrey", "id":554},
{"name":"South West Wiltshire", "id":620},
{"name":"Southampton Itchen", "id":523},
{"name":"Southampton Test", "id":524},
{"name":"Southend West", "id":525},
{"name":"Southport", "id":526},
{"name":"Spelthorne", "id":527},
{"name":"Saint Albans", "id":490},
{"name":"Saint Austell and Newquay", "id":491},
{"name":"Saint Austell", "id":491},
{"name":"Newquay", "id":491},
{"name":"Saint Helens North", "id":492},
{"name":"Saint Helens South and Whiston", "id":493},
{"name":"Saint Helens South", "id":493},
{"name":"Whiston", "id":493},
{"name":"Saint Ives", "id":494},
{"name":"Stafford", "id":528},
{"name":"Staffordshire Moorlands", "id":529},
{"name":"Stalybridge and Hyde", "id":531},
{"name":"Stalybridge", "id":531},
{"name":"Hyde", "id":531},
{"name":"Stevenage", "id":532},
{"name":"Stirling", "id":533},
{"name":"Stockport", "id":534},
{"name":"Stockton North", "id":535},
{"name":"Stockton South", "id":536},
{"name":"Stoke-on-Trent Central", "id":537},
{"name":"Stoke-on-Trent North", "id":538},
{"name":"Stoke-on-Trent South", "id":539},
{"name":"Stone", "id":540},
{"name":"Stourbridge", "id":541},
{"name":"Strangford", "id":542},
{"name":"Stratford-on-Avon", "id":543},
{"name":"Streatham", "id":544},
{"name":"Stretford and Urmston", "id":545},
{"name":"Stretford", "id":545},
{"name":"Urmston", "id":545},
{"name":"Stroud", "id":546},
{"name":"Suffolk Coastal", "id":548},
{"name":"Sunderland Central", "id":551},
{"name":"Surrey Heath", "id":553},
{"name":"Sutton and Cheam", "id":556},
{"name":"Cheam", "id":556},
{"name":"Sutton Coldfield", "id":557},
{"name":"Swansea East", "id":558},
{"name":"Swansea West", "id":559},
{"name":"Tamworth", "id":562},
{"name":"Tatton", "id":563},
{"name":"Taunton Deane", "id":564},
{"name":"Telford", "id":565},
{"name":"Tewkesbury", "id":566},
{"name":"The Cotswolds", "id":568},
{"name":"The Wrekin", "id":568},
{"name":"Thirsk and Malton", "id":569},
{"name":"Malton", "id":569},
{"name":"Thirsk", "id":569},
{"name":"Thornbury and Yate", "id":570},
{"name":"Thornbury", "id":570},
{"name":"Yate", "id":570},
{"name":"Thurrock", "id":571},
{"name":"Tiverton and Honiton", "id":572},
{"name":"Tiverton", "id":572},
{"name":"Honiton", "id":572},
{"name":"Tonbridge and Malling", "id":573},
{"name":"Tonbridge", "id":573},
{"name":"Malling", "id":573},
{"name":"Tooting", "id":574},
{"name":"Torbay", "id":575},
{"name":"Torfaen", "id":576},
{"name":"Torridge and West Devon", "id":576},
{"name":"West Devon", "id":576},
{"name":"Torridge", "id":576},
{"name":"Totnes", "id":577},
{"name":"Tottenham", "id":578},
{"name":"Truro and Falmouth", "id":579},
{"name":"Truro", "id":579},
{"name":"Falmouth", "id":579},
{"name":"Tunbridge Wells", "id":580},
{"name":"Twickenham", "id":581},
{"name":"Tynemouth", "id":582},
{"name":"Upper Bann", "id":586},
{"name":"Uxbridge and South Ruislip", "id":587},
{"name":"Uxbridge", "id":587},
{"name":"South Ruislip", "id":587},
{"name":"Vale of Clwyd", "id":588},
{"name":"Vale of Glamorgan", "id":589},
{"name":"Vauxhall", "id":590},
{"name":"Wakefield", "id":591},
{"name":"Wallasey", "id":592},
{"name":"Walsall North", "id":593},
{"name":"Walsall South", "id":594},
{"name":"Walthamstow", "id":595},
{"name":"Wansbeck", "id":596},
{"name":"Wantage", "id":597},
{"name":"Warley", "id":598},
{"name":"Warrington North", "id":599},
{"name":"Warrington South", "id":600},
{"name":"Warwick and Leamington", "id":601},
{"name":"Leamington", "id":601},
{"name":"Warwick", "id":601},
{"name":"Washington and Sunderland West", "id":603},
{"name":"Sunderland West", "id":603},
{"name":"Washington", "id":603},
{"name":"Watford", "id":604},
{"name":"Waveney", "id":605},
{"name":"Wealden", "id":606},
{"name":"Weaver Vale", "id":607},
{"name":"Wellingborough", "id":608},
{"name":"Wells", "id":609},
{"name":"Welwyn Hatfield", "id":610},
{"name":"Wentworth and Dearne", "id":611},
{"name":"Wentworth", "id":611},
{"name":"Dearne", "id":611},
{"name":"West Aberdeenshire and Kincardine", "id":5},
{"name":"West Aberdeenshire", "id":5},
{"name":"Kincardine", "id":5},
{"name":"West Bromwich East", "id":612},
{"name":"West Bromwich West", "id":613},
{"name":"West Dorset", "id":200},
{"name":"West Dunbartonshire", "id":210},
{"name":"West Ham", "id":614},
{"name":"West Lancashire", "id":349},
{"name":"West Suffolk", "id":550},
{"name":"West Tyrone", "id":584},
{"name":"West Worcestershire", "id":635},
{"name":"Westminster North", "id":615},
{"name":"Westmorland and Lonsdale", "id":616},
{"name":"Lonsdale", "id":616},
{"name":"Westmorland", "id":616},
{"name":"Weston-Super-Mare", "id":617},
{"name":"Wigan", "id":618},
{"name":"Wimbledon", "id":621},
{"name":"Winchester", "id":622},
{"name":"Windsor", "id":623},
{"name":"Wirral South", "id":624},
{"name":"Wirral West", "id":625},
{"name":"Witham", "id":626},
{"name":"Witney", "id":627},
{"name":"Woking", "id":628},
{"name":"Wokingham", "id":629},
{"name":"Wolverhampton North East", "id":630},
{"name":"Wolverhampton South East", "id":631},
{"name":"Wolverhampton South West", "id":632},
{"name":"Worcester", "id":633},
{"name":"Workington", "id":636},
{"name":"Worsley and Eccles South", "id":637},
{"name":"Worsley", "id":637},
{"name":"Eccles South", "id":637},
{"name":"Worthing West", "id":639},
{"name":"Wrexham", "id":641},
{"name":"Wycombe", "id":642},
{"name":"Wyre and Preston North", "id":643},
{"name":"Preston North", "id":643},
{"name":"Wyre", "id":643},
{"name":"Wyre Forest", "id":644},
{"name":"Wythenshawe and Sale East", "id":645},
{"name":"Wythenshawe", "id":645},
{"name":"Sale East", "id":645},
{"name":"Yeovil", "id":646},
{"name":"Ynys Môn", "id":647},
{"name":"York Central", "id":648},
{"name":"York Outer", "id":649},
{"name":"Yorkshire East", "id":650}
]

candidates.json

JSON
This contains the candidate names and parties for those running in the 2017 snap election.
[{
		"districtId": 1,
		"districtName": "Aberavon",
		"candidates": [{
				"fullName": "Sadie Vidal",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Stephen Kinnock",
				"party": "Labour",
				"incumbent": true
			},
			{
				"fullName": "Cen Phillips",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Andrew Bennison",
				"party": "Plaid Cymru",
				"incumbent": false
			},
			{
				"fullName": "Caroline Jones",
				"party": "UK IP",
				"incumbent": false
			}
		]
	},
	{
		"districtId": 2,
		"districtName": "ABERCONWY",
		"candidates": [{
				"fullName": "Guto Bebb",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "Emily Owen",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Sarah Lesiter-Burgess",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Wyn Jones",
				"party": "Plaid Cymru",
				"incumbent": false
			}
		]
	},
	{
		"districtId": 3,
		"districtName": "ABERDEEN NORTH",
		"candidates": [{
				"fullName": "Grace O'Keeffe",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Orr Vinegold",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Isobel Davidson",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Kirsty Blackman",
				"party": "Scottish National Party",
				"incumbent": true
			},
			{
				"fullName": "Richard Durkin",
				"party": "Independent",
				"incumbent": false
			}
		]
	},
	{
		"districtId": 4,
		"districtName": "ABERDEEN SOUTH",
		"candidates": [{
				"fullName": "Ross Thomson",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Callum O'Dwyer",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Jenny Wilson",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Callum McCaig",
				"party": "Scottish National Party",
				"incumbent": true
			}
		]
	},
	{
		"districtId": 5,
		"districtName": "ABERDEENSHIRE WEST & KINCARDINE",
		"candidates": [{
				"fullName": "Andrew Bowie",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Barry Black",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "John Waddell",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Stuart Donaldson",
				"party": "Scottish National Party",
				"incumbent": true
			}
		]
	},
	{
		"districtId": 6,
		"districtName": "AIRDRIE & SHOTTS",
		"candidates": [{
				"fullName": "Jennifer Donnellan",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Helen McFarlane",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Ewan McRobert",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Neil Gray",
				"party": "Scottish National Party",
				"incumbent": true
			}
		]
	},
	{
		"districtId": 7,
		"districtName": "ALDERSHOT",
		"candidates": [{
				"fullName": "Leo Docherty",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Gary Puffett",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Alan Hilliar",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Donna Wallace",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Roy Swales",
				"party": "UK IP",
				"incumbent": false
			}
		]
	}, {
		"districtId": 8,
		"districtName": "ALDRIDGE-BROWNHILLS",
		"candidates": [{
				"fullName": "Wendy Morton",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "John Fisher",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Ian Garrett",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Mark Beech",
				"party": "Loony",
				"incumbent": false
			}
		]
	}, {
		"districtId": 9,
		"districtName": "ALTRINCHAM and SALE WEST",
		"candidates": [{
				"fullName": "Graham Brady",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "Andrew Western",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Jane Brophy",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Geraldine Coggins",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Neil Taylor",
				"party": "Lib",
				"incumbent": false
			}
		]
	}, {
		"districtId": 10,
		"districtName": "ALYN and DEESIDE",
		"candidates": [{
				"fullName": "Laura Knightly",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Mark Tami",
				"party": "Labour",
				"incumbent": true
			},
			{
				"fullName": "Pete Williams",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Jacqui Hurst",
				"party": "Plaid Cymru",
				"incumbent": false
			},
			{
				"fullName": "David Griffiths",
				"party": "UK IP",
				"incumbent": false
			}
		]
	}, {
		"districtId": 11,
		"districtName": "AMBER VALLEY",
		"candidates": [{
				"fullName": "Nigel Mills",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "James Dawson",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Kate Smith",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Matt McGuinness",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Daniel Bamford",
				"party": "Independent",
				"incumbent": false
			}
		]
	}, {
		"districtId": 12,
		"districtName": "ANGUS",
		"candidates": [{
				"fullName": "Kirstene Hair",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "William Campbell",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Clive Sneddon",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Mike Weir",
				"party": "Scottish National Party",
				"incumbent": true
			}
		]
	}, {
		"districtId": 13,
		"districtName": "ANTRIM EAST",
		"candidates": [{
				"fullName": "Mark Logan",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "John Stewart",
				"party": "UUP",
				"incumbent": false
			},
			{
				"fullName": "Sammy Wilson",
				"party": "Democratic Unionist Party",
				"incumbent": true
			},
			{
				"fullName": "Margaret McKillop",
				"party": "Social Democratic and Labour Party",
				"incumbent": false
			},
			{
				"fullName": "Oliver McMullan",
				"party": "Sinn Fein",
				"incumbent": false
			},
			{
				"fullName": "Stewart Dickson",
				"party": "Alliance",
				"incumbent": false
			}
		]
	}, {
		"districtId": 14,
		"districtName": "ANTRIM NORTH",
		"candidates": [{
				"fullName": "Jackson Minford",
				"party": "UUP",
				"incumbent": false
			},
			{
				"fullName": "Ian Paisley",
				"party": "Democratic Unionist Party",
				"incumbent": true
			},
			{
				"fullName": "Declan O'Loan",
				"party": "Social Democratic and Labour Party",
				"incumbent": false
			},
			{
				"fullName": "Cara McShane",
				"party": "Sinn Fein",
				"incumbent": false
			},
			{
				"fullName": "Patricia O'Lynn",
				"party": "Alliance",
				"incumbent": false
			},
			{
				"fullName": "Timothy Gaston",
				"party": "TUV",
				"incumbent": false
			}
		]
	}, {
		"districtId": 15,
		"districtName": "ANTRIM SOUTH",
		"candidates": [{
				"fullName": "Paul Girvan",
				"party": "Democratic Unionist Party",
				"incumbent": false
			},
			{
				"fullName": "Danny Kinahan",
				"party": "UUP",
				"incumbent": true
			},
			{
				"fullName": "Roisin Lynch",
				"party": "Social Democratic and Labour Party",
				"incumbent": false
			},
			{
				"fullName": "Declan Kearney",
				"party": "Sinn Fein",
				"incumbent": false
			},
			{
				"fullName": "Neil Kelly",
				"party": "Alliance",
				"incumbent": false
			}
		]
	}, {
		"districtId": 16,
		"districtName": "ARFON",
		"candidates": [{
				"fullName": "Phillippa Parry",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Mary Griffiths Clarke",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Calum Davies",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Hywel Williams",
				"party": "Plaid Cymru",
				"incumbent": true
			}
		]
	}, {
		"districtId": 17,
		"districtName": "ARGYLL and BUTE",
		"candidates": [{
				"fullName": "Gary Mulvaney",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Michael Kelly",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Alan Reid",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Brendan O'Hara",
				"party": "Scottish National Party",
				"incumbent": true
			}
		]
	}, {
		"districtId": 18,
		"districtName": "ARUNDEL and SOUTH DOWNS",
		"candidates": [{
				"fullName": "Nick Herbert",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "Caroline Fife",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Shweta Kapadia",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Jo Prior",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "John Wallace",
				"party": "UK IP",
				"incumbent": false
			}
		]
	}, {
		"districtId": 19,
		"districtName": "ASHFIELD",
		"candidates": [{
				"fullName": "Tony Harper",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Gloria De Piero",
				"party": "Labour",
				"incumbent": true
			},
			{
				"fullName": "Bob Charlesworth",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Arran Rangi",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Ray Young",
				"party": "UK IP",
				"incumbent": false
			},
			{
				"fullName": "Gail Turner",
				"party": "Independent",
				"incumbent": false
			}
		]
	}, {
		"districtId": 20,
		"districtName": "ASHFORD",
		"candidates": [{
				"fullName": "Damian Green",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "Sally Gathern",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Adrian Gee-Turner",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Mandy Rossi",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Gerald O'Brien",
				"party": "UK IP",
				"incumbent": false
			}
		]
	}, {
		"districtId": 21,
		"districtName": "ASHTON UNDER LYNE",
		"candidates": [{
				"fullName": "Jack Rankin",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Angela Rayner",
				"party": "Labour",
				"incumbent": true
			},
			{
				"fullName": "Carly Hicks",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Andy Hunter-Rossall",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Maurice Jackson",
				"party": "UK IP",
				"incumbent": false
			}
		]
	}, {
		"districtId": 22,
		"districtName": "AYLESBURY",
		"candidates": [{
				"fullName": "David Lidington",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "Mark Bateman",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Steven Lambert",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Coral Simpson",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Vijay Srao",
				"party": "UK IP",
				"incumbent": false
			},
			{
				"fullName": "Kyle Michael",
				"party": "Independent",
				"incumbent": false
			}
		]
	}, {
		"districtId": 23,
		"districtName": "AYR, CARRICK and CUMNOCK",
		"candidates": [{
				"fullName": "Bill Grant",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Carol Mochan",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Callum Leslie",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Corri Wilson",
				"party": "Scottish National Party",
				"incumbent": true
			}
		]
	}, {
		"districtId": 24,
		"districtName": "AYRSHIRE CENTRAL",
		"candidates": [{
				"fullName": "Caroline Martin",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Nairn McDonald",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Tom Inglis",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Dr Philippa Whitford",
				"party": "Scottish National Party",
				"incumbent": true
			}
		]
	}, {
		"districtId": 25,
		"districtName": "AYRSHIRE NORTH and ARRAN",
		"candidates": [{
				"fullName": "David Rocks",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Chris Rimicans",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Mark Dickson",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Patricia Gibson",
				"party": "Scottish National Party",
				"incumbent": true
			}
		]
	}, {
		"districtId": 26,
		"districtName": "BANBURY",
		"candidates": [{
				"fullName": "Victoria Prentis",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "Sean Woodcock",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "John Howson",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Ian Middleton",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Dickie Bird",
				"party": "UK IP",
				"incumbent": false
			},
			{
				"fullName": "Roseanne Edwards",
				"party": "Independent",
				"incumbent": false
			}
		]
	}, {
		"districtId": 27,
		"districtName": "BANFF and BUCHAN",
		"candidates": [{
				"fullName": "David Duguid",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Caitlin Stott",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Galen Milne",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Dr Eilidh Whiteford",
				"party": "Scottish National Party",
				"incumbent": true
			}
		]
	}, {
		"districtId": 28,
		"districtName": "BARKING",
		"candidates": [{
				"fullName": "Talati Minesh",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Dame Margaret Hodge",
				"party": "Labour",
				"incumbent": true
			},
			{
				"fullName": "Pauline Pearce",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Shannon Butterfield",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Roger Gravett",
				"party": "UK IP",
				"incumbent": false
			},
			{
				"fullName": "Noel Falvey",
				"party": "Independent",
				"incumbent": false
			}
		]
	}, {
		"districtId": 29,
		"districtName": "BARNSLEY CENTRAL",
		"candidates": [{
				"fullName": "Amanda Ford",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Dan Jarvis",
				"party": "Labour",
				"incumbent": true
			},
			{
				"fullName": "David Ridgway",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Richard Trotman",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Gavin Felton",
				"party": "UK IP",
				"incumbent": false
			},
			{
				"fullName": "Stephen Morris",
				"party": "Eng Dem",
				"incumbent": false
			}
		]
	}, {
		"districtId": 30,
		"districtName": "BARNSLEY EAST",
		"candidates": [{
				"fullName": "Andrew Lloyd",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "Stephanie Peacock",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Nicola Turner",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "James Dalton",
				"party": "UK IP",
				"incumbent": false
			},
			{
				"fullName": "Kevin Riddiough",
				"party": "Eng Dem",
				"incumbent": false
			},
			{
				"fullName": "Tony Devoy",
				"party": "Yorkshire",
				"incumbent": false
			}
		]
	}, {
		"districtId": 31,
		"districtName": "BARROW and FURNESS",
		"candidates": [{
				"fullName": "Simon Fell",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "John Woodcock",
				"party": "Labor Co-op",
				"incumbent": true
			},
			{
				"fullName": "Loraine Birchall",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Rob O'Hara",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Alan Piper",
				"party": "UK IP",
				"incumbent": false
			}
		]
	}, {
		"districtId": 32,
		"districtName": "BASILDON and BILLERICAY",
		"candidates": [{
				"fullName": "John Baron",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "Kayte Block",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Antonia Harrison",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Tina Hughes",
				"party": "UK IP",
				"incumbent": false
			}
		]
	}, {
		"districtId": 33,
		"districtName": "BASILDON SOUTH and THURROCK EAST",
		"candidates": [{
				"fullName": "Stephen Metcalfe",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "Byron Taylor",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "Reetendra Banerji",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Sim Harman",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Peter Whittle",
				"party": "UK IP",
				"incumbent": false
			},
			{
				"fullName": "Paul Borg",
				"party": "BNP",
				"incumbent": false
			}
		]
	}, {
		"districtId": 34,
		"districtName": "BASINGSTOKE",
		"candidates": [{
				"fullName": "Maria Miller",
				"party": "Conservative",
				"incumbent": true
			},
			{
				"fullName": "Terry Bridgeman",
				"party": "Labour",
				"incumbent": false
			},
			{
				"fullName": "John Shaw",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Richard Winter",
				"party": "Green",
				"incumbent": false
			},
			{
				"fullName": "Alan Stone",
				"party": "UK IP",
				"incumbent": false
			},
			{
				"fullName": "Scott Neville",
				"party": "Libertarian",
				"incumbent": false
			}
		]
	}, {
		"districtId": 35,
		"districtName": "BASSETLAW",
		"candidates": [{
				"fullName": "Annette Simpson",
				"party": "Conservative",
				"incumbent": false
			},
			{
				"fullName": "John Mann",
				"party": "Labour",
				"incumbent": true
			},
			{
				"fullName": "Leon Duveen",
				"party": "Liberal Democrats",
				"incumbent": false
			},
			{
				"fullName": "Nigel Turner",
				"party": "Independent",
				"incumbent": false
			}
...

This file has been truncated, please download it to see its full contents.

index.js

JavaScript
Main skill - and yes I know this needs refactoring :)
'use strict';
var Alexa = require("alexa-sdk");
var appId = 'amzn1.ask.skill.xxx';

const https = require('https');

// This is used by the VoiceLabs analytics
var APP_ID = appId;
var VoiceLabs = require('voicelabs')('xxx');

exports.handler = function(event, context, callback) {
    var alexa = Alexa.handler(event, context);
    alexa.appId = appId;
    alexa.dynamoDBTableName = 'parliamentUsers';
    alexa.registerHandlers(newSessionHandlers, electionModeHandlers, startHandlers);
    alexa.execute();
};

var states = {
    STARTMODE: '_STARTMODE',  // Prompt the user to start navigating the information
    ELECTIONMODE: '_ELECTIONMODE', // User wants to know who is running for office
};

var electionCandidates = require("candidates.json");
var validDistricts = require("districts.json");
var electionResults = require("results.json");

var newSessionHandlers = {
    'NewSession': function () {
        if(Object.keys(this.attributes).length === 0) {
            this.attributes['endedSessionCount'] = 0;
        }
        console.log("New Session " + JSON.stringify(this.event.request.type));
        if(this.event.request.type === "LaunchRequest") {
            this.handler.state = states.STARTMODE;
            this.emit(':ask', 'Welcome to the Parliament Facts skill. The election has now concluded, and we have ' +
                'full results available. Would you like to hear who ran and the results for an individual constituency?',
                'Say yes for more information or no to quit.');
        } else if (this.event.request.intent.name === "ElectionIntent" && this.event.request.intent.slots.constituency.value) {

            // fix defect to remove a dot at the end of the constituency name.
            var constituencyRequested = this.event.request.intent.slots.constituency.value;

            if (constituencyRequested.substring( constituencyRequested.length - 1, constituencyRequested.length ) === '.') {
                console.log("need to replace dot");
                constituencyRequested = constituencyRequested.substring( 0, constituencyRequested.length - 1);
            }

            console.log("attempt to match: " + constituencyRequested);
            var userProvidedValidDistrict = false;
            var districtId = 0;
            for (var i = 0; i < validDistricts.length; i++) {
                if (validDistricts[i].name.toLowerCase() === constituencyRequested.toLowerCase()) {
                    console.log("valid district entered");
                    userProvidedValidDistrict = true;
                    districtId = validDistricts[i].id;
                }
            }

            if (userProvidedValidDistrict) {
                var localCandidates = electionCandidates[0].candidates;
                var localDistrict = electionCandidates[0].districtName;

                for (var j = 0; j < electionCandidates.length; j++) {
                    if (electionCandidates[j].districtId === districtId) {
                        localCandidates = electionCandidates[j].candidates;
                        localDistrict = electionCandidates[j].districtName;
                    }
                }

                var speechOutput = "The candidates for the 2017 Parliamentary election for " + localDistrict + " were as follows. ";
                var cardOutput = localDistrict + "\n";
                var cardTitle = "Candidates for 2017 Parliamentary Election";

                var incumbentRace = false;
                var incumbentName = "None";

                for (var i = 0; i < localCandidates.length; i++ ) {
                    console.log(JSON.stringify(localCandidates[i]));
                    if (localCandidates[i].incumbent === true) {
                        incumbentRace = true;
                        incumbentName = localCandidates[i].fullName;
                    }
                    speechOutput = speechOutput + "<break time=\"1s\"/>";
                    speechOutput = speechOutput + localCandidates[i].fullName + 
                        " is from " + localCandidates[i].party + ". ";
                    cardOutput = cardOutput + localCandidates[i].fullName + " (" + localCandidates[i].party + ")\n";
                }
            
                if (incumbentRace) {
                    speechOutput = speechOutput + "<break time=\"1s\"/>";
                    speechOutput = speechOutput + incumbentName + " served in this position during the prior term " +
                    "and was considered the incumbent. ";
                    cardOutput = cardOutput + "Incumbent: " + incumbentName + "\n";
                }

                var memberParliamentName  = "Unknown";
                var memberParliamentParty = "Unknown";

                for (var k = 0; k < electionResults.length; k++ ) {
                    if (electionResults[k].districtId === districtId) {
                        memberParliamentName = electionResults[k].candidateName;
                        memberParliamentParty = electionResults[k].partyName;
                    }
                }

                speechOutput = speechOutput + "<break time=\"1s\"/>";
                speechOutput = speechOutput + memberParliamentName + " was the victor in the election from " +
                    memberParliamentParty + ". "; 
                cardOutput = cardOutput + "Winner: " + memberParliamentName + " (" + memberParliamentParty + ")";

                VoiceLabs.track(this.event.session, 'FindCandidates', localDistrict, speechOutput, (error, response) => {
                    console.log('VoiceLabs Response: ' + JSON.stringify(response));
                    this.emit(':tellWithCard', speechOutput, cardTitle, cardOutput);
                });

            } else {
                var speechOutput = "I'm sorry, " + this.event.request.intent.slots.constituency.value + 
                    " wasn't a valid constituency name. Please try again.";
                var reprompt = "You didn't provide a constituency with your query. Please restate your question " +
                    "with one. For example, please say something like Who is running for office in Canterbury.";
                console.log("Invalid Value for Constituency: " + this.event.request.intent.slots.constituency.value);
                this.emit(':ask', speechOutput, reprompt);
            }
        } else if (this.event.request.intent.name === "FindDistrict") {
            var speechOutput = "Excellent, lets find your district.  Which country is this for?  Please say something like England. ";
            var reprompt = "This feature will walk you through finding your constituency.  Please say a country name like England to begin.";
            this.handler.state = states.ELECTIONMODE;
            this.emit(':ask', speechOutput, reprompt);
        } else if (this.event.request.intent.name === "FindByPostCode") {
            console.log('Attempting to find by Postal Code');
            console.log('District: ' + this.event.request.intent.slots.postalCodeDistrict.value);
            console.log('Inward: ' + this.event.request.intent.slots.postalCodeInward.value);

            var postalCode = this.event.request.intent.slots.postalCodeDistrict.value;

            // if broken into two strings - merge back together
            if (this.event.request.intent.slots.postalCodeInward.value) {
                console.log("merged strings");
                postalCode = postalCode + this.event.request.intent.slots.postalCodeInward.value;
            }

            var APIurl = 'https://api.postcodes.io/postcodes/';
            https.get(APIurl + postalCode, (res) => {
                console.log('API Call HTTP Code: ', res.statusCode); // this indicates if the HTTP request was valid

                var tempData = "";

                res.on('data', (d) => {
                    tempData += d;
                });
                        
                // this is the logic that gets executed once a successful API call is completed
                res.on('end', (d) => {
                    console.log('completed request');
                    // now process data returned from the API call
                    var returnData = eval('(' + tempData.toString('utf8') + ')');
                    console.log(JSON.stringify(returnData));

                    if(returnData.status === 200) {
                        console.log('postal code was valid');
                        console.log(JSON.stringify(returnData.result));
                        var constituency = returnData.result.parliamentary_constituency;
                        console.log(constituency);

                        // using the constituency from the API call, match with the lookup data
                        var validDistrict = false;
                        for (var i = 0; i < validDistricts.length; i++) {
                            if (validDistricts[i].name.toLowerCase() === constituency.toLowerCase()) {
                                console.log("valid district entered");
                                validDistrict = true;
                                districtId = validDistricts[i].id;
                            }
                        }

                        if (validDistrict) {
                            var localMP = "full name";
                            var partyMP = "TBD";
                            for (var j = 0; j < electionResults.length; j++) {
                                if (electionResults[j].districtId === districtId) {
                                    console.log("found match: " + JSON.stringify(electionResults[j]));
                                    localMP = electionResults[j].candidateName;
                                    partyMP = electionResults[j].partyName;
                                }
                            }
                            // format the message based on the API call
                            console.log("retrieving results information for district id: " + districtId);
                            console.log(JSON.stringify(electionResults[districtId]));
                            var message = "This postal code matches constituency " + constituency + ". ";
                                message = message + "The representative is " + localMP + " from " + partyMP + ".";
                            this.emit(':tell', message);
                        } else {
                            console.log('could not match in lookup table');
                            var message = "Sorry, I couldn't find a constituency matching postal code " + postalCode;
                            this.emit(':tell', message);
                        }

                    } else if (returnData.status === 404) {
                        console.log('postal code not found');
                        var message = "Sorry, I couldn't find a constituency matching postal code " + postalCode;
                        this.emit(':tell', message);
                    }
                });
            }).on('error', (e) => {
                var message = "Sorry, I'm having trouble looking up postal codes right now. Please try again later.";
                this.emit(':tell', message);
                //console.error(e);
            });
        } else {
            console.log("Unhandled Response: " + JSON.stringify(this.event.request));
            var message = "I'm sorry, I didn't understand your request. Please try again.";
            var reprompt = "If you would like me to query who is running for office in a given constituency, please say " +
                "something like Who is running for office in Caterbury.";
            this.emit(':ask', message, reprompt);
        }
    },
    "AMAZON.StopIntent": function() {
      VoiceLabs.track(this.event.session, intent.name, intent.slots, null, (error, response) => {
          this.emit(':tell', "Goodbye!");
      });  
    },
    "AMAZON.CancelIntent": function() {
      VoiceLabs.track(this.event.session, intent.name, intent.slots, null, (error, response) => {
          this.emit(':tell', "Goodbye!");
      });  
    },
    'SessionEndedRequest': function () {
        console.log('session ended!');
        //this.attributes['endedSessionCount'] += 1;
        VoiceLabs.track(this.event.session, intent.name, intent.slots, null, (error, response) => {
            this.emit(":tell", "Goodbye!");
        });
    },
    'Unhandled': function() {
        console.log("UNHANDLED");
        var message = "I'm sorry, I didn't understand your request. Please try again.";
        VoiceLabs.track(this.event.session, intent.name, intent.slots, message, (error, response) => {
            this.emit(':tell', message);
        });
    }    
};

var startHandlers = Alexa.CreateStateHandler(states.STARTMODE, {
    'NewSession': function() {
        this.emit('NewSession');
    },
    'FindDistrict': function() {
        var speechOutput = "Excellent, lets find your district.  Which country is this for?  Please say something like England. ";
        var reprompt = "This feature will walk you through finding your constituency.  Please say a country name like England to begin.";
        this.emit(':ask', speechOutput, reprompt);
        this.handler.state = states.ELECTIONMODE;
    },
    'ElectionIntent': function() {
        console.log("election intent from start handler");
        if (this.event.request.intent.slots.constituency.value) {
            console.log("Constituency Provided");

            // fix defect to remove a dot at the end of the constituency name.
            var constituencyRequested = this.event.request.intent.slots.constituency.value;

            if (constituencyRequested.substring( constituencyRequested.length - 1, constituencyRequested.length ) === '.') {
                console.log("need to replace dot");
                constituencyRequested = constituencyRequested.substring( 0, constituencyRequested.length - 1);
            }

            console.log("attempt to match: " + constituencyRequested);
            var userProvidedValidDistrict = false;
            var districtId = 0;
            for (var i = 0; i < validDistricts.length; i++) {
                if (validDistricts[i].name.toLowerCase() === constituencyRequested.toLowerCase()) {
                    console.log("valid district entered");
                    userProvidedValidDistrict = true;
                    districtId = validDistricts[i].id;
                }
            }

            if (userProvidedValidDistrict) {
                var localCandidates = electionCandidates[0].candidates;
                var localDistrict = electionCandidates[0].districtName;

                for (var j = 0; j < electionCandidates.length; j++) {
                    if (electionCandidates[j].districtId === districtId) {
                        localCandidates = electionCandidates[j].candidates;
                        localDistrict = electionCandidates[j].districtName;
                    }
                }

                var speechOutput = "The candidates for the 2017 Parliamentary election for " + localDistrict + " are as follows. ";
                var cardOutput = localDistrict + "\n";
                var cardTitle = "Candidates for 2017 Parliamentary Election";

                var incumbentRace = false;
                var incumbentName = "None";

                for (var i = 0; i < localCandidates.length; i++ ) {
                    console.log(JSON.stringify(localCandidates[i]));
                    if (localCandidates[i].incumbent === true) {
                        incumbentRace = true;
                        incumbentName = localCandidates[i].fullName;
                    }
                    speechOutput = speechOutput + "<break time=\"1s\"/>";
                    speechOutput = speechOutput + localCandidates[i].fullName + 
                        " is from " + localCandidates[i].party + ". ";
                    cardOutput = cardOutput + localCandidates[i].fullName + " (" + localCandidates[i].party + ")\n";
                }
            
                if (incumbentRace) {
                    speechOutput = speechOutput + "<break time=\"1s\"/>";
                    speechOutput = speechOutput + incumbentName + " served in this position during the prior term " +
                        "and is considered the incumbent. ";
                    cardOutput = cardOutput + "Incumbent: " + incumbentName;
                }

                var memberParliamentName  = "Unknown";
                var memberParliamentParty = "Unknown";

                for (var k = 0; k < electionResults.length; k++ ) {
                    if (electionResults[k].districtId === districtId) {
                        memberParliamentName = electionResults[k].candidateName;
                        memberParliamentParty = electionResults[k].partyName;
                    }
                }

                speechOutput = speechOutput + "<break time=\"1s\"/>";
                speechOutput = speechOutput + memberParliamentName + " was the victor in the election from " +
                    memberParliamentParty + ". ";
                cardOutput = cardOutput + "Winner: " + memberParliamentName + " (" + memberParliamentParty + ")";

                this.emit(':tellWithCard', speechOutput, cardTitle, cardOutput);
            } else {
                var speechOutput = "I'm sorry, " + this.event.request.intent.slots.constituency.value + 
                    " wasn't a valid constituency name. Please try again.";
                var reprompt = "Please provide a constituency name with your query. For example, say something like " +
                    "Who is running for office in Canterbury.";                  
                console.log("Invalid Value for Constituency: " + this.event.request.intent.slots.constituency.value);
                this.emit(':ask', speechOutput, reprompt);
            }
        } else {
            var speechOutput = "Sorry, you didn't provide a constituency name along with your query. If you would " +
                "like me to find who is running for office, please say something like Who is running for office in Canterbury.";
            var reprompt = "Please provide a constituency name with your query. For example, say something like " +
                "Who is running for office in Canterbury.";
            console.log("No Constituency Provided");
            this.emit(':ask', speechOutput, reprompt);
        }
    },
    'FindByPostCode': function () {
        console.log('Attempting to find by Postal Code');
        console.log('District: ' + this.event.request.intent.slots.postalCodeDistrict.value);
        console.log('Inward: ' + this.event.request.intent.slots.postalCodeInward.value);

        var postalCode = this.event.request.intent.slots.postalCodeDistrict.value;

        // if broken into two strings - merge back together
        if (this.event.request.intent.slots.postalCodeInward.value) {
            console.log("merged strings");
            postalCode = postalCode + this.event.request.intent.slots.postalCodeInward.value;
        }

        var APIurl = 'https://api.postcodes.io/postcodes/';
        https.get(APIurl + postalCode, (res) => {
            console.log('API Call HTTP Code: ', res.statusCode); // this indicates if the HTTP request was valid

            var tempData = "";

            res.on('data', (d) => {
                tempData += d;
            });
                        
            // this is the logic that gets executed once a successful API call is completed
            res.on('end', (d) => {
                console.log('completed request');
                // now process data returned from the API call
                var returnData = eval('(' + tempData.toString('utf8') + ')');
                console.log(JSON.stringify(returnData));

                if(returnData.status === 200) {
                    console.log('postal code was valid');
                    console.log(JSON.stringify(returnData.result));
                    var constituency = returnData.result.parliamentary_constituency;
                    console.log(constituency);

                    // using the constituency from the API call, match with the lookup data
                    var validDistrict = false;
                    for (var i = 0; i < validDistricts.length; i++) {
                        if (validDistricts[i].name.toLowerCase() === constituency.toLowerCase()) {
                            console.log("valid district entered");
                            validDistrict = true;
                            var districtId = validDistricts[i].id;
                        }
                    }

                    console.log('now look up district');

                    if (validDistrict) {
                        // format the message based on the API call
                        var message = "This postal code matches constituency " + constituency + ". ";
                            message = message + "The representative is " + electionResults[districtId].candidateName;
                            message = message + " from " + electionResults[districtId].partyName + ".";

                        this.emit(':tell', message);
                    } else {
                        console.log('could not match in lookup table');
                        var message = "Sorry, I couldn't find a constituency matching postal code " + postalCode;
                        this.emit(':tell', message);
                    }

                } else if (returnData.status === 404) {
                    console.log('postal code not found');
                    var message = "Sorry, I couldn't find a constituency matching postal code " + postalCode;
                    this.emit(':tell', message);
                }
            });
        }).on('error', (e) => {
            var message = "Sorry, I'm having trouble looking up postal codes right now. Please try again later.";
            this.emit(':tell', message);
        });
    },
    'LocateDistrict': function () {
        if (this.event.request.intent.slots.country.value === "England") {
            var speechOutput = "To narrow down the selection, please choose a region within England. " +
                "Your choices are East Midlands, Eastern, London, North East, North West, South East, " +
                "South West, West Midlands, Yorkshire. ";
            var repeatOutput = "Please select either East Midlands, Eastern, London, North East, North West, South East, " +
                "South West, West Midlands, Yorkshire.";
            this.emit(':ask', speechOutput, repeatOutput);
        } else if (this.event.request.intent.slots.country.value === "Scotland") {
            var speechOutput = "There are 59 different constituencies in Scotland. They are " +
                "Aberdeen North, Aberdeen South, Banff and Buchan, Gordon, West Aberdeenshire and Kincardine, Angus, " +
                "Dundee East, Dundee West, Argyll and Bute, Edinburgh East, Edinburgh North and Leith, Edinburgh South, " + 
                "Edinburgh South West, Edinburgh West, Ochil and South Perthshire, Dumfries and Galloway, " +
                "Dumfriesshire Clydesdale and Tweeddale, Kilmarnock and Loudoun, Ayr Carrick and Cumnock, " +
                "East Dunbartonshire, Cumbernauld Kilsyth and Kirkintilloch East, East Lothian, East Renfrewshire, " +
                "Falkirk, Dunfermline and West Fifem, Glenrothes, Kirkcaldy and Cowdenbeath, North East Fife, " +
                "Glasgow Central, Glasgow East, Glasgow North, Glasgow North East, Glasgow North West, Glasgow South, " +
                "Glasgow South West, Caithness, Sutherland and Easter Ross, Inverness, Nairn, Badenoch and Strathspey, " +
                "Ross Skye and Lochaber, Inverclyde, Midlothian, Moray, Na h-Eileanan an Iar, North Ayrshire and Arran, " +
                "Central Ayrshire, Airdrie and Shotts, Coatbridge, Chryston and Bellshill, Motherwell and Wishaw, Orkney and Shetland, " +
                "Perth and North Perthshire, Paisley and Renfrewshire North, Paisley and Renfrewshire South, " +
                "Berwickshire, Roxburgh and Selkirk, East Kilbride, Strathaven and Lesmahagow, Lanark and Hamilton East, " +
                "Rutherglen and Hamilton West, Stirling, West Dunbartonshire, Livingston, Linlithgow and East Falkirk. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Glasgow North.";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Glasgow North.";
            this.emit(':ask', speechOutput, reprompt);
        } else if (this.event.request.intent.slots.country.value === "wales") {
            var speechOutput = "There are 40 different constituencies in Wales. They are " +
                "Blaenau Gwent, Bridgend, Islwyn, Caerphilly, Cardiff Central, Cardiff North, " +
                "Cardiff South and Penarth, Cardiff West, Carmarthen East and Dinefwr, " +
                "Carmarthen West and South Pembrokeshire, Llanelli, Ceredigion, Clwyd West, Clwyd South, " +
                "Aberconwy, Vale of Clwyd, Delyn, Alyn and Deeside, Arfon, Dwyfor Meirionnydd, " +
                "Ynys Môn, Merthyr Tydfil and Rhymney, Monmouth, Aberavon, Neath, Newport East, " +
                "Newport West, Preseli Pembrokeshire, Brecon and Radnorshire, Montgomeryshire, " +
                "Cynon Valley, Ogmore, Pontypridd, Rhondda, Gower, Swansea East, " +
                "Swansea West, Torfaen, Vale of Glamorgan, Wrexham. If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Bridgend.";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Bridgend.";
            this.emit(':ask', speechOutput, reprompt);
        } else if (this.event.request.intent.slots.country.value === "northern Ireland") {
            var speechOutput = "There are 18 different constituencies in Northern Ireland. They are " +
                "South Antrim, Strangford, North Down, Newry and Armagh, North Antrim, Belfast East, " +
                "Belfast South, Belfast West, Belfast North, East Antrim, East Londonderry, " +
                "Upper Bann, South Down, Fermanagh and South Tyrone, Lagan Valley, Foyle, Mid Ulster " +
                "West Tyrone. If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Strangford.";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Strangford.";
            this.emit(':ask', speechOutput, reprompt);
        } else {
            var speechOutput = "I'm sorry, I didn't understand which country you asked for. Please try again.";
            var reprompt = "Please name one of the countries of the UK and I will provide choices for it. " +
                "For example, say England.";
            this.emit(':ask', speechOutput, reprompt);
        }
    },
    'LocateEngland': function () {
        if (this.event.request.intent.slots.region.value === "east Midlands") {
            var speechOutput = "There are 46 different constituencies in the East Midlands region of England. " +
                "In the Derbyshire area, Amber Valley, Bolsover, Chesterfield, Derby North, Derby South, " +
                "Derbyshire Dales, Erewash, High Peak, Mid Derbyshire, North East Derbyshire, South Derbyshire. " +
                "In the Leicestershire area, Bosworth, Charnwood, Harborough, Leicester East, Leicester South, " +
                "Leicester West, Loughborough, North West Leicestershire, South Leicestershire, Rutland and Melton. " +
                "In the Lincolnshire area, Boston and Skegness, Gainsborough, Grantham and Stamford, Lincoln, " +
                "Louth and Horncastle, Sleaford and North Hykeham, South Holland and The Deepings. " +
                "In the Northamptonshire area, Corby, Daventry, Kettering, Northampton North, Northampton South, " +
                "South Northamptonshire, Wellingborough. " +
                "In the Nottinghamshire area, Ashfield, Bassetlaw, Broxtowe, Gedling, Mansfield, Newark, Nottingham East, " +
                "Nottingham North, Nottingham South, Rushcliffe, Sherwood. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Chesterfield. ";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Chesterfield. ";
        } else if (this.event.request.intent.slots.region.value === "eastern") {
            var speechOutput = "There are 56 different constituencies in the Eastern region of England. " +
                "In the Bedfordshire area, Bedford, Luton North, Luton South, Mid Bedfordshire, " +
                "North East Bedfordshire, South West Bedfordshire. " +
                "In the Cambridgeshire area, Cambridge, Huntingdon, North East Cambridgeshire, North West Cambridgeshire, " +
                "Peterborough, South Cambridgeshire, South East Cambridgeshire. " +
                "In the Essex area, Basildon and Billericay, Braintree, Brentwood and Ongar, Castle Point, Chelmsford, " +
                "Clacton, Colchester, Epping Forest, Harlow, Harwich and North Essex, Maldon, Rayleigh and Wickford, " +
                "Rochford and Southend East, Saffron Walden, South Basildon and East Thurrock, Southend West, Thurrock, Witham. " +
                "In the Hertfordshire area, Broxbourne, Hemel Hempstead, Hertford and Stortford, Hertsmere, Hitchin and Harpenden, " +
                "North East Hertfordshire, South West Hertfordshire, St Albans, Stevenage, Watford, Welwyn Hatfield. " +
                "In the Norfolk area, Broadland, Great Yarmouth, Mid Norfolk, North Norfolk, North West Norfolk, " +
                "Norwich North, Norwich South, South Norfolk, South West Norfolk. " +
                "In the Suffolk area, Bury St Edmunds, Central Suffolk and North Ipswich, Ipswich, South Suffolk, " +
                "Suffolk Coastal, Waveney, West Suffolk. " + 
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Cambridge. ";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Cambridge. ";
        } else if (this.event.request.intent.slots.region.value === "London") {
            var speechOutput = "There are 72 different constituencies in London. " +
                "Their names are as follows. " +
                "Dagenham and Rainham, Barking, Chipping Barnet, Finchley and Golders Green, Hendon, " +
                "Erith and Thamesmead, Bexleyheath and Crayford, Old Bexley and Sidcup, Hampstead and Kilburn, " +
                "Brent Central, Brent North, Lewisham West and Penge, Beckenham, Bromley and Chislehurst, " +
                "Orpington, Holborn and St Pancras, Cities of London and Westminster, Croydon Central, Croydon North, " +
                "Croydon South, Ealing Central and Acton, Ealing North, Ealing, Southall, Edmonton, Enfield North, " +
                "Enfield, Southgate, Eltham, Greenwich and Woolwich, Hackney North and Stoke Newington, " +
                "Hackney South and Shoreditch, Hammersmith, Chelsea and Fulham, Hornsey and Wood Green, " +
                "Tottenham, Ruislip, Northwood and Pinner, Harrow East, Harrow West, Hornchurch and Upminster, " +
                "Romford, Hayes and Harlington, Uxbridge and South Ruislip, Brentford and Isleworth, Feltham and Heston, " +
                "Islington North, Islington South and Finsbury, Kensington, Kingston and Surbiton, Dulwich and West Norwood, " +
                "Streatham, Vauxhall, Lewisham East, Lewisham, Deptford, Mitcham and Morden, Wimbledon, East Ham, West Ham, " + 
                "Chingford and Woodford Green, Leyton and Wanstead, Ilford North, Ilford South, Twickenham, " +
                "Bermondsey and Old Southwark, Camberwell and Peckham, Carshalton and Wallington, Sutton and Cheam, " +
                "Bethnal Green and Bow, Poplar and Limehouse, Walthamstow, Battersea, Putney, Tooting, Westminster North. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Battersea. ";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Battersea. ";
        } else if (this.event.request.intent.slots.region.value === "north east") {
            var speechOutput = "There are 29 different constituencies in the North East region of England. " +
                "In the County Durham area, Bishop Auckland, City of Durham, Darlington, Easington, " +
                "North Durham, North West Durham, Sedgefield. " +
                "In the Northumberland area, Berwick-upon-Tweed, Blyth Valley, Hexham, Wansbeck. " +
                "In the South East Durham and North East Yorkshire area, Hartlepool, Middlesbrough, " +
                "Middlesbrough South and East Cleveland, Redcar, Stockton North, Stockton South. " +
                "In the Tyne and Wear area, Blaydon, Gateshead, Houghton and Sunderland South, Jarrow, " +
                "Newcastle upon Tyne Central, Newcastle upon Tyne East, Newcastle upon Tyne North, " +
                "North Tyneside, South Shields, Sunderland Central, Tynemouth, Washington and Sunderland West. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in North Durham. ";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in North Durham. ";
        } else if (this.event.request.intent.slots.region.value === "north west") {
            var speechOutput = "There are 74 different constituencies in the North West region of England. " +
                "In the Cheshire region, those are City of Chester, Congleton, Crewe and Nantwich, Eddisbury, " +
                "Ellesmere Port and Neston, Halton, Macclesfield, Tatton, Warrington North, Warrington South, " +
                "Weaver Vale, Barrow and Furness, Carlisle, Copeland, Penrith and The Border, Westmorland and Lonsdale, " +
                "Workington. " +
                "In the Greater Manchester region, those are Altrincham and Sale West, Ashton-under-Lyne, " +
                "Blackley and Broughton, Bolton North East, Bolton South East, Bolton West, Bury North, " +
                "Bury South, Cheadle, Denton and Reddish, Hazel Grove, Heywood and Middleton, Leigh, " +
                "Makerfield, Manchester Central, Manchester Gorton, Manchester Withington, " +
                "Oldham East and Saddleworth, Oldham West and Royton, Rochdale, Salford and Eccles, " +
                "Stalybridge and Hyde, Stockport, Stretford and Urmston, Wigan,Worsley and Eccles South, " +
                "Wythenshawe and Sale East. " +
                "In the Lancashire region, those are Blackburn, Blackpool North and Cleveleys, Blackpool South, " +
                "Burnley, Chorley, Fylde, Hyndburn, Lancaster and Fleetwood, Morecambe and Lunesdale, " +
                "Pendle, Preston, Ribble Valley, Rossendale and Darwen, South Ribble, West Lancashire, " +
                "Wyre and Preston North. " +
                "In the Merseyside region, those are Birkenhead, Bootle, Garston and Halewood, Knowsley, " +
                "Liverpool Riverside, Liverpool Walton, Liverpool Wavertree, Liverpool West Derby, " +
                "Sefton Central, Southport, St Helens North, St Helens South and Whiston, " +
                "Wallasey, Wirral South, Wirral West. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Halton. ";                
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Halton. ";
        } else if (this.event.request.intent.slots.region.value === "south east") {
            var speechOutput = "There are 83 different constituencies in the South East region of England. " +
                "In the Berkshire region, those are Bracknell, Maidenhead, Newbury, Reading East, Reading West, " +
                "Slough, Windsor, Wokingham. " +
                "In the Buckinghamshire region, those are Aylesbury, Beaconsfield, Buckingham, " +
                "Chesham and Amersham, Milton Keynes North, Milton Keynes South, Wycombe. " +
                "In the East Sussex region, those are Bexhill and Battle, Brighton Kemptown, Brighton Pavilion, " +
                "Eastbourne, Hastings and Rye, Hove, Lewes, Wealden. " +
                "In the Hampshire region, those are Aldershot, Basingstoke, East Hampshire, Eastleigh, Fareham, " +
                "Gosport, Havant, Meon Valley, New Forest East, New Forest West, North East Hampshire, " +
                "North West Hampshire, Portsmouth North, Portsmouth South, Romsey and Southampton North, " + 
                "Southampton Itchen, Southampton Test, Winchester. " +
                "In the Kent region, those are Ashford, Canterbury, Chatham and Aylesford, Dartford, Dover, " +
                "Faversham and Mid Kent, Folkestone and Hythe, Gillingham and Rainham, Gravesham, " +
                "Maidstone and The Weald, North Thanet, Rochester and Strood, Sevenoaks, Sittingbourne and Sheppey, " +
                "South Thanet, Tonbridge and Malling, Tunbridge Wells. " +
                "In the Oxfordshire region, those are Banbury, Henley, Oxford East, Oxford West and Abingdon, " +
                "Wantage, Witney. " +
                "In the Surrey region, those are East Surrey, Epsom and Ewell, Esher and Walton, Guildford, " +
                "Mole Valley, Reigate, Runnymede and Weybridge, South West Surrey, Spelthorne, " +
                "Surrey Heath, Woking. " +
                "In the West Sussex region, those are Arundel and South Downs, Bognor Regis and Littlehampton, " +
                "Chichester, Crawley, East Worthing and Shoreham, Horsham, Mid Sussex, Worthing West. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Canterbury. ";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Canterbury. ";
        } else if (this.event.request.intent.slots.region.value === "south west") {
            var speechOutput = "There are 54 different constituencies in the South West region of England. " +
                "In the Bristol region, those are Bristol East, Bristol North West, Bristol South, and Bristol West. " +
                "In the Cornwall region, those are Camborne and Redruth, North Cornwall, South East Cornwall, " +
                "St Austell and Newquay, St Ives, Truro and Falmouth. " +
                "In the Devon region, those are Central Devon, East Devon, Exeter, Newton Abbot, North Devon, " +
                "Plymouth Moor View, Plymouth Sutton and Devonport, South West Devon, Tiverton and Honiton, " +
                "Torbay, Torridge and West Devon, Totnes. " + 
                "In the Dorset region, those are Bournemouth East, Bournemouth West, Christchurch, " +
                "Mid Dorset and North Poole, North Dorset, Poole, South Dorset, West Dorset. " + 
                "In the Gloucestershire region, those are Cheltenham, Forest of Dean, Gloucester, Stroud, Tewkesbury, The Cotswolds. " +
                "In the Somerset region, those are Bridgwater and West Somerset, Somerton and Frome, Taunton Deane, Wells, Yeovil. " +
                "In the South Gloucestershire region, those are Filton and Bradley Stoke, Kingswood, Thornbury and Yate. " +
                "In the Wiltshire region, those are Chippenham, Devizes, North Swindon, North Wiltshire, " +
                "Salisbury, South Swindon, South West Wiltshire. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Salisbury. ";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Salisbury. ";
        } else if (this.event.request.intent.slots.region.value === "west Midlands") {
            var speechOutput = "There are 59 different constituencies in the West Midlands region of England. " +
                "In the Shropshire region, those are Ludlow, North Shropshire, Shrewsbury and Atcham, Telford, The Wrekin. " +
                "In the Staffordshire region, those are Burton, Cannock Chase, Lichfield, " +
                "Newcastle-under-Lyme, South Staffordshire, Stafford, Staffordshire Moorlands, " +
                "Stoke-on-Trent Central, Stoke-on-Trent North, Stoke-on-Trent South, Stone, Tamworth. " +
                "In the Warwickshire region, those are Kenilworth and Southam, North Warwickshire, " +
                "Nuneaton, Rugby, Stratford-on-Avon, Warwick and Leamington. " +
                "In the West Midlands region, those are Aldridge-Brownhills, Birmingham Edgbaston, Birmingham Erdington, " +
                "Birmingham Hall Green, Birmingham Hodge Hill, Birmingham Ladywood, Birmingham Northfield, " +
                "Birmingham Perry Barr, Birmingham Selly Oak, Birmingham Yardley, Coventry North East, " +
                "Coventry North West, Coventry South, Dudley North, Dudley South, Halesowen and Rowley Regis, " +
                "Meriden, Solihull, Stourbridge, Sutton Coldfield, Walsall North, Walsall South, Warley, " +
                "West Bromwich East, West Bromwich West, Wolverhampton North East, Wolverhampton South East, " +
                "Wolverhampton South West. " +
                "In the Worcestershire region, those are Bromsgrove, Mid Worcestershire, Redditch, " +
                "West Worcestershire, Worcester, Wyre Forest. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Ludlow. ";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Ludlow. ";
        } else if (this.event.request.intent.slots.region.value === "Yorkshire") {
            var speechOutput = "There are 52 different constituencies in the Yorkshire region of England. " + 
                "In the East Yorkshire and North Lincolnshire region, those are Beverley and Holderness, " +
                "Brigg and Goole, Cleethorpes, East Yorkshire, Great Grimsby, Haltemprice and Howden, " +
                "Kingston upon Hull East, Kingston upon Hull North, Kingston upon Hull West and Hessle, " +
                "Scunthorpe. " +
                "In the North Yorkshire region, those are Harrogate and Knaresborough, Richmond, " +
                "Scarborough and Whitby, Selby and Ainsty, Skipton and Ripon, Thirsk and Malton, " +
                "York Central, York Outer. " +
                "In the South Yorkshire region, those are Barnsley Central, Barnsley East, Don Valley, " +
                "Doncaster Central, Doncaster North, Penistone and Stocksbridge, Rother Valley, Rotherham, " +
                "Sheffield Central, Sheffield South East, Sheffield Brightside and Hillsborough, " +
                "Sheffield Hallam, Sheffield Heeley, Wentworth and Dearne. " +
                "In the West Yorkshire region, those are Bradford East, Bradford South, Bradford West, " +
                "Keighley, Shipley, Calder Valley, Halifax, Batley and Spen, Colne Valley, " +
                "Dewsbury, Huddersfield, Morley and Outwood, Elmet and Rothwell, Leeds Central, " +
                "Leeds East, Leeds North East, Leeds North West, Leeds West, Pudsey, " +
                "Hemsworth, Normanton Pontefract and Castleford, Wakefield. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Wakefield. ";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Wakefield. ";
        } else {
            var speechOutput = "I'm sorry, I couldn't understand what region you are looking for. ";
            var reprompt = "Please provide a region within England.  For example, say West Midlands.";
            console.log("Region Value: " + this.event.request.intent.slots.region.value);
        }
        this.emit(':ask', speechOutput, reprompt);
    },
    'AMAZON.HelpIntent': function() {
        var message = 'This skill helps provide information about the upcoming election. If you would like to ' +
            'find out who is running for election in your constituency, please say something like Who is running ' +
            'for office in Strangford.';
        var reprompt = 'If you would like to find out information about who is running for office in your ' +
            'constituency, please says something like Who is running for office in Strangford and I will retrieve ' +
            'those candidates seeking office. This can be done in any of the 650 constituencies in the UK.';
        this.emit(':ask', message, reprompt);
    },
    'AMAZON.YesIntent': function() {
        this.handler.state = states.ELECTIONMODE;
        this.emit(':ask', 'Excellent. Do you know what the name is for the consituency you would ' +
            'like the candidates for? If so, please ask me who is running for office and provide ' +
            'that constituency name. For example, say Who is running for office in Bedford? If you ' +
            'do not know the constituency name, just say No and I will help you find it. ',
            'Do you know your constituency name?');
    },
    'AMAZON.NoIntent': function() {
        console.log("NOINTENT");
        this.emit(':tell', 'Ok, thanks for checking in. See you next time!');
    },
    "AMAZON.StopIntent": function() {
      console.log("STOPINTENT");
      this.emit(':tell', "Goodbye!");  
    },
    "AMAZON.CancelIntent": function() {
      console.log("CANCELINTENT");
      this.emit(':tell', "Goodbye!");  
    },
    'SessionEndedRequest': function () {
        console.log("SESSIONENDEDREQUEST");
        //this.attributes['endedSessionCount'] += 1;
        this.emit(':tell', "Goodbye!");
    },
    'Unhandled': function() {
        console.log("UNHANDLED");
        this.emit(':tell', 'Sorry, I did not understand what you asked for. Please try again.');
    }
});

var electionModeHandlers = Alexa.CreateStateHandler(states.ELECTIONMODE, {
    'NewSession': function () {
        this.handler.state = '';
        this.emitWithState('NewSession'); // Equivalent to the Start Mode NewSession handler
    },
    'ElectionIntent': function() {
        console.log("election intent from election mode handler");
        if (this.event.request.intent.slots.constituency.value) {
            console.log("Constituency Provided");

            // fix defect to remove a dot at the end of the constituency name.
            var constituencyRequested = this.event.request.intent.slots.constituency.value;

            if (constituencyRequested.substring( constituencyRequested.length - 1, constituencyRequested.length ) === '.') {
                console.log("need to replace dot");
                constituencyRequested = constituencyRequested.substring( 0, constituencyRequested.length - 1);
            }

            console.log("attempt to match: " + constituencyRequested);
            var userProvidedValidDistrict = false;
            var districtId = 0;
            for (var i = 0; i < validDistricts.length; i++) {
                if (validDistricts[i].name.toLowerCase() === constituencyRequested.toLowerCase()) {
                    console.log("valid district entered");
                    userProvidedValidDistrict = true;
                    districtId = validDistricts[i].id;
                }
            }

            if (userProvidedValidDistrict) {
                var localCandidates = electionCandidates[0].candidates;
                var localDistrict = electionCandidates[0].districtName;

                for (var j = 0; j < electionCandidates.length; j++) {
                    if (electionCandidates[j].districtId === districtId) {
                        localCandidates = electionCandidates[j].candidates;
                        localDistrict = electionCandidates[j].districtName;
                    }
                }

                var speechOutput = "The candidates for the 2017 Parliamentary election for " + localDistrict + " are as follows. ";
                var cardOutput = localDistrict + "\n";
                var cardTitle = "Candidates for 2017 Parliamentary Election";

                var incumbentRace = false;
                var incumbentName = "None";

                for (var i = 0; i < localCandidates.length; i++ ) {
                    console.log(JSON.stringify(localCandidates[i]));
                    if (localCandidates[i].incumbent === true) {
                        incumbentRace = true;
                        incumbentName = localCandidates[i].fullName;
                    }
                    speechOutput = speechOutput + "<break time=\"1s\"/>";
                    speechOutput = speechOutput + localCandidates[i].fullName + 
                        " is from " + localCandidates[i].party + ". ";
                    cardOutput = cardOutput + localCandidates[i].fullName + " (" + localCandidates[i].party + ")\n";
                }
            
                if (incumbentRace) {
                    speechOutput = speechOutput + "<break time=\"1s\"/>";
                    speechOutput = speechOutput + incumbentName + " served in this position during the prior term " +
                        "and is considered the incumbent. ";
                    cardOutput = cardOutput + "Incumbent: " + incumbentName;
                }

                var memberParliamentName  = "Unknown";
                var memberParliamentParty = "Unknown";

                for (var k = 0; k < electionResults.length; k++ ) {
                    if (electionResults[k].districtId === districtId) {
                        memberParliamentName = electionResults[k].candidateName;
                        memberParliamentParty = electionResults[k].partyName;
                    }
                }

                speechOutput = speechOutput + "<break time=\"1s\"/>";
                speechOutput = speechOutput + memberParliamentName + " was the victor in the election from " +
                    memberParliamentParty + ". ";
                cardOutput = cardOutput + "Winner: " + memberParliamentName + " (" + memberParliamentParty + ")";

                this.emit(':tellWithCard', speechOutput, cardTitle, cardOutput);
            } else {
                var speechOutput = "I'm sorry, " + this.event.request.intent.slots.constituency.value + 
                    " wasn't a valid constituency name.";
                console.log("Invalid Value for Constituency: " + this.event.request.intent.slots.constituency.value);
                this.emit(':tell', speechOutput);
            }
        } else {
            var speechOutput = "Sorry, you didn't provide a constituency name along with your query. If you would " +
                "like me to find who is running for office, please say something like Who is running for office in Canterbury.";
            var reprompt = "Please provide a constituency name with your query. For example, say something like " +
                "Who is running for office in Canterbury."
            console.log("No Constituency Provided");
            this.emit(':ask', speechOutput, reprompt);
        }        
    },
    'FindByPostCode': function () {
        console.log('Attempting to find by Postal Code');
        console.log('District: ' + this.event.request.intent.slots.postalCodeDistrict.value);
        console.log('Inward: ' + this.event.request.intent.slots.postalCodeInward.value);

        var postalCode = this.event.request.intent.slots.postalCodeDistrict.value;

        // if broken into two strings - merge back together
        if (this.event.request.intent.slots.postalCodeInward.value) {
            console.log("merged strings");
            postalCode = postalCode + this.event.request.intent.slots.postalCodeInward.value;
        }

        var APIurl = 'https://api.postcodes.io/postcodes/';
        https.get(APIurl + postalCode, (res) => {
            console.log('API Call HTTP Code: ', res.statusCode); // this indicates if the HTTP request was valid

            var tempData = "";

            res.on('data', (d) => {
                tempData += d;
            });
                        
            // this is the logic that gets executed once a successful API call is completed
            res.on('end', (d) => {
                console.log('completed request');
                // now process data returned from the API call
                var returnData = eval('(' + tempData.toString('utf8') + ')');
                console.log(JSON.stringify(returnData));

                if(returnData.status === 200) {
                    console.log('postal code was valid');
                    console.log(JSON.stringify(returnData.result));
                    var constituency = returnData.result.parliamentary_constituency;
                    console.log(constituency);

                    // using the constituency from the API call, match with the lookup data
                    var validDistrict = false;
                    for (var i = 0; i < validDistricts.length; i++) {
                        if (validDistricts[i].name.toLowerCase() === constituency.toLowerCase()) {
                            console.log("valid district entered" + validDistricts[i].id);
                            validDistrict = true;
                            var districtId = validDistricts[i].id;
                        }
                    }

                    console.log('now look up district id');

                    if (validDistrict) {
                        var localMP = "full name";
                        var partyMP = "TBD";
                        for (var j = 0; j < electionResults.length; j++) {
                            if (electionResults[j].districtId === districtId) {
                                console.log("found match: " + JSON.stringify(electionResults[j]));
                                localMP = electionResults[j].candidateName;
                                partyMP = electionResults[j].partyName;
                            }
                        }
                        // format the message based on the API call
                        console.log("retrieving results information for district id: " + districtId);
                        console.log(JSON.stringify(electionResults[districtId]));
                        var message = "This postal code matches constituency " + constituency + ". ";
                            message = message + "The representative is " + localMP + " from " + partyMP + ".";
                        this.emit(':tell', message);
                    } else {
                        console.log('could not match in lookup table');
                        var message = "Sorry, I couldn't find a constituency matching postal code " + postalCode;
                        this.emit(':tell', message);
                    }

                } else if (returnData.status === 404) {
                    console.log('postal code not found');
                    var message = "Sorry, I couldn't find a constituency matching postal code " + postalCode;
                    this.emit(':tell', message);
                }
            });
        }).on('error', (e) => {
            var message = "Sorry, I'm having trouble looking up postal codes right now. Please try again later.";
            this.emit(':tell', message);
        });
    },
    'LocateDistrict': function () {
        if (this.event.request.intent.slots.country.value === "England") {
            var speechOutput = "To narrow down the selection, please choose a region within England. " +
                "Your choices are East Midlands, Eastern, London, North East, North West, South East, " +
                "South West, West Midlands, Yorkshire. ";
            var repeatOutput = "Please select either East Midlands, Eastern, London, North East, North West, South East, " +
                "South West, West Midlands, Yorkshire.";
            this.emit(':ask', speechOutput, repeatOutput);
        } else if (this.event.request.intent.slots.country.value === "Scotland") {
            var speechOutput = "There are 59 different constituencies in Scotland. They are " +
                "Aberdeen North, Aberdeen South, Banff and Buchan, Gordon, West Aberdeenshire and Kincardine, Angus, " +
                "Dundee East, Dundee West, Argyll and Bute, Edinburgh East, Edinburgh North and Leith, Edinburgh South, " + 
                "Edinburgh South West, Edinburgh West, Ochil and South Perthshire, Dumfries and Galloway, " +
                "Dumfriesshire Clydesdale and Tweeddale, Kilmarnock and Loudoun, Ayr Carrick and Cumnock, " +
                "East Dunbartonshire, Cumbernauld Kilsyth and Kirkintilloch East, East Lothian, East Renfrewshire, " +
                "Falkirk, Dunfermline and West Fifem, Glenrothes, Kirkcaldy and Cowdenbeath, North East Fife, " +
                "Glasgow Central, Glasgow East, Glasgow North, Glasgow North East, Glasgow North West, Glasgow South, " +
                "Glasgow South West, Caithness, Sutherland and Easter Ross, Inverness, Nairn, Badenoch and Strathspey, " +
                "Ross Skye and Lochaber, Inverclyde, Midlothian, Moray, Na h-Eileanan an Iar, North Ayrshire and Arran, " +
                "Central Ayrshire, Airdrie and Shotts, Coatbridge, Chryston and Bellshill, Motherwell and Wishaw, Orkney and Shetland, " +
                "Perth and North Perthshire, Paisley and Renfrewshire North, Paisley and Renfrewshire South, " +
                "Berwickshire, Roxburgh and Selkirk, East Kilbride, Strathaven and Lesmahagow, Lanark and Hamilton East, " +
                "Rutherglen and Hamilton West, Stirling, West Dunbartonshire, Livingston, Linlithgow and East Falkirk. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Glasgow North.";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Glasgow North.";
            this.emit(':ask', speechOutput, reprompt);
        } else if (this.event.request.intent.slots.country.value === "wales") {
            var speechOutput = "There are 40 different constituencies in Wales. They are " +
                "Blaenau Gwent, Bridgend, Islwyn, Caerphilly, Cardiff Central, Cardiff North, " +
                "Cardiff South and Penarth, Cardiff West, Carmarthen East and Dinefwr, " +
                "Carmarthen West and South Pembrokeshire, Llanelli, Ceredigion, Clwyd West, Clwyd South, " +
                "Aberconwy, Vale of Clwyd, Delyn, Alyn and Deeside, Arfon, Dwyfor Meirionnydd, " +
                "Ynys Môn, Merthyr Tydfil and Rhymney, Monmouth, Aberavon, Neath, Newport East, " +
                "Newport West, Preseli Pembrokeshire, Brecon and Radnorshire, Montgomeryshire, " +
                "Cynon Valley, Ogmore, Pontypridd, Rhondda, Gower, Swansea East, " +
                "Swansea West, Torfaen, Vale of Glamorgan, Wrexham. If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Bridgend.";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Bridgend.";
            this.emit(':ask', speechOutput, reprompt);
        } else if (this.event.request.intent.slots.country.value === "northern Ireland") {
            var speechOutput = "There are 18 different constituencies in Northern Ireland. They are " +
                "South Antrim, Strangford, North Down, Newry and Armagh, North Antrim, Belfast East, " +
                "Belfast South, Belfast West, Belfast North, East Antrim, East Londonderry, " +
                "Upper Bann, South Down, Fermanagh and South Tyrone, Lagan Valley, Foyle, Mid Ulster " +
                "West Tyrone. If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Strangford.";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Strangford.";
            this.emit(':ask', speechOutput, reprompt);
        } else {
            var speechOutput = "I'm sorry, I didn't understand which country you asked for. Please try again.";
            var reprompt = "Please inquire about one of the countries of the UK. For example, say England.";
            this.emit(':tell', speechOutput, reprompt);
        }
    },
    'LocateEngland': function () {
        if (this.event.request.intent.slots.region.value === "east Midlands") {
            var speechOutput = "There are 46 different constituencies in the East Midlands region of England. " +
                "In the Derbyshire area, Amber Valley, Bolsover, Chesterfield, Derby North, Derby South, " +
                "Derbyshire Dales, Erewash, High Peak, Mid Derbyshire, North East Derbyshire, South Derbyshire. " +
                "In the Leicestershire area, Bosworth, Charnwood, Harborough, Leicester East, Leicester South, " +
                "Leicester West, Loughborough, North West Leicestershire, South Leicestershire, Rutland and Melton. " +
                "In the Lincolnshire area, Boston and Skegness, Gainsborough, Grantham and Stamford, Lincoln, " +
                "Louth and Horncastle, Sleaford and North Hykeham, South Holland and The Deepings. " +
                "In the Northamptonshire area, Corby, Daventry, Kettering, Northampton North, Northampton South, " +
                "South Northamptonshire, Wellingborough. " +
                "In the Nottinghamshire area, Ashfield, Bassetlaw, Broxtowe, Gedling, Mansfield, Newark, Nottingham East, " +
                "Nottingham North, Nottingham South, Rushcliffe, Sherwood. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Chesterfield. ";
        } else if (this.event.request.intent.slots.region.value === "eastern") {
            var speechOutput = "There are 56 different constituencies in the Eastern region of England. " +
                "In the Bedfordshire area, Bedford, Luton North, Luton South, Mid Bedfordshire, " +
                "North East Bedfordshire, South West Bedfordshire. " +
                "In the Cambridgeshire area, Cambridge, Huntingdon, North East Cambridgeshire, North West Cambridgeshire, " +
                "Peterborough, South Cambridgeshire, South East Cambridgeshire. " +
                "In the Essex area, Basildon and Billericay, Braintree, Brentwood and Ongar, Castle Point, Chelmsford, " +
                "Clacton, Colchester, Epping Forest, Harlow, Harwich and North Essex, Maldon, Rayleigh and Wickford, " +
                "Rochford and Southend East, Saffron Walden, South Basildon and East Thurrock, Southend West, Thurrock, Witham. " +
                "In the Hertfordshire area, Broxbourne, Hemel Hempstead, Hertford and Stortford, Hertsmere, Hitchin and Harpenden, " +
                "North East Hertfordshire, South West Hertfordshire, St Albans, Stevenage, Watford, Welwyn Hatfield. " +
                "In the Norfolk area, Broadland, Great Yarmouth, Mid Norfolk, North Norfolk, North West Norfolk, " +
                "Norwich North, Norwich South, South Norfolk, South West Norfolk. " +
                "In the Suffolk area, Bury St Edmunds, Central Suffolk and North Ipswich, Ipswich, South Suffolk, " +
                "Suffolk Coastal, Waveney, West Suffolk. " + 
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Cambridge. ";
        } else if (this.event.request.intent.slots.region.value === "London") {
            var speechOutput = "There are 72 different constituencies in London. " +
                "Their names are as follows. " +
                "Dagenham and Rainham, Barking, Chipping Barnet, Finchley and Golders Green, Hendon, " +
                "Erith and Thamesmead, Bexleyheath and Crayford, Old Bexley and Sidcup, Hampstead and Kilburn, " +
                "Brent Central, Brent North, Lewisham West and Penge, Beckenham, Bromley and Chislehurst, " +
                "Orpington, Holborn and St Pancras, Cities of London and Westminster, Croydon Central, Croydon North, " +
                "Croydon South, Ealing Central and Acton, Ealing North, Ealing, Southall, Edmonton, Enfield North, " +
                "Enfield, Southgate, Eltham, Greenwich and Woolwich, Hackney North and Stoke Newington, " +
                "Hackney South and Shoreditch, Hammersmith, Chelsea and Fulham, Hornsey and Wood Green, " +
                "Tottenham, Ruislip, Northwood and Pinner, Harrow East, Harrow West, Hornchurch and Upminster, " +
                "Romford, Hayes and Harlington, Uxbridge and South Ruislip, Brentford and Isleworth, Feltham and Heston, " +
                "Islington North, Islington South and Finsbury, Kensington, Kingston and Surbiton, Dulwich and West Norwood, " +
                "Streatham, Vauxhall, Lewisham East, Lewisham, Deptford, Mitcham and Morden, Wimbledon, East Ham, West Ham, " + 
                "Chingford and Woodford Green, Leyton and Wanstead, Ilford North, Ilford South, Twickenham, " +
                "Bermondsey and Old Southwark, Camberwell and Peckham, Carshalton and Wallington, Sutton and Cheam, " +
                "Bethnal Green and Bow, Poplar and Limehouse, Walthamstow, Battersea, Putney, Tooting, Westminster North. " +
                "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Battersea. ";
            var reprompt = "If you would like to know who is running for election in any of these, " +
                "please ask for it by saying something like Who is running for office in Battersea. ";
        } else if (this.event.request.intent.slots.region.value === "north east") {
            var speechOutput = "There are 29 different constituencies in the North East region of England. " +
...

This file has been truncated, please download it to see its full contents.

results.json

JSON
Election results from the 2017 snap election for Parliament.
[
{"districtId":1,"candidateName":"Stephen Kinnock","partyName":"Labour"},
{"districtId":2,"candidateName":"Guto Bebb","partyName":"Conservative"},
{"districtId":3,"candidateName":"Kirsty Blackman","partyName":"Scottish National Party"},
{"districtId":4,"candidateName":"Ross Thomson","partyName":"Conservative"},
{"districtId":5,"candidateName":"Andrew Bowie","partyName":"Conservative"},
{"districtId":6,"candidateName":"Neil Gray","partyName":"Scottish National Party"},
{"districtId":7,"candidateName":"Leo Docherty","partyName":"Conservative"},
{"districtId":8,"candidateName":"Wendy Morton","partyName":"Conservative"},
{"districtId":9,"candidateName":"Graham Brady","partyName":"Conservative"},
{"districtId":10,"candidateName":"Mark Tami","partyName":"Labour"},
{"districtId":11,"candidateName":"Nigel Mills","partyName":"Conservative"},
{"districtId":12,"candidateName":"Kirstene Hair","partyName":"Conservative"},
{"districtId":13,"candidateName":"Sammy Wilson","partyName":"Democratic Unionist Party"},
{"districtId":14,"candidateName":"Ian Paisley","partyName":"Democratic Unionist Party"},
{"districtId":15,"candidateName":"Danny Kinahan","partyName":"UUP"},
{"districtId":16,"candidateName":"Hywel Williams","partyName":"Plaid Cymru"},
{"districtId":17,"candidateName":"Brendan O'Hara","partyName":"Scottish National Party"},
{"districtId":18,"candidateName":"Nick Herbert","partyName":"Conservative"},
{"districtId":19,"candidateName":"Gloria De Piero","partyName":"Labour"},
{"districtId":20,"candidateName":"Damian Green","partyName":"Conservative"},
{"districtId":21,"candidateName":"Angela Rayner","partyName":"Labour"},
{"districtId":22,"candidateName":"David Lidington","partyName":"Conservative"},
{"districtId":23,"candidateName":"Bill Grant","partyName":"Conservative"},
{"districtId":24,"candidateName":"Dr Philippa Whitford","partyName":"Scottish National Party"},
{"districtId":25,"candidateName":"Patricia Gibson","partyName":"Scottish National Party"},
{"districtId":26,"candidateName":"Victoria Prentis","partyName":"Conservative"},
{"districtId":27,"candidateName":"David Duguid","partyName":"Conservative"},
{"districtId":28,"candidateName":"Dame Margaret Hodge","partyName":"Labour"},
{"districtId":29,"candidateName":"Dan Jarvis","partyName":"Labour"},
{"districtId":30,"candidateName":"Stephanie Peacock","partyName":"Labour"},
{"districtId":31,"candidateName":"John Woodcock","partyName":"Labour Co-op"},
{"districtId":32,"candidateName":"John Baron","partyName":"Conservative"},
{"districtId":33,"candidateName":"Stephen Metcalfe","partyName":"Conservative"},
{"districtId":34,"candidateName":"Maria Miller","partyName":"Conservative"},
{"districtId":35,"candidateName":"John Mann","partyName":"Labour"},
{"districtId":36,"candidateName":"Wera Hobhouse","partyName":"Liberal Democrats"},
{"districtId":37,"candidateName":"Tracy Brabin","partyName":"Labour Co-op"},
{"districtId":38,"candidateName":"Jane Ellison","partyName":"Conservative"},
{"districtId":39,"candidateName":"Marsha De Cordova","partyName":"Labour"},
{"districtId":40,"candidateName":"Bob Stewart","partyName":"Conservative"},
{"districtId":41,"candidateName":"Mohammad Yasin","partyName":"Labour"},
{"districtId":42,"candidateName":"Nadine Dorries","partyName":"Conservative"},
{"districtId":43,"candidateName":"Alistair Burt","partyName":"Conservative"},
{"districtId":44,"candidateName":"Andrew Selous","partyName":"Conservative"},
{"districtId":45,"candidateName":"Gavin Robinson","partyName":"Democratic Unionist Party"},
{"districtId":46,"candidateName":"Nigel Dodds","partyName":"Democratic Unionist Party"},
{"districtId":47,"candidateName":"Alasdair McDonnell","partyName":"Social Democratic and Labour Party"},
{"districtId":48,"candidateName":"Paul Maskey","partyName":"Sinn Fein"},
{"districtId":49,"candidateName":"Neil Coyle","partyName":"Labour"},
{"districtId":50,"candidateName":"Anne-Marie Trevelyan","partyName":"Conservative"},
{"districtId":51,"candidateName":"John Lamont","partyName":"Conservative"},
{"districtId":52,"candidateName":"Rushanara Ali","partyName":"Labour"},
{"districtId":53,"candidateName":"Graham Stuart","partyName":"Conservative"},
{"districtId":54,"candidateName":"Huw Merriman","partyName":"Conservative"},
{"districtId":55,"candidateName":"David Evennett","partyName":"Conservative"},
{"districtId":56,"candidateName":"Frank Field","partyName":"Labour"},
{"districtId":57,"candidateName":"Preet Gill","partyName":"Labour Co-op"},
{"districtId":58,"candidateName":"Jack Dromey","partyName":"Labour"},
{"districtId":59,"candidateName":"Roger Godsiff","partyName":"Labour"},
{"districtId":60,"candidateName":"Liam Byrne","partyName":"Labour"},
{"districtId":61,"candidateName":"Shabana Mahmood","partyName":"Labour"},
{"districtId":62,"candidateName":"Richard Burden","partyName":"Labour"},
{"districtId":63,"candidateName":"Khalid Mahmood","partyName":"Labour"},
{"districtId":64,"candidateName":"Steve McCabe","partyName":"Labour"},
{"districtId":65,"candidateName":"Jess Phillips","partyName":"Labour"},
{"districtId":66,"candidateName":"Helen Goodman","partyName":"Labour"},
{"districtId":67,"candidateName":"Kate Hollern","partyName":"Labour"},
{"districtId":68,"candidateName":"Graham Stringer","partyName":"Labour"},
{"districtId":69,"candidateName":"Paul Maynard","partyName":"Conservative"},
{"districtId":70,"candidateName":"Gordon Marsden","partyName":"Labour"},
{"districtId":71,"candidateName":"Nick Smith","partyName":"Labour"},
{"districtId":72,"candidateName":"Liz Twist","partyName":"Labour"},
{"districtId":73,"candidateName":"Ronnie Campbell","partyName":"Labour"},
{"districtId":74,"candidateName":"Nick Gibb","partyName":"Conservative"},
{"districtId":75,"candidateName":"Dennis Skinner","partyName":"Labour"},
{"districtId":76,"candidateName":"David Crausby","partyName":"Labour"},
{"districtId":77,"candidateName":"Yasmin Qureshi","partyName":"Labour"},
{"districtId":78,"candidateName":"Chris Green","partyName":"Conservative"},
{"districtId":79,"candidateName":"Peter Dowd","partyName":"Labour"},
{"districtId":80,"candidateName":"Matt Warman","partyName":"Conservative"},
{"districtId":81,"candidateName":"David Tredinnick","partyName":"Conservative"},
{"districtId":82,"candidateName":"Tobias Ellwood","partyName":"Conservative"},
{"districtId":83,"candidateName":"Conor Burns","partyName":"Conservative"},
{"districtId":84,"candidateName":"Phillip Lee","partyName":"Conservative"},
{"districtId":85,"candidateName":"Imran Hussain","partyName":"Labour"},
{"districtId":86,"candidateName":"Judith Cummins","partyName":"Labour"},
{"districtId":87,"candidateName":"Naz Shah","partyName":"Labour"},
{"districtId":88,"candidateName":"James Cleverly","partyName":"Conservative"},
{"districtId":89,"candidateName":"Chris Davies","partyName":"Conservative"},
{"districtId":90,"candidateName":"Dawn Butler","partyName":"Labour"},
{"districtId":91,"candidateName":"Barry Gardiner","partyName":"Labour"},
{"districtId":92,"candidateName":"Ruth Cadbury","partyName":"Labour"},
{"districtId":93,"candidateName":"Alex Burghart","partyName":"Conservative"},
{"districtId":94,"candidateName":"Madeleine Moon","partyName":"Labour"},
{"districtId":95,"candidateName":"Ian Liddell-Grainger","partyName":"Conservative"},
{"districtId":96,"candidateName":"Andrew Percy","partyName":"Conservative"},
{"districtId":97,"candidateName":"Lloyd Russell-Moyle","partyName":"Labour"},
{"districtId":98,"candidateName":"Caroline Lucas","partyName":"Green"},
{"districtId":99,"candidateName":"Kerry McCarthy","partyName":"Labour"},
{"districtId":100,"candidateName":"Charlotte Leslie","partyName":"Conservative"},
{"districtId":101,"candidateName":"Karin Smyth","partyName":"Labour"},
{"districtId":102,"candidateName":"Thangam Debbonaire","partyName":"Labour"},
{"districtId":103,"candidateName":"Keith Simpson","partyName":"Conservative"},
{"districtId":104,"candidateName":"Bob Neill","partyName":"Conservative"},
{"districtId":105,"candidateName":"Sajid Javid","partyName":"Conservative"},
{"districtId":106,"candidateName":"Charles Walker","partyName":"Conservative"},
{"districtId":107,"candidateName":"Anna Soubry","partyName":"Conservative"},
{"districtId":108,"candidateName":"John Bercow","partyName":"Speaker"},
{"districtId":109,"candidateName":"Julie Cooper","partyName":"Labour"},
{"districtId":110,"candidateName":"Andrew Griffiths","partyName":"Conservative"},
{"districtId":111,"candidateName":"David Nuttall","partyName":"Conservative"},
{"districtId":112,"candidateName":"Ivan Lewis","partyName":"Labour"},
{"districtId":113,"candidateName":"Jo Churchill","partyName":"Conservative"},
{"districtId":114,"candidateName":"Wayne David","partyName":"Labour"},
{"districtId":115,"candidateName":"Jamie Stone","partyName":"Scottish National Party"},
{"districtId":116,"candidateName":"Craig Whittaker","partyName":"Conservative"},
{"districtId":117,"candidateName":"Harriet Harman","partyName":"Labour"},
{"districtId":118,"candidateName":"George Eustice","partyName":"Conservative"},
{"districtId":119,"candidateName":"Daniel Zeichner","partyName":"Labour"},
{"districtId":120,"candidateName":"Stephen Barclay","partyName":"Conservative"},
{"districtId":121,"candidateName":"Shailesh Vara","partyName":"Conservative"},
{"districtId":122,"candidateName":"Heidi Allen","partyName":"Conservative"},
{"districtId":123,"candidateName":"Lucy Frazer","partyName":"Conservative"},
{"districtId":124,"candidateName":"Amanda Milling","partyName":"Conservative"},
{"districtId":125,"candidateName":"Rosie Duffield","partyName":"Labour"},
{"districtId":126,"candidateName":"Jo Stevens","partyName":"Labour"},
{"districtId":127,"candidateName":"Anna McMorrin","partyName":"Labour"},
{"districtId":128,"candidateName":"Stephen Doughty","partyName":"Labour Co-op"},
{"districtId":129,"candidateName":"Kevin Brennan","partyName":"Labour"},
{"districtId":130,"candidateName":"John Stevenson","partyName":"Conservative"},
{"districtId":131,"candidateName":"Jonathan Edwards","partyName":"Plaid Cymru"},
{"districtId":132,"candidateName":"Simon Hart","partyName":"Conservative"},
{"districtId":133,"candidateName":"Tom Brake","partyName":"Liberal Democrats"},
{"districtId":134,"candidateName":"Rebecca Harris","partyName":"Conservative"},
{"districtId":135,"candidateName":"Mark Williams","partyName":"Liberal Democrats"},
{"districtId":136,"candidateName":"Edward Argar","partyName":"Conservative"},
{"districtId":137,"candidateName":"Tracey Crouch","partyName":"Conservative"},
{"districtId":138,"candidateName":"Mary Robinson","partyName":"Conservative"},
{"districtId":139,"candidateName":"Vicky Ford","partyName":"Conservative"},
{"districtId":140,"candidateName":"Greg Hands","partyName":"Conservative"},
{"districtId":141,"candidateName":"Alex Chalk","partyName":"Conservative"},
{"districtId":142,"candidateName":"Cheryl Gillan","partyName":"Conservative"},
{"districtId":143,"candidateName":"Chris Matheson","partyName":"Labour"},
{"districtId":144,"candidateName":"Toby Perkins","partyName":"Labour"},
{"districtId":145,"candidateName":"Gillian Keegan","partyName":"Conservative"},
{"districtId":146,"candidateName":"Iain Duncan Smith","partyName":"Conservative"},
{"districtId":147,"candidateName":"Michelle Donelan","partyName":"Conservative"},
{"districtId":148,"candidateName":"Theresa Villiers","partyName":"Conservative"},
{"districtId":149,"candidateName":"Lindsay Hoyle","partyName":"Labour"},
{"districtId":150,"candidateName":"Christopher Chope","partyName":"Conservative"},
{"districtId":151,"candidateName":"Mark Field","partyName":"Conservative"},
{"districtId":152,"candidateName":"Giles Watling","partyName":"Conservative"},
{"districtId":153,"candidateName":"Martin Vickers","partyName":"Conservative"},
{"districtId":154,"candidateName":"Susan Elan Jones","partyName":"Labour"},
{"districtId":155,"candidateName":"David Jones","partyName":"Conservative"},
{"districtId":156,"candidateName":"Hugh Gaffney","partyName":"Labour"},
{"districtId":157,"candidateName":"Will Quince","partyName":"Conservative"},
{"districtId":158,"candidateName":"Thelma Walker","partyName":"Labour"},
{"districtId":159,"candidateName":"Fiona Bruce","partyName":"Conservative"},
{"districtId":160,"candidateName":"Trudy Harrison","partyName":"Conservative"},
{"districtId":161,"candidateName":"Tom Pursglove","partyName":"Conservative"},
{"districtId":162,"candidateName":"Scott Mann","partyName":"Conservative"},
{"districtId":163,"candidateName":"Sheryll Murray","partyName":"Conservative"},
{"districtId":164,"candidateName":"Geoffrey Clifton-Brown","partyName":"Conservative"},
{"districtId":165,"candidateName":"Colleen Fletcher","partyName":"Labour"},
{"districtId":166,"candidateName":"Geoffrey Robinson","partyName":"Labour"},
{"districtId":167,"candidateName":"James Cunningham","partyName":"Labour"},
{"districtId":168,"candidateName":"Henry Smith","partyName":"Conservative"},
{"districtId":169,"candidateName":"Edward Timpson","partyName":"Conservative"},
{"districtId":170,"candidateName":"Gavin Barwell","partyName":"Conservative"},
{"districtId":171,"candidateName":"Steve Reed","partyName":"Labour Co-op"},
{"districtId":172,"candidateName":"Chris Philp","partyName":"Conservative"},
{"districtId":173,"candidateName":"Stuart McDonald","partyName":"Scottish National Party"},
{"districtId":174,"candidateName":"Ann Clwyd","partyName":"Labour"},
{"districtId":175,"candidateName":"Jon Cruddas","partyName":"Labour"},
{"districtId":176,"candidateName":"Jenny Chapman","partyName":"Labour"},
{"districtId":177,"candidateName":"Gareth Johnson","partyName":"Conservative"},
{"districtId":178,"candidateName":"Chris Heaton-Harris","partyName":"Conservative"},
{"districtId":179,"candidateName":"David Hanson","partyName":"Labour"},
{"districtId":180,"candidateName":"Andrew Gwynne","partyName":"Labour"},
{"districtId":181,"candidateName":"Amanda Solloway","partyName":"Conservative"},
{"districtId":182,"candidateName":"Dame Margaret Beckett","partyName":"Labour"},
{"districtId":183,"candidateName":"Patrick McLoughlin","partyName":"Conservative"},
{"districtId":184,"candidateName":"Pauline Latham","partyName":"Conservative"},
{"districtId":185,"candidateName":"Natascha Engel","partyName":"Labour"},
{"districtId":186,"candidateName":"Heather Wheeler","partyName":"Conservative"},
{"districtId":187,"candidateName":"Claire Perry","partyName":"Conservative"},
{"districtId":188,"candidateName":"Mel Stride","partyName":"Conservative"},
{"districtId":189,"candidateName":"Hugo Swire","partyName":"Conservative"},
{"districtId":190,"candidateName":"Peter Heaton-Jones","partyName":"Conservative"},
{"districtId":191,"candidateName":"Gary Streeter","partyName":"Conservative"},
{"districtId":192,"candidateName":"Geoffrey Cox","partyName":"Conservative"},
{"districtId":193,"candidateName":"Paula Sherriff","partyName":"Labour"},
{"districtId":194,"candidateName":"Caroline Flint","partyName":"Labour"},
{"districtId":195,"candidateName":"Rosie Winterton","partyName":"Labour"},
{"districtId":196,"candidateName":"Ed Miliband","partyName":"Labour"},
{"districtId":197,"candidateName":"Michael Tomlinson","partyName":"Conservative"},
{"districtId":198,"candidateName":"Simon Hoare","partyName":"Conservative"},
{"districtId":199,"candidateName":"Richard Drax","partyName":"Conservative"},
{"districtId":200,"candidateName":"Oliver Letwin","partyName":"Conservative"},
{"districtId":201,"candidateName":"Charlie Elphicke","partyName":"Conservative"},
{"districtId":202,"candidateName":"Lady Sylvia Hermon","partyName":"Independent"},
{"districtId":203,"candidateName":"Margaret Ritchie","partyName":"Social Democratic and Labour Party"},
{"districtId":204,"candidateName":"Ian Austin","partyName":"Labour"},
{"districtId":205,"candidateName":"Mike Wood","partyName":"Conservative"},
{"districtId":206,"candidateName":"Helen Hayes","partyName":"Labour"},
{"districtId":207,"candidateName":"Richard Arkless","partyName":"Scottish National Party"},
{"districtId":208,"candidateName":"David Mundell","partyName":"Conservative"},
{"districtId":209,"candidateName":"John Nicolson","partyName":"Scottish National Party"},
{"districtId":210,"candidateName":"Martin Docherty","partyName":"Scottish National Party"},
{"districtId":211,"candidateName":"Stewart Hosie","partyName":"Scottish National Party"},
{"districtId":212,"candidateName":"Chris Law","partyName":"Scottish National Party"},
{"districtId":213,"candidateName":"Douglas Chapman","partyName":"Scottish National Party"},
{"districtId":214,"candidateName":"Roberta Blackman-Woods","partyName":"Labour"},
{"districtId":215,"candidateName":"Kevan Jones","partyName":"Labour"},
{"districtId":216,"candidateName":"Laura Pidcock","partyName":"Labour"},
{"districtId":217,"candidateName":"Liz Roberts","partyName":"Plaid Cymru"},
{"districtId":218,"candidateName":"Rupa Huq","partyName":"Labour"},
{"districtId":219,"candidateName":"Steve Pound","partyName":"Labour"},
{"districtId":220,"candidateName":"Virendra Sharma","partyName":"Labour"},
{"districtId":221,"candidateName":"Grahame Morris","partyName":"Labour"},
{"districtId":222,"candidateName":"Stephen Timms","partyName":"Labour"},
{"districtId":223,"candidateName":"Dr Lisa Cameron","partyName":"Scottish National Party"},
{"districtId":224,"candidateName":"Martin Whitfield","partyName":"Labour"},
{"districtId":225,"candidateName":"Stephen Lloyd","partyName":"Liberal Democrats"},
{"districtId":226,"candidateName":"Mims Davies","partyName":"Conservative"},
{"districtId":227,"candidateName":"Antoinette Sandbach","partyName":"Conservative"},
{"districtId":228,"candidateName":"Tommy Sheppard","partyName":"Scottish National Party"},
{"districtId":229,"candidateName":"Deidre Brock","partyName":"Scottish National Party"},
{"districtId":230,"candidateName":"Ian Murray","partyName":"Labour"},
{"districtId":231,"candidateName":"Joanna Cherry","partyName":"Scottish National Party"},
{"districtId":232,"candidateName":"Christine Jardine","partyName":"Liberal Democrats"},
{"districtId":233,"candidateName":"Kate Osamor","partyName":"Labour Co-op"},
{"districtId":234,"candidateName":"Justin Madders","partyName":"Labour"},
{"districtId":235,"candidateName":"Alec Shelbrooke","partyName":"Conservative"},
{"districtId":236,"candidateName":"Clive Efford","partyName":"Labour"},
{"districtId":237,"candidateName":"Joan Ryan","partyName":"Labour"},
{"districtId":238,"candidateName":"Bambos Charalambous","partyName":"Labour"},
{"districtId":239,"candidateName":"Eleanor Laing","partyName":"Conservative"},
{"districtId":240,"candidateName":"Chris Grayling","partyName":"Conservative"},
{"districtId":241,"candidateName":"Maggie Throup","partyName":"Conservative"},
{"districtId":242,"candidateName":"Teresa Pearce","partyName":"Labour"},
{"districtId":243,"candidateName":"Dominic Raab","partyName":"Conservative"},
{"districtId":244,"candidateName":"Ben Bradshaw","partyName":"Labour"},
{"districtId":245,"candidateName":"Johnny McNally","partyName":"Scottish National Party"},
{"districtId":246,"candidateName":"Suella Fernandes","partyName":"Conservative"},
{"districtId":247,"candidateName":"Helen Whately","partyName":"Conservative"},
{"districtId":248,"candidateName":"Seema Malhotra","partyName":"Labour Co-op"},
{"districtId":249,"candidateName":"Tom Elliott","partyName":"UUP"},
{"districtId":250,"candidateName":"Stephen Gethins","partyName":"Scottish National Party"},
{"districtId":251,"candidateName":"Jack Lopresti","partyName":"Conservative"},
{"districtId":252,"candidateName":"Mike Freer","partyName":"Conservative"},
{"districtId":253,"candidateName":"Damian Collins","partyName":"Conservative"},
{"districtId":254,"candidateName":"Mark Harper","partyName":"Conservative"},
{"districtId":255,"candidateName":"Mark Durkan","partyName":"Social Democratic and Labour Party"},
{"districtId":256,"candidateName":"Mark Menzies","partyName":"Conservative"},
{"districtId":257,"candidateName":"Sir Edward Leigh","partyName":"Conservative"},
{"districtId":258,"candidateName":"Maria Eagle","partyName":"Labour"},
{"districtId":259,"candidateName":"Ian Mearns","partyName":"Labour"},
{"districtId":260,"candidateName":"Vernon Coaker","partyName":"Labour"},
{"districtId":261,"candidateName":"Rehman Chishti","partyName":"Conservative"},
{"districtId":262,"candidateName":"Alison Thewliss","partyName":"Scottish National Party"},
{"districtId":263,"candidateName":"David Linden","partyName":"Scottish National Party"},
{"districtId":264,"candidateName":"Patrick Grady","partyName":"Scottish National Party"},
{"districtId":265,"candidateName":"Glasgow North East","partyName":"Labour Co-op"},
{"districtId":266,"candidateName":"Carol Monaghan","partyName":"Scottish National Party"},
{"districtId":267,"candidateName":"Stewart McDonald","partyName":"Scottish National Party"},
{"districtId":268,"candidateName":"Chris Stephens","partyName":"Scottish National Party"},
{"districtId":269,"candidateName":"Peter Grant","partyName":"Scottish National Party"},
{"districtId":270,"candidateName":"Richard Graham","partyName":"Conservative"},
{"districtId":271,"candidateName":"Colin Clark","partyName":"Conservative"},
{"districtId":272,"candidateName":"Caroline Dinenage","partyName":"Conservative"},
{"districtId":273,"candidateName":"Tonia Antoniazzi","partyName":"Labour"},
{"districtId":274,"candidateName":"Nick Boles","partyName":"Conservative"},
{"districtId":275,"candidateName":"Adam Holloway","partyName":"Conservative"},
{"districtId":276,"candidateName":"Melanie Onn","partyName":"Labour"},
{"districtId":277,"candidateName":"Brandon Lewis","partyName":"Conservative"},
{"districtId":278,"candidateName":"Matthew Pennycook","partyName":"Labour"},
{"districtId":279,"candidateName":"Anne Milton","partyName":"Conservative"},
{"districtId":280,"candidateName":"Diane Abbott","partyName":"Labour"},
{"districtId":281,"candidateName":"Meg Hillier","partyName":"Labour Co-op"},
{"districtId":282,"candidateName":"James Morris","partyName":"Conservative"},
{"districtId":283,"candidateName":"Holly Lynch","partyName":"Labour"},
{"districtId":284,"candidateName":"David Davis","partyName":"Conservative"},
{"districtId":285,"candidateName":"Derek Twigg","partyName":"Labour"},
{"districtId":286,"candidateName":"Andy Slaughter","partyName":"Labour"},
{"districtId":287,"candidateName":"Damian Hinds","partyName":"Conservative"},
{"districtId":288,"candidateName":"Ranil Jayawardena","partyName":"Conservative"},
{"districtId":289,"candidateName":"Kit Malthouse","partyName":"Conservative"},
{"districtId":290,"candidateName":"Tulip Siddiq","partyName":"Labour"},
{"districtId":291,"candidateName":"Neil O'Brien","partyName":"Conservative"},
{"districtId":292,"candidateName":"Robert Halfon","partyName":"Conservative"},
{"districtId":293,"candidateName":"Andrew Jones","partyName":"Conservative"},
{"districtId":294,"candidateName":"Bob Blackman","partyName":"Conservative"},
{"districtId":295,"candidateName":"Gareth Thomas","partyName":"Labour Co-op"},
{"districtId":296,"candidateName":"Mike Hill","partyName":"Labour"},
{"districtId":297,"candidateName":"Bernard Jenkin","partyName":"Conservative"},
{"districtId":298,"candidateName":"Amber Rudd","partyName":"Conservative"},
{"districtId":299,"candidateName":"Alan Mak","partyName":"Conservative"},
{"districtId":300,"candidateName":"John McDonnell","partyName":"Labour"},
{"districtId":301,"candidateName":"William Wragg","partyName":"Conservative"},
{"districtId":302,"candidateName":"Mike Penning","partyName":"Conservative"},
{"districtId":303,"candidateName":"Jon Trickett","partyName":"Labour"},
{"districtId":304,"candidateName":"Matthew Offord","partyName":"Conservative"},
{"districtId":305,"candidateName":"John Howell","partyName":"Conservative"},
{"districtId":306,"candidateName":"Jesse Norman","partyName":"Conservative"},
{"districtId":307,"candidateName":"Bill Wiggin","partyName":"Conservative"},
{"districtId":308,"candidateName":"Mark Prisk","partyName":"Conservative"},
{"districtId":309,"candidateName":"Sir Oliver Heald","partyName":"Conservative"},
{"districtId":310,"candidateName":"David Gauke","partyName":"Conservative"},
{"districtId":311,"candidateName":"Oliver Dowden","partyName":"Conservative"},
{"districtId":312,"candidateName":"Guy Opperman","partyName":"Conservative"},
{"districtId":313,"candidateName":"Liz McInnes","partyName":"Labour"},
{"districtId":314,"candidateName":"Ruth George","partyName":"Labour"},
{"districtId":315,"candidateName":"Bim Afolami","partyName":"Conservative"},
{"districtId":316,"candidateName":"Keir Starmer","partyName":"Labour"},
{"districtId":317,"candidateName":"Julia Dockerill","partyName":"Conservative"},
{"districtId":318,"candidateName":"Catherine West","partyName":"Labour"},
{"districtId":319,"candidateName":"Jeremy Quin","partyName":"Conservative"},
{"districtId":320,"candidateName":"Bridget Phillipson","partyName":"Labour"},
{"districtId":321,"candidateName":"Peter Kyle","partyName":"Labour"},
{"districtId":322,"candidateName":"Barry Sheerman","partyName":"Labour Co-op"},
{"districtId":323,"candidateName":"Karl Turner","partyName":"Labour"},
{"districtId":324,"candidateName":"Diana Johnson","partyName":"Labour"},
{"districtId":325,"candidateName":"Emma Hardy","partyName":"Labour"},
{"districtId":326,"candidateName":"Jonathan Djanogly","partyName":"Conservative"},
{"districtId":327,"candidateName":"Graham Jones","partyName":"Labour"},
{"districtId":328,"candidateName":"Wes Streeting","partyName":"Labour"},
{"districtId":329,"candidateName":"Mike Gapes","partyName":"Labour Co-op"},
{"districtId":330,"candidateName":"Ronnie Cowan","partyName":"Scottish National Party"},
{"districtId":331,"candidateName":"Drew Hendry","partyName":"Scottish National Party"},
{"districtId":332,"candidateName":"Sandy Martin","partyName":"Labour"},
{"districtId":333,"candidateName":"Bob Seely","partyName":"Conservative"},
{"districtId":334,"candidateName":"Jeremy Corbyn","partyName":"Labour"},
{"districtId":335,"candidateName":"Emily Thornberry","partyName":"Labour"},
{"districtId":336,"candidateName":"Chris Evans","partyName":"Labour Co-op"},
{"districtId":337,"candidateName":"Stephen Hepburn","partyName":"Labour"},
{"districtId":338,"candidateName":"Kris Hopkins","partyName":"Conservative"},
{"districtId":339,"candidateName":"Jeremy Wright","partyName":"Conservative"},
{"districtId":340,"candidateName":"Victoria Borwick","partyName":"Conservative"},
{"districtId":341,"candidateName":"Philip Hollobone","partyName":"Conservative"},
{"districtId":342,"candidateName":"Alan Brown","partyName":"Scottish National Party"},
{"districtId":343,"candidateName":"Ed Davey","partyName":"Liberal Democrats"},
{"districtId":344,"candidateName":"Chris Skidmore","partyName":"Conservative"},
{"districtId":345,"candidateName":"Lesley Laird","partyName":"Labour"},
{"districtId":346,"candidateName":"George Howarth","partyName":"Labour"},
{"districtId":347,"candidateName":"Jeffrey Donaldson","partyName":"Democratic Unionist Party"},
{"districtId":348,"candidateName":"Angela Crawley","partyName":"Scottish National Party"},
{"districtId":349,"candidateName":"Rosie Cooper","partyName":"Labour"},
{"districtId":350,"candidateName":"Cat Smith","partyName":"Labour"},
{"districtId":351,"candidateName":"Hilary Benn","partyName":"Labour"},
{"districtId":352,"candidateName":"Richard Burgon","partyName":"Labour"},
{"districtId":353,"candidateName":"Fabian Hamilton","partyName":"Labour"},
{"districtId":354,"candidateName":"Alex Sobel","partyName":"Labour Co-op"},
{"districtId":355,"candidateName":"Rachel Reeves","partyName":"Labour"},
{"districtId":356,"candidateName":"Keith Vaz","partyName":"Labour"},
{"districtId":357,"candidateName":"Jon Ashworth","partyName":"Labour Co-op"},
{"districtId":358,"candidateName":"Liz Kendall","partyName":"Labour"},
{"districtId":359,"candidateName":"Andrew Bridgen","partyName":"Conservative"},
{"districtId":360,"candidateName":"Alberto Costa","partyName":"Conservative"},
{"districtId":361,"candidateName":"Joanne Platt","partyName":"Labour Co-op"},
{"districtId":362,"candidateName":"Maria Caulfield","partyName":"Conservative"},
{"districtId":363,"candidateName":"Vicky Foxcroft","partyName":"Labour"},
{"districtId":364,"candidateName":"Heidi Alexander","partyName":"Labour"},
{"districtId":365,"candidateName":"Ellie Reeves","partyName":"Labour"},
{"districtId":366,"candidateName":"John Cryer","partyName":"Labour"},
{"districtId":367,"candidateName":"Michael Fabricant","partyName":"Conservative"},
{"districtId":368,"candidateName":"Karl McCartney","partyName":"Conservative"},
{"districtId":369,"candidateName":"Martyn Day","partyName":"Scottish National Party"},
{"districtId":370,"candidateName":"Louise Ellman","partyName":"Labour Co-op"},
{"districtId":371,"candidateName":"Dan Carden","partyName":"Labour"},
{"districtId":372,"candidateName":"Luciana Berger","partyName":"Labour Co-op"},
{"districtId":373,"candidateName":"Stephen Twigg","partyName":"Labour Co-op"},
{"districtId":374,"candidateName":"Hannah Bardell","partyName":"Scottish National Party"},
{"districtId":375,"candidateName":"Nia Griffith","partyName":"Labour"},
{"districtId":376,"candidateName":"Gregory Campbell","partyName":"Democratic Unionist Party"},
{"districtId":377,"candidateName":"Nicky Morgan","partyName":"Conservative"},
{"districtId":378,"candidateName":"Victoria Atkins","partyName":"Conservative"},
{"districtId":379,"candidateName":"Philip Dunne","partyName":"Conservative"},
{"districtId":380,"candidateName":"Kelvin Hopkins","partyName":"Labour"},
{"districtId":381,"candidateName":"Gavin Shuker","partyName":"Labour Co-op"},
{"districtId":382,"candidateName":"David Rutley","partyName":"Conservative"},
{"districtId":383,"candidateName":"Theresa May","partyName":"Conservative"},
{"districtId":384,"candidateName":"Helen Grant","partyName":"Conservative"},
{"districtId":385,"candidateName":"Yvonne Fovargue","partyName":"Labour"},
{"districtId":386,"candidateName":"John Whittingdale","partyName":"Conservative"},
{"districtId":387,"candidateName":"Lucy Powell","partyName":"Labour Co-op"},
{"districtId":388,"candidateName":"Mohammed Khan","partyName":"Labour"},
{"districtId":389,"candidateName":"Jeff Smith","partyName":"Labour"},
{"districtId":390,"candidateName":"Alan Meale","partyName":"Labour"},
{"districtId":391,"candidateName":"George Hollingbery","partyName":"Conservative"},
{"districtId":392,"candidateName":"Caroline Spelman","partyName":"Conservative"},
{"districtId":393,"candidateName":"Gerald Jones","partyName":"Labour"},
{"districtId":394,"candidateName":"Andy McDonald","partyName":"Labour"},
{"districtId":395,"candidateName":"Simon Clarke","partyName":"Conservative"},
{"districtId":396,"candidateName":"Danielle Rowley","partyName":"Labour"},
{"districtId":397,"candidateName":"Mark Lancaster","partyName":"Conservative"},
{"districtId":398,"candidateName":"Iain Stewart","partyName":"Conservative"},
{"districtId":399,"candidateName":"Siobhain McDonagh","partyName":"Labour"},
{"districtId":400,"candidateName":"Sir Paul Beresford","partyName":"Conservative"},
{"districtId":401,"candidateName":"David Davies","partyName":"Conservative"},
{"districtId":402,"candidateName":"Glyn Davies","partyName":"Conservative"},
{"districtId":403,"candidateName":"Douglas Ross","partyName":"Conservative"},
{"districtId":404,"candidateName":"David Morris","partyName":"Conservative"},
{"districtId":405,"candidateName":"Andrea Jenkyns","partyName":"Conservative"},
{"districtId":406,"candidateName":"Marion Fellows","partyName":"Scottish National Party"},
{"districtId":407,"candidateName":"Angus MacNeil","partyName":"Scottish National Party"},
{"districtId":408,"candidateName":"Christina Rees","partyName":"Labour Co-op"},
{"districtId":409,"candidateName":"Julian Lewis","partyName":"Conservative"},
{"districtId":410,"candidateName":"Desmond Swayne","partyName":"Conservative"},
{"districtId":411,"candidateName":"Robert Jenrick","partyName":"Conservative"},
{"districtId":412,"candidateName":"Richard Benyon","partyName":"Conservative"},
{"districtId":413,"candidateName":"Paul Farrelly","partyName":"Labour"},
{"districtId":414,"candidateName":"Chi Onwurah","partyName":"Labour"},
{"districtId":415,"candidateName":"Nicholas Brown","partyName":"Labour"},
{"districtId":416,"candidateName":"Catherine McKinnell","partyName":"Labour"},
{"districtId":417,"candidateName":"Jessica Morden","partyName":"Labour"},
{"districtId":418,"candidateName":"Paul Flynn","partyName":"Labour"},
{"districtId":419,"candidateName":"Mickey Brady","partyName":"Sinn Fein"},
{"districtId":420,"candidateName":"Anne Marie Morris","partyName":"Conservative"},
{"districtId":421,"candidateName":"George Freeman","partyName":"Conservative"},
{"districtId":422,"candidateName":"Norman Lamb","partyName":"Liberal Democrats"},
{"districtId":423,"candidateName":"Henry Bellingham","partyName":"Conservative"},
{"districtId":424,"candidateName":"Richard Bacon","partyName":"Conservative"},
{"districtId":425,"candidateName":"Elizabeth Truss","partyName":"Conservative"},
{"districtId":426,"candidateName":"Yvette Cooper","partyName":"Labour"},
{"districtId":427,"candidateName":"Michael Ellis","partyName":"Conservative"},
{"districtId":428,"candidateName":"Andrew Lewer","partyName":"Conservative"},
{"districtId":429,"candidateName":" Andrea Leadsom","partyName":"Conservative"},
{"districtId":430,"candidateName":"Chloe Smith","partyName":"Conservative"},
{"districtId":431,"candidateName":"Clive Lewis","partyName":"Labour"},
{"districtId":432,"candidateName":"Chris Leslie","partyName":"Labour Co-op"},
{"districtId":433,"candidateName":"Alex Norris","partyName":"Labour Co-op"},
{"districtId":434,"candidateName":"Lilian Greenwood","partyName":"Labour"},
{"districtId":435,"candidateName":"Marcus Jones","partyName":"Conservative"},
{"districtId":436,"candidateName":"Luke Graham","partyName":"Conservative"},
{"districtId":437,"candidateName":"Chris Elmore","partyName":"Labour"},
{"districtId":438,"candidateName":"James Brokenshire","partyName":"Conservative"},
{"districtId":439,"candidateName":"Debbie Abrahams","partyName":"Labour"},
{"districtId":440,"candidateName":"Jim McMahon","partyName":"Labour Co-op"},
{"districtId":441,"candidateName":"Alistair Carmichael","partyName":"Liberal Democrats"},
{"districtId":442,"candidateName":"Jo Johnson","partyName":"Conservative"},
{"districtId":443,"candidateName":"Anneliese Dodds","partyName":"Labour Co-op"},
{"districtId":444,"candidateName":"Nicola Blackwood","partyName":"Conservative"},
{"districtId":445,"candidateName":"Gavin Newlands","partyName":"Scottish National Party"},
{"districtId":446,"candidateName":"Mhairi Black","partyName":"Scottish National Party"},
{"districtId":447,"candidateName":"Andrew Stephenson","partyName":"Conservative"},
{"districtId":448,"candidateName":"Angela Smith","partyName":"Labour"},
{"districtId":449,"candidateName":"Rory Stewart","partyName":"Conservative"},
{"districtId":450,"candidateName":"Pete Wishart","partyName":"Scottish National Party"},
{"districtId":451,"candidateName":"Stewart Jackson","partyName":"Conservative"},
{"districtId":452,"candidateName":"Johnny Mercer","partyName":"Conservative"},
{"districtId":453,"candidateName":"Oliver Colvile","partyName":"Conservative"},
{"districtId":454,"candidateName":" Owen Smith","partyName":"Labour"},
{"districtId":455,"candidateName":"Robert Syms","partyName":"Conservative"},
{"districtId":456,"candidateName":"Jim Fitzpatrick","partyName":"Labour"},
{"districtId":457,"candidateName":"Penny Mordaunt","partyName":"Conservative"},
{"districtId":458,"candidateName":"Stephen Morgan","partyName":"Labour"},
{"districtId":459,"candidateName":"Stephen Crabb","partyName":"Conservative"},
{"districtId":460,"candidateName":"Mark Hendrick","partyName":"Labour Co-op"},
{"districtId":461,"candidateName":"Stuart Andrew","partyName":"Conservative"},
{"districtId":462,"candidateName":"Justine Greening","partyName":"Conservative"},
{"districtId":463,"candidateName":"Mark Francois","partyName":"Conservative"},
{"districtId":464,"candidateName":"Matt Rodda","partyName":"Labour"},
{"districtId":465,"candidateName":"Alok Sharma","partyName":"Conservative"},
{"districtId":466,"candidateName":"Anna Turley","partyName":"Labour Co-op"},
{"districtId":467,"candidateName":"Rachel Maclean","partyName":"Conservative"},
{"districtId":468,"candidateName":"Crispin Blunt","partyName":"Conservative"},
{"districtId":469,"candidateName":"Paul Masterton","partyName":"Conservative"},
{"districtId":470,"candidateName":"Chris Bryant","partyName":"Labour"},
{"districtId":471,"candidateName":"Nigel Evans","partyName":"Conservative"},
{"districtId":472,"candidateName":"Rishi Sunak","partyName":"Conservative"},
{"districtId":473,"candidateName":" Sarah Olney","partyName":"Liberal Democrats"},
{"districtId":474,"candidateName":"Simon Danczuk","partyName":"ND"},
{"districtId":475,"candidateName":"Kelly Tolhurst","partyName":"Conservative"},
{"districtId":476,"candidateName":"James Duddridge","partyName":"Conservative"},
{"districtId":477,"candidateName":"Andrew Rosindell","partyName":"Conservative"},
{"districtId":478,"candidateName":"Caroline Nokes","partyName":"Conservative"},
{"districtId":479,"candidateName":"Ian Blackford","partyName":"Scottish National Party"},
{"districtId":480,"candidateName":"Jake Berry","partyName":"Conservative"},
{"districtId":481,"candidateName":"Sir Kevin Barron","partyName":"Labour"},
{"districtId":482,"candidateName":"Sarah Champion","partyName":"Labour"},
{"districtId":483,"candidateName":"Mark Pawsey","partyName":"Conservative"},
{"districtId":484,"candidateName":"Nick Hurd","partyName":"Conservative"},
{"districtId":485,"candidateName":"Philip Hammond","partyName":"Conservative"},
{"districtId":486,"candidateName":"Kenneth Clarke","partyName":"Conservative"},
{"districtId":487,"candidateName":"Ged Killen","partyName":"Labour"},
{"districtId":488,"candidateName":"Alan Duncan","partyName":"Conservative"},
{"districtId":489,"candidateName":"Kemi Badenoch","partyName":"Conservative"},
{"districtId":490,"candidateName":"Anne Main","partyName":"Conservative"},
{"districtId":491,"candidateName":"Steve Double","partyName":"Conservative"},
{"districtId":492,"candidateName":"Conor McGinn","partyName":"Labour"},
{"districtId":493,"candidateName":"Marie Rimmer","partyName":"Labour"},
{"districtId":494,"candidateName":"Derek Thomas","partyName":"Conservative"},
{"districtId":495,"candidateName":"Rebecca Long-Bailey","partyName":"Labour"},
{"districtId":496,"candidateName":"John Glen","partyName":"Conservative"},
{"districtId":497,"candidateName":"Robert Goodwill","partyName":"Conservative"},
{"districtId":498,"candidateName":"Nic Dakin","partyName":"Labour"},
{"districtId":499,"candidateName":"Phil Wilson","partyName":"Labour"},
{"districtId":500,"candidateName":"Bill Esterson","partyName":"Labour"},
{"districtId":501,"candidateName":"Nigel Adams","partyName":"Conservative"},
{"districtId":502,"candidateName":"Michael Fallon","partyName":"Conservative"},
{"districtId":503,"candidateName":"Gill Furniss","partyName":"Labour"},
{"districtId":504,"candidateName":"Paul Blomfield","partyName":"Labour"},
{"districtId":505,"candidateName":"Nick Clegg","partyName":"Liberal Democrats"},
{"districtId":506,"candidateName":"Louise Haigh","partyName":"Labour"},
{"districtId":507,"candidateName":"Clive Betts","partyName":"Labour"},
{"districtId":508,"candidateName":"Mark Spencer","partyName":"Conservative"},
{"districtId":509,"candidateName":"Philip Davies","partyName":"Conservative"},
{"districtId":510,"candidateName":"Daniel Kawczynski","partyName":"Conservative"},
{"districtId":511,"candidateName":"Owen Paterson","partyName":"Conservative"},
{"districtId":512,"candidateName":"Gordon Henderson","partyName":"Conservative"},
{"districtId":513,"candidateName":"Julian Smith","partyName":"Conservative"},
{"districtId":514,"candidateName":"Caroline Johnson","partyName":"Conservative"},
{"districtId":515,"candidateName":"Tan Dhesi","partyName":"Labour"},
{"districtId":516,"candidateName":"Julian Knight","partyName":"Conservative"},
{"districtId":517,"candidateName":"Dr Liam Fox","partyName":"Conservative"},
{"districtId":518,"candidateName":"Jacob Rees-Mogg","partyName":"Conservative"},
{"districtId":519,"candidateName":"David Warburton","partyName":"Conservative"},
{"districtId":520,"candidateName":"John Hayes","partyName":"Conservative"},
{"districtId":521,"candidateName":"Seema Kennedy","partyName":"Conservative"},
{"districtId":522,"candidateName":"Emma Lewell-Buck","partyName":"Labour"},
{"districtId":523,"candidateName":"Royston Smith","partyName":"Conservative"},
{"districtId":524,"candidateName":"Alan Whitehead","partyName":"Labour"},
{"districtId":525,"candidateName":"Sir David Amess","partyName":"Conservative"},
{"districtId":526,"candidateName":"Damien Moore","partyName":"Conservative"},
{"districtId":527,"candidateName":"Kwasi Kwarteng","partyName":"Conservative"},
{"districtId":528,"candidateName":"Jeremy Lefroy","partyName":"Conservative"},
{"districtId":529,"candidateName":"Karen Bradley","partyName":"Conservative"},
{"districtId":530,"candidateName":"Gavin Williamson","partyName":"Conservative"},
{"districtId":531,"candidateName":"Jonathan Reynolds","partyName":"Labour Co-op"},
{"districtId":532,"candidateName":"Stephen McPartland","partyName":"Conservative"},
{"districtId":533,"candidateName":"Stephen Kerr","partyName":"Conservative"},
{"districtId":534,"candidateName":"Ann Coffey","partyName":"Labour"},
{"districtId":535,"candidateName":"Alex Cunningham","partyName":"Labour"},
{"districtId":536,"candidateName":"Paul Williams","partyName":"Labour"},
{"districtId":537,"candidateName":"Gareth Snell","partyName":"Labour Co-op"},
{"districtId":538,"candidateName":"Ruth Smeeth","partyName":"Labour"},
{"districtId":539,"candidateName":"Jack Brereton","partyName":"Conservative"},
{"districtId":540,"candidateName":"Sir Bill Cash","partyName":"Conservative"},
{"districtId":541,"candidateName":"Margot James","partyName":"Conservative"},
{"districtId":542,"candidateName":"Jim Shannon","partyName":"Democratic Unionist Party"},
{"districtId":543,"candidateName":"Nadhim Zahawi","partyName":"Conservative"},
{"districtId":544,"candidateName":"Chuka Umunna","partyName":"Labour"},
{"districtId":545,"candidateName":"Kate Green","partyName":"Labour"},
{"districtId":546,"candidateName":"David Drew","partyName":"Labour"},
{"districtId":547,"candidateName":"Dr Dan Poulter","partyName":"Conservative"},
{"districtId":548,"candidateName":"Therese Coffey","partyName":"Conservative"},
{"districtId":549,"candidateName":"James Cartlidge","partyName":"Conservative"},
{"districtId":550,"candidateName":"Matt Hancock","partyName":"Conservative"},
{"districtId":551,"candidateName":"Julie Elliott","partyName":"Labour"},
{"districtId":552,"candidateName":"Sam Gyimah","partyName":"Conservative"},
{"districtId":553,"candidateName":"Michael Gove","partyName":"Conservative"},
{"districtId":554,"candidateName":"Jeremy Hunt","partyName":"Conservative"},
{"districtId":555,"candidateName":"Nicholas Soames","partyName":"Conservative"},
{"districtId":556,"candidateName":"Paul Scully","partyName":"Conservative"},
{"districtId":557,"candidateName":"Andrew Mitchell","partyName":"Conservative"},
{"districtId":558,"candidateName":"Carolyn Harris","partyName":"Labour"},
{"districtId":559,"candidateName":"Geraint Davies","partyName":"Labour Co-op"},
{"districtId":560,"candidateName":"Justin Tomlinson","partyName":"Conservative"},
{"districtId":561,"candidateName":"Robert Buckland","partyName":"Conservative"},
{"districtId":562,"candidateName":"Christopher Pincher","partyName":"Conservative"},
{"districtId":563,"candidateName":"Esther McVey","partyName":"Conservative"},
{"districtId":564,"candidateName":"Rebecca Pow","partyName":"Conservative"},
{"districtId":565,"candidateName":"Lucy Allan","partyName":"Conservative"},
{"districtId":566,"candidateName":"Laurence Robertson","partyName":"Conservative"},
{"districtId":567,"candidateName":"Roger Gale","partyName":"Conservative"},
{"districtId":568,"candidateName":"Craig Mackinlay","partyName":"Conservative"},
{"districtId":569,"candidateName":"Kevin Hollinrake","partyName":"Conservative"},
{"districtId":570,"candidateName":"Luke Hall","partyName":"Conservative"},
{"districtId":571,"candidateName":"Jackie Doyle-Price","partyName":"Conservative"},
{"districtId":572,"candidateName":"Neil Parish","partyName":"Conservative"},
{"districtId":573,"candidateName":"Tom Tugendhat","partyName":"Conservative"},
{"districtId":574,"candidateName":"Dr Rosena Allin-Khan","partyName":"Labour"},
{"districtId":575,"candidateName":"Kevin Foster","partyName":"Conservative"},
{"districtId":576,"candidateName":"Nick Thomas-Symonds","partyName":"Labour"},
{"districtId":577,"candidateName":"Dr Sarah Wollaston","partyName":"Conservative"},
{"districtId":578,"candidateName":"David Lammy","partyName":"Labour"},
{"districtId":579,"candidateName":"Sarah Newton","partyName":"Conservative"},
{"districtId":580,"candidateName":"Greg Clark","partyName":"Conservative"},
{"districtId":581,"candidateName":"Vince Cable","partyName":"Liberal Democrats"},
{"districtId":582,"candidateName":"Alan Campbell","partyName":"Labour"},
{"districtId":583,"candidateName":"Mary Glindon","partyName":"Labour"},
{"districtId":584,"candidateName":"Barry McElduff","partyName":"Sinn Fein"},
{"districtId":585,"candidateName":"Francie Molloy","partyName":"Sinn Fein"},
{"districtId":586,"candidateName":"David Simpson","partyName":"Democratic Unionist Party"},
{"districtId":587,"candidateName":"Boris Johnson","partyName":"Conservative"},
{"districtId":588,"candidateName":"Chris Ruane","partyName":"Labour"},
{"districtId":589,"candidateName":"Alun Cairns","partyName":"Conservative"},
{"districtId":590,"candidateName":"Kate Hoey","partyName":"Labour"},
{"districtId":591,"candidateName":"Mary Creagh","partyName":"Labour"},
{"districtId":592,"candidateName":"Angela Eagle","partyName":"Labour"},
{"districtId":593,"candidateName":"Eddie Hughes","partyName":"Labour"},
{"districtId":594,"candidateName":"Valerie Vaz","partyName":"Labour"},
{"districtId":595,"candidateName":"Stella Creasy","partyName":"Labour Co-op"},
{"districtId":596,"candidateName":"Ian Lavery","partyName":"Labour"},
{"districtId":597,"candidateName":"Ed Vaizey","partyName":"Conservative"},
{"districtId":598,"candidateName":"John Spellar","partyName":"Labour"},
{"districtId":599,"candidateName":"Helen Jones","partyName":"Labour"},
{"districtId":600,"candidateName":"Faisal Rashid","partyName":"Labour"},
{"districtId":601,"candidateName":"Matt Western","partyName":"Conservative"},
{"districtId":602,"candidateName":"Craig Tracey","partyName":"Conservative"},
{"districtId":603,"candidateName":"Sharon Hodgson","partyName":"Labour"},
{"districtId":604,"candidateName":"Richard Harrington","partyName":"Conservative"},
{"districtId":605,"candidateName":"Peter Aldous","partyName":"Conservative"},
{"districtId":606,"candidateName":"Nus Ghani","partyName":"Conservative"},
{"districtId":607,"candidateName":"Mike Amesbury","partyName":"Labour"},
{"districtId":608,"candidateName":"Peter Bone","partyName":"Conservative"},
{"districtId":609,"candidateName":"James Heappey","partyName":"Conservative"},
{"districtId":610,"candidateName":" Grant Shapps","partyName":"Conservative"},
{"districtId":611,"candidateName":"John Healey","partyName":"Labour"},
{"districtId":612,"candidateName":"Tom Watson","partyName":"Labour"},
{"districtId":613,"candidateName":"Adrian Bailey","partyName":"Labour Co-op"},
{"districtId":614,"candidateName":"Lyn Brown","partyName":"Labour"},
{"districtId":615,"candidateName":"Karen Buck","partyName":"Labour"},
{"districtId":616,"candidateName":"Tim Farron","partyName":"Liberal Democrats"},
{"districtId":617,"candidateName":"John Penrose","partyName":"Conservative"},
{"districtId":618,"candidateName":"Lisa Nandy","partyName":"Labour"},
{"districtId":619,"candidateName":"James Gray","partyName":"Conservative"},
{"districtId":620,"candidateName":"Dr Andrew Murrison","partyName":"Conservative"},
{"districtId":621,"candidateName":"Stephen Hammond","partyName":"Conservative"},
{"districtId":622,"candidateName":"Steve Brine","partyName":"Conservative"},
{"districtId":623,"candidateName":"Adam Afriyie","partyName":"Conservative"},
{"districtId":624,"candidateName":"Alison McGovern","partyName":"Labour"},
{"districtId":625,"candidateName":"Margaret Greenwood","partyName":"Labour"},
{"districtId":626,"candidateName":"Priti Patel","partyName":"Conservative"},
{"districtId":627,"candidateName":"Robert Courts","partyName":"Conservative"},
{"districtId":628,"candidateName":"Jonathan Lord","partyName":"Conservative"},
{"districtId":629,"candidateName":"John Redwood","partyName":"Conservative"},
{"districtId":630,"candidateName":"Emma Reynolds","partyName":"Labour"},
{"districtId":631,"candidateName":"Pat McFadden","partyName":"Labour"},
{"districtId":632,"candidateName":"Eleanor Smith","partyName":"Labour"},
{"districtId":633,"candidateName":"Robin Walker","partyName":"Conservative"},
{"districtId":634,"candidateName":"Nigel Huddleston","partyName":"Conservative"},
{"districtId":635,"candidateName":"Harriett Baldwin","partyName":"Conservative"},
{"districtId":636,"candidateName":"Sue Hay