diff --git a/assets/components/actors/actor.vue b/assets/components/actors/actor.vue
index 4225a419..90555cec 100644
--- a/assets/components/actors/actor.vue
+++ b/assets/components/actors/actor.vue
@@ -190,6 +190,22 @@
+
+ Eyes
+ {{ actor.eyes }}
+
+
+
+ Hair
+ {{ actor.hair }}
+
+
Searching...
-
-
Found {{ actors.length }} actors for '{{ query }}'
+
Found {{ actors.length }} actors for '{{ query }}'
-
+
-
- Found {{ releases.length }} releases for '{{ query }}'
+ Found {{ releases.length }} releases for '{{ query }}'
-
-
+
diff --git a/assets/img/icons/haircut.svg b/assets/img/icons/haircut.svg
new file mode 100644
index 00000000..08ec1060
--- /dev/null
+++ b/assets/img/icons/haircut.svg
@@ -0,0 +1,6 @@
+
+
diff --git a/assets/js/actors/actions.js b/assets/js/actors/actions.js
index ad73bef1..917626d4 100644
--- a/assets/js/actors/actions.js
+++ b/assets/js/actors/actions.js
@@ -47,6 +47,8 @@ function initActorActions(store, _router) {
heightImperial: height(units:IMPERIAL)
weightMetric: weight(units:METRIC)
weightImperial: weight(units:IMPERIAL)
+ hair
+ eyes
hasTattoos
hasPiercings
tattoos
diff --git a/migrations/20190325001339_releases.js b/migrations/20190325001339_releases.js
index fc059840..1d7fd38f 100644
--- a/migrations/20190325001339_releases.js
+++ b/migrations/20190325001339_releases.js
@@ -14,6 +14,7 @@ exports.up = knex => Promise.resolve()
table.integer('code', 3);
table.string('nationality');
+
table.integer('priority', 2)
.defaultTo(0);
}))
@@ -344,6 +345,8 @@ exports.up = knex => Promise.resolve()
.inTable('sites');
table.unique(['actor_id', 'network_id', 'site_id']);
+ table.integer('priority', 4)
+ .defaultTo(1);
table.string('real_name');
diff --git a/public/img/logos/penthouse/misc/penthouse_basic.png b/public/img/logos/penthouse/misc/penthouse_basic.png
new file mode 100644
index 00000000..82b2302e
Binary files /dev/null and b/public/img/logos/penthouse/misc/penthouse_basic.png differ
diff --git a/public/img/logos/penthouse/misc/penthouse_basic_dark.png b/public/img/logos/penthouse/misc/penthouse_basic_dark.png
new file mode 100644
index 00000000..d08a80a4
Binary files /dev/null and b/public/img/logos/penthouse/misc/penthouse_basic_dark.png differ
diff --git a/public/img/logos/penthouse/misc/penthouse_basic_red.png b/public/img/logos/penthouse/misc/penthouse_basic_red.png
new file mode 100644
index 00000000..282444fb
Binary files /dev/null and b/public/img/logos/penthouse/misc/penthouse_basic_red.png differ
diff --git a/public/img/logos/penthouse/penthouse.png b/public/img/logos/penthouse/misc/penthouse_light.png
similarity index 100%
rename from public/img/logos/penthouse/penthouse.png
rename to public/img/logos/penthouse/misc/penthouse_light.png
diff --git a/public/img/logos/penthouse/misc/penthouse_red.png b/public/img/logos/penthouse/misc/penthouse_red.png
new file mode 100644
index 00000000..899b0597
Binary files /dev/null and b/public/img/logos/penthouse/misc/penthouse_red.png differ
diff --git a/public/img/logos/penthouse/network.png b/public/img/logos/penthouse/network.png
new file mode 100644
index 00000000..b4427e0a
Binary files /dev/null and b/public/img/logos/penthouse/network.png differ
diff --git a/seeds/05_countries.js b/seeds/05_countries.js
index 06bdba77..6be17bbf 100644
--- a/seeds/05_countries.js
+++ b/seeds/05_countries.js
@@ -1,1787 +1,1787 @@
const upsert = require('../src/utils/upsert');
const countries = [
- {
- name: 'Afghanistan',
- code: 4,
- alpha2: 'AF',
- alpha3: 'AFG',
- nationality: 'Afghan',
- },
- {
- name: 'Åland Islands',
- code: 248,
- alpha2: 'AX',
- alpha3: 'ALA',
- nationality: 'Åland Island',
- },
- {
- name: 'Albania',
- code: 8,
- alpha2: 'AL',
- alpha3: 'ALB',
- nationality: 'Albanian',
- },
- {
- name: 'Algeria',
- code: 12,
- alpha2: 'DZ',
- alpha3: 'DZA',
- nationality: 'Algerian',
- },
- {
- name: 'American Samoa',
- code: 16,
- alpha2: 'AS',
- alpha3: 'ASM',
- nationality: 'American Samoan',
- priority: 0,
- },
- {
- name: 'Andorra',
- code: 20,
- alpha2: 'AD',
- alpha3: 'AND',
- nationality: 'Andorran',
- },
- {
- name: 'Angola',
- code: 24,
- alpha2: 'AO',
- alpha3: 'AGO',
- nationality: 'Angolan',
- },
- {
- name: 'Anguilla',
- code: 660,
- alpha2: 'AI',
- alpha3: 'AIA',
- nationality: 'Anguillan',
- },
- {
- name: 'Antarctica',
- code: 10,
- alpha2: 'AQ',
- alpha3: 'ATA',
- nationality: 'Antarctic',
- },
- {
- name: 'Antigua and Barbuda',
- code: 28,
- alpha2: 'AG',
- alpha3: 'ATG',
- nationality: 'Antiguan or Barbudan',
- },
- {
- name: 'Argentina',
- code: 32,
- alpha2: 'AR',
- alpha3: 'ARG',
- nationality: 'Argentine',
- },
- {
- name: 'Armenia',
- code: 51,
- alpha2: 'AM',
- alpha3: 'ARM',
- nationality: 'Armenian',
- },
- {
- name: 'Aruba',
- code: 533,
- alpha2: 'AW',
- alpha3: 'ABW',
- nationality: 'Aruban',
- },
- {
- name: 'Australia',
- code: 36,
- alpha2: 'AU',
- alpha3: 'AUS',
- nationality: 'Australian',
- },
- {
- name: 'Austria',
- code: 40,
- alpha2: 'AT',
- alpha3: 'AUT',
- nationality: 'Austrian',
- },
- {
- name: 'Azerbaijan',
- code: 31,
- alpha2: 'AZ',
- alpha3: 'AZE',
- nationality: 'Azerbaijani, Azeri',
- },
- {
- name: 'Bahamas',
- code: 44,
- alpha2: 'BS',
- alpha3: 'BHS',
- nationality: 'Bahamian',
- },
- {
- name: 'Bahrain',
- code: 48,
- alpha2: 'BH',
- alpha3: 'BHR',
- nationality: 'Bahraini',
- },
- {
- name: 'Bangladesh',
- code: 50,
- alpha2: 'BD',
- alpha3: 'BGD',
- nationality: 'Bangladeshi',
- },
- {
- name: 'Barbados',
- code: 52,
- alpha2: 'BB',
- alpha3: 'BRB',
- nationality: 'Barbadian',
- },
- {
- name: 'Belarus',
- code: 112,
- alpha2: 'BY',
- alpha3: 'BLR',
- nationality: 'Belarusian',
- },
- {
- name: 'Belgium',
- code: 56,
- alpha2: 'BE',
- alpha3: 'BEL',
- nationality: 'Belgian',
- },
- {
- name: 'Belize',
- code: 84,
- alpha2: 'BZ',
- alpha3: 'BLZ',
- nationality: 'Belizean',
- },
- {
- name: 'Benin',
- code: 204,
- alpha2: 'BJ',
- alpha3: 'BEN',
- nationality: 'Beninese, Beninois',
- },
- {
- name: 'Bermuda',
- code: 60,
- alpha2: 'BM',
- alpha3: 'BMU',
- nationality: 'Bermudian, Bermudan',
- },
- {
- name: 'Bhutan',
- code: 64,
- alpha2: 'BT',
- alpha3: 'BTN',
- nationality: 'Bhutanese',
- },
- {
- name: 'Bolivia (Plurinational State of)',
- alias: 'Bolivia',
- code: 68,
- alpha2: 'BO',
- alpha3: 'BOL',
- nationality: 'Bolivian',
- },
- {
- name: 'Bonaire, Sint Eustatius and Saba',
- alias: 'Bonaire',
- code: 535,
- alpha2: 'BQ',
- alpha3: 'BES',
- nationality: 'Bonaire',
- },
- {
- name: 'Bosnia and Herzegovina',
- alias: 'Bosnia',
- code: 70,
- alpha2: 'BA',
- alpha3: 'BIH',
- nationality: 'Bosnian or Herzegovinian',
- },
- {
- name: 'Botswana',
- code: 72,
- alpha2: 'BW',
- alpha3: 'BWA',
- nationality: 'Motswana, Botswanan',
- },
- {
- name: 'Bouvet Island',
- code: 74,
- alpha2: 'BV',
- alpha3: 'BVT',
- nationality: 'Bouvet Islander',
- },
- {
- name: 'Brazil',
- code: 76,
- alpha2: 'BR',
- alpha3: 'BRA',
- nationality: 'Brazilian',
- },
- {
- name: 'British Indian Ocean Territory',
- code: 86,
- alpha2: 'IO',
- alpha3: 'IOT',
- nationality: 'BIOT',
- },
- {
- name: 'Brunei Darussalam',
- alias: 'Brunei',
- code: 96,
- alpha2: 'BN',
- alpha3: 'BRN',
- nationality: 'Bruneian',
- },
- {
- name: 'Bulgaria',
- code: 100,
- alpha2: 'BG',
- alpha3: 'BGR',
- nationality: 'Bulgarian',
- },
- {
- name: 'Burkina Faso',
- code: 854,
- alpha2: 'BF',
- alpha3: 'BFA',
- nationality: 'Burkinabé',
- },
- {
- name: 'Burundi',
- code: 108,
- alpha2: 'BI',
- alpha3: 'BDI',
- nationality: 'Burundian',
- },
- {
- name: 'Cabo Verde',
- code: 132,
- alpha2: 'CV',
- alpha3: 'CPV',
- nationality: 'Cabo Verdean',
- },
- {
- name: 'Cambodia',
- code: 116,
- alpha2: 'KH',
- alpha3: 'KHM',
- nationality: 'Cambodian',
- },
- {
- name: 'Cameroon',
- code: 120,
- alpha2: 'CM',
- alpha3: 'CMR',
- nationality: 'Cameroonian',
- },
- {
- name: 'Canada',
- code: 124,
- alpha2: 'CA',
- alpha3: 'CAN',
- nationality: 'Canadian',
- },
- {
- name: 'Cayman Islands',
- code: 136,
- alpha2: 'KY',
- alpha3: 'CYM',
- nationality: 'Caymanian',
- },
- {
- name: 'Central African Republic',
- code: 140,
- alpha2: 'CF',
- alpha3: 'CAF',
- nationality: 'Central African',
- },
- {
- name: 'Chad',
- code: 148,
- alpha2: 'TD',
- alpha3: 'TCD',
- nationality: 'Chadian',
- },
- {
- name: 'Chile',
- code: 152,
- alpha2: 'CL',
- alpha3: 'CHL',
- nationality: 'Chilean',
- },
- {
- name: 'China',
- code: 156,
- alpha2: 'CN',
- alpha3: 'CHN',
- nationality: 'Chinese',
- priority: 1,
- },
- {
- name: 'Christmas Island',
- code: 162,
- alpha2: 'CX',
- alpha3: 'CXR',
- nationality: 'Christmas Islander',
- },
- {
- name: 'Cocos (Keeling) Islands',
- code: 166,
- alpha2: 'CC',
- alpha3: 'CCK',
- nationality: 'Cocos Islander, Cocos Malays',
- },
- {
- name: 'Colombia',
- code: 170,
- alpha2: 'CO',
- alpha3: 'COL',
- nationality: 'Colombian',
- },
- {
- name: 'Comoros',
- code: 174,
- alpha2: 'KM',
- alpha3: 'COM',
- nationality: 'Comoran, Comorian',
- },
- {
- name: 'Congo (Republic of the)',
- alias: 'Congo Republic',
- code: 178,
- alpha2: 'CG',
- alpha3: 'COG',
- nationality: 'Congolese',
- },
- {
- name: 'Congo (Democratic Republic of the)',
- alias: 'DR Congo',
- code: 180,
- alpha2: 'CD',
- alpha3: 'COD',
- nationality: 'Congolese',
- },
- {
- name: 'Cook Islands',
- code: 184,
- alpha2: 'CK',
- alpha3: 'COK',
- nationality: 'Cook Islander',
- },
- {
- name: 'Costa Rica',
- code: 188,
- alpha2: 'CR',
- alpha3: 'CRI',
- nationality: 'Costa Rican',
- },
- {
- name: "Côte d'Ivoire",
- code: 384,
- alpha2: 'CI',
- alpha3: 'CIV',
- nationality: 'Ivorian',
- },
- {
- name: 'Croatia',
- code: 191,
- alpha2: 'HR',
- alpha3: 'HRV',
- nationality: 'Croatian',
- },
- {
- name: 'Cuba',
- code: 192,
- alpha2: 'CU',
- alpha3: 'CUB',
- nationality: 'Cuban',
- },
- {
- name: 'Curaçao',
- code: 531,
- alpha2: 'CW',
- alpha3: 'CUW',
- nationality: 'Curaçaoan',
- },
- {
- name: 'Cyprus',
- code: 196,
- alpha2: 'CY',
- alpha3: 'CYP',
- nationality: 'Cypriot',
- },
- {
- name: 'Czech Republic',
- code: 203,
- alpha2: 'CZ',
- alpha3: 'CZE',
- nationality: 'Czech',
- },
- {
- name: 'Denmark',
- code: 208,
- alpha2: 'DK',
- alpha3: 'DNK',
- nationality: 'Danish',
- },
- {
- name: 'Djibouti',
- code: 262,
- alpha2: 'DJ',
- alpha3: 'DJI',
- nationality: 'Djiboutian',
- },
- {
- name: 'Dominica',
- code: 212,
- alpha2: 'DM',
- alpha3: 'DMA',
- nationality: 'Dominican',
- },
- {
- name: 'Dominican Republic',
- code: 214,
- alpha2: 'DO',
- alpha3: 'DOM',
- nationality: 'Dominican',
- },
- {
- name: 'Ecuador',
- code: 218,
- alpha2: 'EC',
- alpha3: 'ECU',
- nationality: 'Ecuadorian',
- },
- {
- name: 'Egypt',
- code: 818,
- alpha2: 'EG',
- alpha3: 'EGY',
- nationality: 'Egyptian',
- },
- {
- name: 'El Salvador',
- code: 222,
- alpha2: 'SV',
- alpha3: 'SLV',
- nationality: 'Salvadoran',
- },
- {
- name: 'Equatorial Guinea',
- code: 226,
- alpha2: 'GQ',
- alpha3: 'GNQ',
- nationality: 'Equatorial Guinean, Equatoguinean',
- },
- {
- name: 'Eritrea',
- code: 232,
- alpha2: 'ER',
- alpha3: 'ERI',
- nationality: 'Eritrean',
- },
- {
- name: 'Estonia',
- code: 233,
- alpha2: 'EE',
- alpha3: 'EST',
- nationality: 'Estonian',
- },
- {
- name: 'Ethiopia',
- code: 231,
- alpha2: 'ET',
- alpha3: 'ETH',
- nationality: 'Ethiopian',
- },
- {
- name: 'Falkland Islands (Malvinas)',
- alias: 'Falkland Islands',
- code: 238,
- alpha2: 'FK',
- alpha3: 'FLK',
- nationality: 'Falkland Islander',
- },
- {
- name: 'Faroe Islands',
- code: 234,
- alpha2: 'FO',
- alpha3: 'FRO',
- nationality: 'Faroese',
- },
- {
- name: 'Fiji',
- code: 242,
- alpha2: 'FJ',
- alpha3: 'FJI',
- nationality: 'Fijian',
- },
- {
- name: 'Finland',
- code: 246,
- alpha2: 'FI',
- alpha3: 'FIN',
- nationality: 'Finnish',
- },
- {
- name: 'France',
- code: 250,
- alpha2: 'FR',
- alpha3: 'FRA',
- nationality: 'French',
- },
- {
- name: 'French Guiana',
- code: 254,
- alpha2: 'GF',
- alpha3: 'GUF',
- nationality: 'French Guianese',
- },
- {
- name: 'French Polynesia',
- code: 258,
- alpha2: 'PF',
- alpha3: 'PYF',
- nationality: 'French Polynesian',
- },
- {
- name: 'French Southern Territories',
- code: 260,
- alpha2: 'TF',
- alpha3: 'ATF',
- nationality: 'French Southern Territories',
- },
- {
- name: 'Gabon',
- code: 266,
- alpha2: 'GA',
- alpha3: 'GAB',
- nationality: 'Gabonese',
- },
- {
- name: 'Gambia',
- code: 270,
- alpha2: 'GM',
- alpha3: 'GMB',
- nationality: 'Gambian',
- },
- {
- name: 'Georgia',
- code: 268,
- alpha2: 'GE',
- alpha3: 'GEO',
- nationality: 'Georgian',
- },
- {
- name: 'Germany',
- code: 276,
- alpha2: 'DE',
- alpha3: 'DEU',
- nationality: 'German',
- },
- {
- name: 'Ghana',
- code: 288,
- alpha2: 'GH',
- alpha3: 'GHA',
- nationality: 'Ghanaian',
- },
- {
- name: 'Gibraltar',
- code: 292,
- alpha2: 'GI',
- alpha3: 'GIB',
- nationality: 'Gibraltar',
- },
- {
- name: 'Greece',
- code: 300,
- alpha2: 'GR',
- alpha3: 'GRC',
- nationality: 'Greek, Hellenic',
- },
- {
- name: 'Greenland',
- code: 304,
- alpha2: 'GL',
- alpha3: 'GRL',
- nationality: 'Greenlandic',
- },
- {
- name: 'Grenada',
- code: 308,
- alpha2: 'GD',
- alpha3: 'GRD',
- nationality: 'Grenadian',
- },
- {
- name: 'Guadeloupe',
- code: 312,
- alpha2: 'GP',
- alpha3: 'GLP',
- nationality: 'Guadeloupean',
- },
- {
- name: 'Guam',
- code: 316,
- alpha2: 'GU',
- alpha3: 'GUM',
- nationality: 'Guamanian, Guambat',
- },
- {
- name: 'Guatemala',
- code: 320,
- alpha2: 'GT',
- alpha3: 'GTM',
- nationality: 'Guatemalan',
- },
- {
- name: 'Guernsey',
- code: 831,
- alpha2: 'GG',
- alpha3: 'GGY',
- nationality: 'Channel Islander',
- },
- {
- name: 'Guinea',
- code: 324,
- alpha2: 'GN',
- alpha3: 'GIN',
- nationality: 'Guinean',
- },
- {
- name: 'Guinea-Bissau',
- code: 624,
- alpha2: 'GW',
- alpha3: 'GNB',
- nationality: 'Bissau-Guinean',
- },
- {
- name: 'Guyana',
- code: 328,
- alpha2: 'GY',
- alpha3: 'GUY',
- nationality: 'Guyanese',
- },
- {
- name: 'Haiti',
- code: 332,
- alpha2: 'HT',
- alpha3: 'HTI',
- nationality: 'Haitian',
- },
- {
- name: 'Heard Island and McDonald Islands',
- code: 334,
- alpha2: 'HM',
- alpha3: 'HMD',
- nationality: 'Heard Islander, McDonald Islander',
- },
- {
- name: 'Vatican City State',
- code: 336,
- alpha2: 'VA',
- alpha3: 'VAT',
- nationality: 'Vatican',
- },
- {
- name: 'Honduras',
- code: 340,
- alpha2: 'HN',
- alpha3: 'HND',
- nationality: 'Honduran',
- },
- {
- name: 'Hong Kong',
- code: 344,
- alpha2: 'HK',
- alpha3: 'HKG',
- nationality: 'Hongkonger, Hong Konger, Hong Kongese',
- },
- {
- name: 'Hungary',
- code: 348,
- alpha2: 'HU',
- alpha3: 'HUN',
- nationality: 'Hungarian, Magyar',
- },
- {
- name: 'Iceland',
- code: 352,
- alpha2: 'IS',
- alpha3: 'ISL',
- nationality: 'Icelandic',
- },
- {
- name: 'India',
- code: 356,
- alpha2: 'IN',
- alpha3: 'IND',
- nationality: 'Indian',
- },
- {
- name: 'Indonesia',
- code: 360,
- alpha2: 'ID',
- alpha3: 'IDN',
- nationality: 'Indonesian',
- },
- {
- name: 'Iran',
- code: 364,
- alpha2: 'IR',
- alpha3: 'IRN',
- nationality: 'Iranian, Persian',
- },
- {
- name: 'Iraq',
- code: 368,
- alpha2: 'IQ',
- alpha3: 'IRQ',
- nationality: 'Iraqi',
- },
- {
- name: 'Ireland',
- code: 372,
- alpha2: 'IE',
- alpha3: 'IRL',
- nationality: 'Irish',
- },
- {
- name: 'Isle of Man',
- code: 833,
- alpha2: 'IM',
- alpha3: 'IMN',
- nationality: 'Manx',
- },
- {
- name: 'Israel',
- code: 376,
- alpha2: 'IL',
- alpha3: 'ISR',
- nationality: 'Israeli',
- },
- {
- name: 'Italy',
- code: 380,
- alpha2: 'IT',
- alpha3: 'ITA',
- nationality: 'Italian',
- },
- {
- name: 'Jamaica',
- code: 388,
- alpha2: 'JM',
- alpha3: 'JAM',
- nationality: 'Jamaican',
- },
- {
- name: 'Japan',
- code: 392,
- alpha2: 'JP',
- alpha3: 'JPN',
- nationality: 'Japanese',
- },
- {
- name: 'Jersey',
- code: 832,
- alpha2: 'JE',
- alpha3: 'JEY',
- nationality: 'Channel Island',
- },
- {
- name: 'Jordan',
- code: 400,
- alpha2: 'JO',
- alpha3: 'JOR',
- nationality: 'Jordanian',
- },
- {
- name: 'Kazakhstan',
- code: 398,
- alpha2: 'KZ',
- alpha3: 'KAZ',
- nationality: 'Kazakhstani, Kazakh',
- },
- {
- name: 'Kenya',
- code: 404,
- alpha2: 'KE',
- alpha3: 'KEN',
- nationality: 'Kenyan',
- },
- {
- name: 'Kiribati',
- code: 296,
- alpha2: 'KI',
- alpha3: 'KIR',
- nationality: 'I-Kiribati',
- },
- {
- name: "Korea (Democratic People's Republic of)",
- alias: 'North Korea',
- code: 408,
- alpha2: 'KP',
- alpha3: 'PRK',
- nationality: 'North Korean',
- },
- {
- name: 'Korea (Republic of)',
- alias: 'South Korea',
- code: 410,
- alpha2: 'KR',
- alpha3: 'KOR',
- nationality: 'South Korean',
- },
- {
- name: 'Republic of Kosovo',
- alias: 'Kosovo',
- code: 383,
- alpha2: 'XK',
- alpha3: 'UNK',
- nationality: 'Kosovan',
- },
- {
- name: 'Kuwait',
- code: 414,
- alpha2: 'KW',
- alpha3: 'KWT',
- nationality: 'Kuwaiti',
- },
- {
- name: 'Kyrgyzstan',
- code: 417,
- alpha2: 'KG',
- alpha3: 'KGZ',
- nationality: 'Kyrgyzstani, Kyrgyz, Kirgiz, Kirghiz',
- },
- {
- name: 'Lao People\'s Democratic Republic',
- alias: 'Laos',
- code: 418,
- alpha2: 'LA',
- alpha3: 'LAO',
- nationality: 'Lao, Laotian',
- },
- {
- name: 'Latvia',
- code: 428,
- alpha2: 'LV',
- alpha3: 'LVA',
- nationality: 'Latvian',
- },
- {
- name: 'Lebanon',
- code: 422,
- alpha2: 'LB',
- alpha3: 'LBN',
- nationality: 'Lebanese',
- },
- {
- name: 'Lesotho',
- code: 426,
- alpha2: 'LS',
- alpha3: 'LSO',
- nationality: 'Basotho',
- },
- {
- name: 'Liberia',
- code: 430,
- alpha2: 'LR',
- alpha3: 'LBR',
- nationality: 'Liberian',
- },
- {
- name: 'Libya',
- code: 434,
- alpha2: 'LY',
- alpha3: 'LBY',
- nationality: 'Libyan',
- },
- {
- name: 'Liechtenstein',
- code: 438,
- alpha2: 'LI',
- alpha3: 'LIE',
- nationality: 'Liechtenstein',
- },
- {
- name: 'Lithuania',
- code: 440,
- alpha2: 'LT',
- alpha3: 'LTU',
- nationality: 'Lithuanian',
- },
- {
- name: 'Luxembourg',
- code: 442,
- alpha2: 'LU',
- alpha3: 'LUX',
- nationality: 'Luxembourg, Luxembourgish',
- },
- {
- name: 'Macao',
- code: 446,
- alpha2: 'MO',
- alpha3: 'MAC',
- nationality: 'Macanese, Chinese',
- priority: 0,
- },
- {
- name: 'Macedonia (the former Yugoslav Republic of)',
- alias: 'Macedonia',
- code: 807,
- alpha2: 'MK',
- alpha3: 'MKD',
- nationality: 'Macedonian',
- },
- {
- name: 'Madagascar',
- code: 450,
- alpha2: 'MG',
- alpha3: 'MDG',
- nationality: 'Malagasy',
- },
- {
- name: 'Malawi',
- code: 454,
- alpha2: 'MW',
- alpha3: 'MWI',
- nationality: 'Malawian',
- },
- {
- name: 'Malaysia',
- code: 458,
- alpha2: 'MY',
- alpha3: 'MYS',
- nationality: 'Malaysian',
- },
- {
- name: 'Maldives',
- code: 462,
- alpha2: 'MV',
- alpha3: 'MDV',
- nationality: 'Maldivian',
- },
- {
- name: 'Mali',
- code: 466,
- alpha2: 'ML',
- alpha3: 'MLI',
- nationality: 'Malian, Malinese',
- },
- {
- name: 'Malta',
- code: 470,
- alpha2: 'MT',
- alpha3: 'MLT',
- nationality: 'Maltese',
- },
- {
- name: 'Marshall Islands',
- code: 584,
- alpha2: 'MH',
- alpha3: 'MHL',
- nationality: 'Marshallese',
- },
- {
- name: 'Martinique',
- code: 474,
- alpha2: 'MQ',
- alpha3: 'MTQ',
- nationality: 'Martiniquais, Martinican',
- },
- {
- name: 'Mauritania',
- code: 478,
- alpha2: 'MR',
- alpha3: 'MRT',
- nationality: 'Mauritanian',
- },
- {
- name: 'Mauritius',
- code: 480,
- alpha2: 'MU',
- alpha3: 'MUS',
- nationality: 'Mauritian',
- },
- {
- name: 'Mayotte',
- code: 175,
- alpha2: 'YT',
- alpha3: 'MYT',
- nationality: 'Mahoran',
- },
- {
- name: 'Mexico',
- code: 484,
- alpha2: 'MX',
- alpha3: 'MEX',
- nationality: 'Mexican',
- },
- {
- name: 'Micronesia (Federated States of)',
- alias: 'Micronesia',
- code: 583,
- alpha2: 'FM',
- alpha3: 'FSM',
- nationality: 'Micronesian',
- },
- {
- name: 'Moldova (Republic of)',
- alias: 'Moldova',
- code: 498,
- alpha2: 'MD',
- alpha3: 'MDA',
- nationality: 'Moldovan',
- },
- {
- name: 'Monaco',
- code: 492,
- alpha2: 'MC',
- alpha3: 'MCO',
- nationality: 'Monégasque, Monacan',
- },
- {
- name: 'Mongolia',
- code: 496,
- alpha2: 'MN',
- alpha3: 'MNG',
- nationality: 'Mongolian',
- },
- {
- name: 'Montenegro',
- code: 499,
- alpha2: 'ME',
- alpha3: 'MNE',
- nationality: 'Montenegrin',
- },
- {
- name: 'Montserrat',
- code: 500,
- alpha2: 'MS',
- alpha3: 'MSR',
- nationality: 'Montserratian',
- },
- {
- name: 'Morocco',
- code: 504,
- alpha2: 'MA',
- alpha3: 'MAR',
- nationality: 'Moroccan',
- },
- {
- name: 'Mozambique',
- code: 508,
- alpha2: 'MZ',
- alpha3: 'MOZ',
- nationality: 'Mozambican',
- },
- {
- name: 'Myanmar',
- code: 104,
- alpha2: 'MM',
- alpha3: 'MMR',
- nationality: 'Burmese',
- },
- {
- name: 'Namibia',
- code: 516,
- alpha2: 'NA',
- alpha3: 'NAM',
- nationality: 'Namibian',
- },
- {
- name: 'Nauru',
- code: 520,
- alpha2: 'NR',
- alpha3: 'NRU',
- nationality: 'Nauruan',
- },
- {
- name: 'Nepal',
- code: 524,
- alpha2: 'NP',
- alpha3: 'NPL',
- nationality: 'Nepali, Nepalese',
- },
- {
- name: 'Netherlands',
- code: 528,
- alpha2: 'NL',
- alpha3: 'NLD',
- nationality: 'Dutch',
- },
- {
- name: 'New Caledonia',
- code: 540,
- alpha2: 'NC',
- alpha3: 'NCL',
- nationality: 'New Caledonian',
- },
- {
- name: 'New Zealand',
- code: 554,
- alpha2: 'NZ',
- alpha3: 'NZL',
- nationality: 'New Zealander, Kiwi',
- },
- {
- name: 'Nicaragua',
- code: 558,
- alpha2: 'NI',
- alpha3: 'NIC',
- nationality: 'Nicaraguan',
- },
- {
- name: 'Niger',
- code: 562,
- alpha2: 'NE',
- alpha3: 'NER',
- nationality: 'Nigerien',
- },
- {
- name: 'Nigeria',
- code: 566,
- alpha2: 'NG',
- alpha3: 'NGA',
- nationality: 'Nigerian',
- },
- {
- name: 'Niue',
- code: 570,
- alpha2: 'NU',
- alpha3: 'NIU',
- nationality: 'Niuean',
- },
- {
- name: 'Norfolk Island',
- code: 574,
- alpha2: 'NF',
- alpha3: 'NFK',
- nationality: 'Norfolk Islander',
- },
- {
- name: 'Northern Mariana Islands',
- code: 580,
- alpha2: 'MP',
- alpha3: 'MNP',
- nationality: 'Northern Marianan',
- },
- {
- name: 'Norway',
- code: 578,
- alpha2: 'NO',
- alpha3: 'NOR',
- nationality: 'Norwegian',
- },
- {
- name: 'Oman',
- code: 512,
- alpha2: 'OM',
- alpha3: 'OMN',
- nationality: 'Omani',
- },
- {
- name: 'Pakistan',
- code: 586,
- alpha2: 'PK',
- alpha3: 'PAK',
- nationality: 'Pakistani',
- },
- {
- name: 'Palau',
- code: 585,
- alpha2: 'PW',
- alpha3: 'PLW',
- nationality: 'Palauan',
- },
- {
- name: 'Palestine, State of',
- alias: 'Palestine',
- code: 275,
- alpha2: 'PS',
- alpha3: 'PSE',
- nationality: 'Palestinian',
- },
- {
- name: 'Panama',
- code: 591,
- alpha2: 'PA',
- alpha3: 'PAN',
- nationality: 'Panamanian',
- },
- {
- name: 'Papua New Guinea',
- code: 598,
- alpha2: 'PG',
- alpha3: 'PNG',
- nationality: 'Papua New Guinean, Papuan',
- },
- {
- name: 'Paraguay',
- code: 600,
- alpha2: 'PY',
- alpha3: 'PRY',
- nationality: 'Paraguayan',
- },
- {
- name: 'Peru',
- code: 604,
- alpha2: 'PE',
- alpha3: 'PER',
- nationality: 'Peruvian',
- },
- {
- name: 'Philippines',
- code: 608,
- alpha2: 'PH',
- alpha3: 'PHL',
- nationality: 'Philippine, Filipino',
- },
- {
- name: 'Pitcairn',
- code: 612,
- alpha2: 'PN',
- alpha3: 'PCN',
- nationality: 'Pitcairn Island',
- },
- {
- name: 'Poland',
- code: 616,
- alpha2: 'PL',
- alpha3: 'POL',
- nationality: 'Polish',
- },
- {
- name: 'Portugal',
- code: 620,
- alpha2: 'PT',
- alpha3: 'PRT',
- nationality: 'Portuguese',
- },
- {
- name: 'Puerto Rico',
- code: 630,
- alpha2: 'PR',
- alpha3: 'PRI',
- nationality: 'Puerto Rican',
- },
- {
- name: 'Qatar',
- code: 634,
- alpha2: 'QA',
- alpha3: 'QAT',
- nationality: 'Qatari',
- },
- {
- name: 'Réunion',
- code: 638,
- alpha2: 'RE',
- alpha3: 'REU',
- nationality: 'Réunionese, Réunionnais',
- },
- {
- name: 'Romania',
- code: 642,
- alpha2: 'RO',
- alpha3: 'ROU',
- nationality: 'Romanian',
- },
- {
- name: 'Russian Federation',
- alias: 'Russia',
- code: 643,
- alpha2: 'RU',
- alpha3: 'RUS',
- nationality: 'Russian',
- },
- {
- name: 'Rwanda',
- code: 646,
- alpha2: 'RW',
- alpha3: 'RWA',
- nationality: 'Rwandan',
- },
- {
- name: 'Saint Barthélemy',
- code: 652,
- alpha2: 'BL',
- alpha3: 'BLM',
- nationality: 'Barthélemois',
- },
- {
- name: 'Saint Helena, Ascension and Tristan da Cunha',
- code: 654,
- alpha2: 'SH',
- alpha3: 'SHN',
- nationality: 'Saint Helenian',
- },
- {
- name: 'Saint Kitts and Nevis',
- code: 659,
- alpha2: 'KN',
- alpha3: 'KNA',
- nationality: 'Kittitian or Nevisian',
- },
- {
- name: 'Saint Lucia',
- code: 662,
- alpha2: 'LC',
- alpha3: 'LCA',
- nationality: 'Saint Lucian',
- },
- {
- name: 'Saint Martin (French part)',
- alias: 'Saint Martin',
- code: 663,
- alpha2: 'MF',
- alpha3: 'MAF',
- nationality: 'Saint-Martinoise',
- },
- {
- name: 'Saint Pierre and Miquelon',
- code: 666,
- alpha2: 'PM',
- alpha3: 'SPM',
- nationality: 'Saint-Pierrais or Miquelonnais',
- },
- {
- name: 'Saint Vincent and the Grenadines',
- code: 670,
- alpha2: 'VC',
- alpha3: 'VCT',
- nationality: 'Saint Vincentian, Vincentian',
- },
- {
- name: 'Samoa',
- code: 882,
- alpha2: 'WS',
- alpha3: 'WSM',
- nationality: 'Samoan',
- },
- {
- name: 'San Marino',
- code: 674,
- alpha2: 'SM',
- alpha3: 'SMR',
- nationality: 'Sammarinese',
- },
- {
- name: 'Sao Tome and Principe',
- code: 678,
- alpha2: 'ST',
- alpha3: 'STP',
- nationality: 'São Toméan',
- },
- {
- name: 'Saudi Arabia',
- code: 682,
- alpha2: 'SA',
- alpha3: 'SAU',
- nationality: 'Saudi, Saudi Arabian',
- },
- {
- name: 'Senegal',
- code: 686,
- alpha2: 'SN',
- alpha3: 'SEN',
- nationality: 'Senegalese',
- },
- {
- name: 'Serbia',
- code: 688,
- alpha2: 'RS',
- alpha3: 'SRB',
- nationality: 'Serbian',
- },
- {
- name: 'Seychelles',
- code: 690,
- alpha2: 'SC',
- alpha3: 'SYC',
- nationality: 'Seychellois',
- },
- {
- name: 'Sierra Leone',
- code: 694,
- alpha2: 'SL',
- alpha3: 'SLE',
- nationality: 'Sierra Leonean',
- },
- {
- name: 'Singapore',
- code: 702,
- alpha2: 'SG',
- alpha3: 'SGP',
- nationality: 'Singaporean',
- },
- {
- name: 'Sint Maarten (Dutch part)',
- alias: 'Sint Maarten',
- code: 534,
- alpha2: 'SX',
- alpha3: 'SXM',
- nationality: 'Sint Maarten',
- },
- {
- name: 'Slovakia',
- code: 703,
- alpha2: 'SK',
- alpha3: 'SVK',
- nationality: 'Slovak',
- },
- {
- name: 'Slovenia',
- code: 705,
- alpha2: 'SI',
- alpha3: 'SVN',
- nationality: 'Slovenian, Slovene',
- },
- {
- name: 'Solomon Islands',
- code: 90,
- alpha2: 'SB',
- alpha3: 'SLB',
- nationality: 'Solomon Island',
- },
- {
- name: 'Somalia',
- code: 706,
- alpha2: 'SO',
- alpha3: 'SOM',
- nationality: 'Somali, Somalian',
- },
- {
- name: 'South Africa',
- code: 710,
- alpha2: 'ZA',
- alpha3: 'ZAF',
- nationality: 'South African',
- },
- {
- name: 'South Georgia and the South Sandwich Islands',
- code: 239,
- alpha2: 'GS',
- alpha3: 'SGS',
- nationality: 'South Georgia or South Sandwich Islands',
- },
- {
- name: 'South Sudan',
- code: 728,
- alpha2: 'SS',
- alpha3: 'SSD',
- nationality: 'South Sudanese',
- },
- {
- name: 'Spain',
- code: 724,
- alpha2: 'ES',
- alpha3: 'ESP',
- nationality: 'Spanish',
- },
- {
- name: 'Sri Lanka',
- code: 144,
- alpha2: 'LK',
- alpha3: 'LKA',
- nationality: 'Sri Lankan',
- },
- {
- name: 'Sudan',
- code: 729,
- alpha2: 'SD',
- alpha3: 'SDN',
- nationality: 'Sudanese',
- },
- {
- name: 'Suriname',
- code: 740,
- alpha2: 'SR',
- alpha3: 'SUR',
- nationality: 'Surinamese',
- },
- {
- name: 'Svalbard and Jan Mayen',
- code: 744,
- alpha2: 'SJ',
- alpha3: 'SJM',
- nationality: 'Svalbard',
- },
- {
- name: 'Swaziland',
- code: 748,
- alpha2: 'SZ',
- alpha3: 'SWZ',
- nationality: 'Swazi',
- },
- {
- name: 'Sweden',
- code: 752,
- alpha2: 'SE',
- alpha3: 'SWE',
- nationality: 'Swedish',
- },
- {
- name: 'Switzerland',
- code: 756,
- alpha2: 'CH',
- alpha3: 'CHE',
- nationality: 'Swiss',
- },
- {
- name: 'Syrian Arab Republic',
- alias: 'Syria',
- code: 760,
- alpha2: 'SY',
- alpha3: 'SYR',
- nationality: 'Syrian',
- },
- {
- name: 'Taiwan, Province of China',
- alias: 'Taiwan',
- code: 158,
- alpha2: 'TW',
- alpha3: 'TWN',
- nationality: 'Chinese, Taiwanese',
- priority: 0,
- },
- {
- name: 'Tajikistan',
- code: 762,
- alpha2: 'TJ',
- alpha3: 'TJK',
- nationality: 'Tajikistani',
- },
- {
- name: 'Tanzania, United Republic of',
- alias: 'Tanzania',
- code: 834,
- alpha2: 'TZ',
- alpha3: 'TZA',
- nationality: 'Tanzanian',
- },
- {
- name: 'Thailand',
- code: 764,
- alpha2: 'TH',
- alpha3: 'THA',
- nationality: 'Thai',
- },
- {
- name: 'Timor-Leste',
- code: 626,
- alpha2: 'TL',
- alpha3: 'TLS',
- nationality: 'Timorese',
- },
- {
- name: 'Togo',
- code: 768,
- alpha2: 'TG',
- alpha3: 'TGO',
- nationality: 'Togolese',
- },
- {
- name: 'Tokelau',
- code: 772,
- alpha2: 'TK',
- alpha3: 'TKL',
- nationality: 'Tokelauan',
- },
- {
- name: 'Tonga',
- code: 776,
- alpha2: 'TO',
- alpha3: 'TON',
- nationality: 'Tongan',
- },
- {
- name: 'Trinidad and Tobago',
- code: 780,
- alpha2: 'TT',
- alpha3: 'TTO',
- nationality: 'Trinidadian or Tobagonian',
- },
- {
- name: 'Tunisia',
- code: 788,
- alpha2: 'TN',
- alpha3: 'TUN',
- nationality: 'Tunisian',
- },
- {
- name: 'Turkey',
- code: 792,
- alpha2: 'TR',
- alpha3: 'TUR',
- nationality: 'Turkish',
- },
- {
- name: 'Turkmenistan',
- code: 795,
- alpha2: 'TM',
- alpha3: 'TKM',
- nationality: 'Turkmen',
- },
- {
- name: 'Turks and Caicos Islands',
- code: 796,
- alpha2: 'TC',
- alpha3: 'TCA',
- nationality: 'Turks and Caicos Island',
- },
- {
- name: 'Tuvalu',
- code: 798,
- alpha2: 'TV',
- alpha3: 'TUV',
- nationality: 'Tuvaluan',
- },
- {
- name: 'Uganda',
- code: 800,
- alpha2: 'UG',
- alpha3: 'UGA',
- nationality: 'Ugandan',
- },
- {
- name: 'Ukraine',
- code: 804,
- alpha2: 'UA',
- alpha3: 'UKR',
- nationality: 'Ukrainian',
- },
- {
- name: 'United Arab Emirates',
- code: 784,
- alpha2: 'AE',
- alpha3: 'ARE',
- nationality: 'Emirati, Emirian, Emiri',
- },
- {
- name: 'United Kingdom of Great Britain and Northern Ireland',
- alias: 'United Kingdom',
- code: 826,
- alpha2: 'GB',
- alpha3: 'GBR',
- nationality: 'British, English',
- },
- {
- name: 'United States Minor Outlying Islands',
- code: 581,
- alpha2: 'UM',
- alpha3: 'UMI',
- nationality: 'American',
- priority: 0,
- },
- {
- name: 'United States of America',
- alias: 'United States',
- code: 840,
- alpha2: 'US',
- alpha3: 'USA',
- nationality: 'American',
- priority: 1,
- },
- {
- name: 'Uruguay',
- code: 858,
- alpha2: 'UY',
- alpha3: 'URY',
- nationality: 'Uruguayan',
- },
- {
- name: 'Uzbekistan',
- code: 860,
- alpha2: 'UZ',
- alpha3: 'UZB',
- nationality: 'Uzbekistani, Uzbek',
- },
- {
- name: 'Vanuatu',
- code: 548,
- alpha2: 'VU',
- alpha3: 'VUT',
- nationality: 'Ni-Vanuatu, Vanuatuan',
- },
- {
- name: 'Venezuela (Bolivarian Republic of)',
- alias: 'Venezuela',
- code: 862,
- alpha2: 'VE',
- alpha3: 'VEN',
- nationality: 'Venezuelan',
- },
- {
- name: 'Vietnam',
- code: 704,
- alpha2: 'VN',
- alpha3: 'VNM',
- nationality: 'Vietnamese',
- },
- {
- name: 'Virgin Islands (British)',
- code: 92,
- alpha2: 'VG',
- alpha3: 'VGB',
- nationality: 'British Virgin Island',
- },
- {
- name: 'Virgin Islands (U.S.)',
- code: 850,
- alpha2: 'VI',
- alpha3: 'VIR',
- nationality: 'U.S. Virgin Island',
- },
- {
- name: 'Wallis and Futuna',
- code: 876,
- alpha2: 'WF',
- alpha3: 'WLF',
- nationality: 'Wallis and Futuna, Wallisian or Futunan',
- },
- {
- name: 'Western Sahara',
- code: 732,
- alpha2: 'EH',
- alpha3: 'ESH',
- nationality: 'Sahrawi, Sahrawian, Sahraouian',
- },
- {
- name: 'Yemen',
- code: 887,
- alpha2: 'YE',
- alpha3: 'YEM',
- nationality: 'Yemeni',
- },
- {
- name: 'Zambia',
- code: 894,
- alpha2: 'ZM',
- alpha3: 'ZMB',
- nationality: 'Zambian',
- },
- {
- name: 'Zimbabwe',
- code: 716,
- alpha2: 'ZW',
- alpha3: 'ZWE',
- nationality: 'Zimbabwean',
- },
+ {
+ name: 'Afghanistan',
+ code: 4,
+ alpha2: 'AF',
+ alpha3: 'AFG',
+ nationality: 'Afghan',
+ },
+ {
+ name: 'Åland Islands',
+ code: 248,
+ alpha2: 'AX',
+ alpha3: 'ALA',
+ nationality: 'Åland Island',
+ },
+ {
+ name: 'Albania',
+ code: 8,
+ alpha2: 'AL',
+ alpha3: 'ALB',
+ nationality: 'Albanian',
+ },
+ {
+ name: 'Algeria',
+ code: 12,
+ alpha2: 'DZ',
+ alpha3: 'DZA',
+ nationality: 'Algerian',
+ },
+ {
+ name: 'American Samoa',
+ code: 16,
+ alpha2: 'AS',
+ alpha3: 'ASM',
+ nationality: 'American Samoan',
+ priority: 0,
+ },
+ {
+ name: 'Andorra',
+ code: 20,
+ alpha2: 'AD',
+ alpha3: 'AND',
+ nationality: 'Andorran',
+ },
+ {
+ name: 'Angola',
+ code: 24,
+ alpha2: 'AO',
+ alpha3: 'AGO',
+ nationality: 'Angolan',
+ },
+ {
+ name: 'Anguilla',
+ code: 660,
+ alpha2: 'AI',
+ alpha3: 'AIA',
+ nationality: 'Anguillan',
+ },
+ {
+ name: 'Antarctica',
+ code: 10,
+ alpha2: 'AQ',
+ alpha3: 'ATA',
+ nationality: 'Antarctic',
+ },
+ {
+ name: 'Antigua and Barbuda',
+ code: 28,
+ alpha2: 'AG',
+ alpha3: 'ATG',
+ nationality: 'Antiguan or Barbudan',
+ },
+ {
+ name: 'Argentina',
+ code: 32,
+ alpha2: 'AR',
+ alpha3: 'ARG',
+ nationality: 'Argentine, Argentinian',
+ },
+ {
+ name: 'Armenia',
+ code: 51,
+ alpha2: 'AM',
+ alpha3: 'ARM',
+ nationality: 'Armenian',
+ },
+ {
+ name: 'Aruba',
+ code: 533,
+ alpha2: 'AW',
+ alpha3: 'ABW',
+ nationality: 'Aruban',
+ },
+ {
+ name: 'Australia',
+ code: 36,
+ alpha2: 'AU',
+ alpha3: 'AUS',
+ nationality: 'Australian',
+ },
+ {
+ name: 'Austria',
+ code: 40,
+ alpha2: 'AT',
+ alpha3: 'AUT',
+ nationality: 'Austrian',
+ },
+ {
+ name: 'Azerbaijan',
+ code: 31,
+ alpha2: 'AZ',
+ alpha3: 'AZE',
+ nationality: 'Azerbaijani, Azeri',
+ },
+ {
+ name: 'Bahamas',
+ code: 44,
+ alpha2: 'BS',
+ alpha3: 'BHS',
+ nationality: 'Bahamian',
+ },
+ {
+ name: 'Bahrain',
+ code: 48,
+ alpha2: 'BH',
+ alpha3: 'BHR',
+ nationality: 'Bahraini',
+ },
+ {
+ name: 'Bangladesh',
+ code: 50,
+ alpha2: 'BD',
+ alpha3: 'BGD',
+ nationality: 'Bangladeshi',
+ },
+ {
+ name: 'Barbados',
+ code: 52,
+ alpha2: 'BB',
+ alpha3: 'BRB',
+ nationality: 'Barbadian',
+ },
+ {
+ name: 'Belarus',
+ code: 112,
+ alpha2: 'BY',
+ alpha3: 'BLR',
+ nationality: 'Belarusian',
+ },
+ {
+ name: 'Belgium',
+ code: 56,
+ alpha2: 'BE',
+ alpha3: 'BEL',
+ nationality: 'Belgian',
+ },
+ {
+ name: 'Belize',
+ code: 84,
+ alpha2: 'BZ',
+ alpha3: 'BLZ',
+ nationality: 'Belizean',
+ },
+ {
+ name: 'Benin',
+ code: 204,
+ alpha2: 'BJ',
+ alpha3: 'BEN',
+ nationality: 'Beninese, Beninois',
+ },
+ {
+ name: 'Bermuda',
+ code: 60,
+ alpha2: 'BM',
+ alpha3: 'BMU',
+ nationality: 'Bermudian, Bermudan',
+ },
+ {
+ name: 'Bhutan',
+ code: 64,
+ alpha2: 'BT',
+ alpha3: 'BTN',
+ nationality: 'Bhutanese',
+ },
+ {
+ name: 'Bolivia (Plurinational State of)',
+ alias: 'Bolivia',
+ code: 68,
+ alpha2: 'BO',
+ alpha3: 'BOL',
+ nationality: 'Bolivian',
+ },
+ {
+ name: 'Bonaire, Sint Eustatius and Saba',
+ alias: 'Bonaire',
+ code: 535,
+ alpha2: 'BQ',
+ alpha3: 'BES',
+ nationality: 'Bonaire',
+ },
+ {
+ name: 'Bosnia and Herzegovina',
+ alias: 'Bosnia',
+ code: 70,
+ alpha2: 'BA',
+ alpha3: 'BIH',
+ nationality: 'Bosnian or Herzegovinian',
+ },
+ {
+ name: 'Botswana',
+ code: 72,
+ alpha2: 'BW',
+ alpha3: 'BWA',
+ nationality: 'Motswana, Botswanan',
+ },
+ {
+ name: 'Bouvet Island',
+ code: 74,
+ alpha2: 'BV',
+ alpha3: 'BVT',
+ nationality: 'Bouvet Islander',
+ },
+ {
+ name: 'Brazil',
+ code: 76,
+ alpha2: 'BR',
+ alpha3: 'BRA',
+ nationality: 'Brazilian',
+ },
+ {
+ name: 'British Indian Ocean Territory',
+ code: 86,
+ alpha2: 'IO',
+ alpha3: 'IOT',
+ nationality: 'BIOT',
+ },
+ {
+ name: 'Brunei Darussalam',
+ alias: 'Brunei',
+ code: 96,
+ alpha2: 'BN',
+ alpha3: 'BRN',
+ nationality: 'Bruneian',
+ },
+ {
+ name: 'Bulgaria',
+ code: 100,
+ alpha2: 'BG',
+ alpha3: 'BGR',
+ nationality: 'Bulgarian',
+ },
+ {
+ name: 'Burkina Faso',
+ code: 854,
+ alpha2: 'BF',
+ alpha3: 'BFA',
+ nationality: 'Burkinabé',
+ },
+ {
+ name: 'Burundi',
+ code: 108,
+ alpha2: 'BI',
+ alpha3: 'BDI',
+ nationality: 'Burundian',
+ },
+ {
+ name: 'Cabo Verde',
+ code: 132,
+ alpha2: 'CV',
+ alpha3: 'CPV',
+ nationality: 'Cabo Verdean',
+ },
+ {
+ name: 'Cambodia',
+ code: 116,
+ alpha2: 'KH',
+ alpha3: 'KHM',
+ nationality: 'Cambodian',
+ },
+ {
+ name: 'Cameroon',
+ code: 120,
+ alpha2: 'CM',
+ alpha3: 'CMR',
+ nationality: 'Cameroonian',
+ },
+ {
+ name: 'Canada',
+ code: 124,
+ alpha2: 'CA',
+ alpha3: 'CAN',
+ nationality: 'Canadian',
+ },
+ {
+ name: 'Cayman Islands',
+ code: 136,
+ alpha2: 'KY',
+ alpha3: 'CYM',
+ nationality: 'Caymanian',
+ },
+ {
+ name: 'Central African Republic',
+ code: 140,
+ alpha2: 'CF',
+ alpha3: 'CAF',
+ nationality: 'Central African',
+ },
+ {
+ name: 'Chad',
+ code: 148,
+ alpha2: 'TD',
+ alpha3: 'TCD',
+ nationality: 'Chadian',
+ },
+ {
+ name: 'Chile',
+ code: 152,
+ alpha2: 'CL',
+ alpha3: 'CHL',
+ nationality: 'Chilean',
+ },
+ {
+ name: 'China',
+ code: 156,
+ alpha2: 'CN',
+ alpha3: 'CHN',
+ nationality: 'Chinese',
+ priority: 1,
+ },
+ {
+ name: 'Christmas Island',
+ code: 162,
+ alpha2: 'CX',
+ alpha3: 'CXR',
+ nationality: 'Christmas Islander',
+ },
+ {
+ name: 'Cocos (Keeling) Islands',
+ code: 166,
+ alpha2: 'CC',
+ alpha3: 'CCK',
+ nationality: 'Cocos Islander, Cocos Malays',
+ },
+ {
+ name: 'Colombia',
+ code: 170,
+ alpha2: 'CO',
+ alpha3: 'COL',
+ nationality: 'Colombian',
+ },
+ {
+ name: 'Comoros',
+ code: 174,
+ alpha2: 'KM',
+ alpha3: 'COM',
+ nationality: 'Comoran, Comorian',
+ },
+ {
+ name: 'Congo (Republic of the)',
+ alias: 'Congo Republic',
+ code: 178,
+ alpha2: 'CG',
+ alpha3: 'COG',
+ nationality: 'Congolese',
+ },
+ {
+ name: 'Congo (Democratic Republic of the)',
+ alias: 'DR Congo',
+ code: 180,
+ alpha2: 'CD',
+ alpha3: 'COD',
+ nationality: 'Congolese',
+ },
+ {
+ name: 'Cook Islands',
+ code: 184,
+ alpha2: 'CK',
+ alpha3: 'COK',
+ nationality: 'Cook Islander',
+ },
+ {
+ name: 'Costa Rica',
+ code: 188,
+ alpha2: 'CR',
+ alpha3: 'CRI',
+ nationality: 'Costa Rican',
+ },
+ {
+ name: "Côte d'Ivoire",
+ code: 384,
+ alpha2: 'CI',
+ alpha3: 'CIV',
+ nationality: 'Ivorian',
+ },
+ {
+ name: 'Croatia',
+ code: 191,
+ alpha2: 'HR',
+ alpha3: 'HRV',
+ nationality: 'Croatian',
+ },
+ {
+ name: 'Cuba',
+ code: 192,
+ alpha2: 'CU',
+ alpha3: 'CUB',
+ nationality: 'Cuban',
+ },
+ {
+ name: 'Curaçao',
+ code: 531,
+ alpha2: 'CW',
+ alpha3: 'CUW',
+ nationality: 'Curaçaoan',
+ },
+ {
+ name: 'Cyprus',
+ code: 196,
+ alpha2: 'CY',
+ alpha3: 'CYP',
+ nationality: 'Cypriot',
+ },
+ {
+ name: 'Czech Republic',
+ code: 203,
+ alpha2: 'CZ',
+ alpha3: 'CZE',
+ nationality: 'Czech',
+ },
+ {
+ name: 'Denmark',
+ code: 208,
+ alpha2: 'DK',
+ alpha3: 'DNK',
+ nationality: 'Danish',
+ },
+ {
+ name: 'Djibouti',
+ code: 262,
+ alpha2: 'DJ',
+ alpha3: 'DJI',
+ nationality: 'Djiboutian',
+ },
+ {
+ name: 'Dominica',
+ code: 212,
+ alpha2: 'DM',
+ alpha3: 'DMA',
+ nationality: 'Dominican',
+ },
+ {
+ name: 'Dominican Republic',
+ code: 214,
+ alpha2: 'DO',
+ alpha3: 'DOM',
+ nationality: 'Dominican',
+ },
+ {
+ name: 'Ecuador',
+ code: 218,
+ alpha2: 'EC',
+ alpha3: 'ECU',
+ nationality: 'Ecuadorian',
+ },
+ {
+ name: 'Egypt',
+ code: 818,
+ alpha2: 'EG',
+ alpha3: 'EGY',
+ nationality: 'Egyptian',
+ },
+ {
+ name: 'El Salvador',
+ code: 222,
+ alpha2: 'SV',
+ alpha3: 'SLV',
+ nationality: 'Salvadoran',
+ },
+ {
+ name: 'Equatorial Guinea',
+ code: 226,
+ alpha2: 'GQ',
+ alpha3: 'GNQ',
+ nationality: 'Equatorial Guinean, Equatoguinean',
+ },
+ {
+ name: 'Eritrea',
+ code: 232,
+ alpha2: 'ER',
+ alpha3: 'ERI',
+ nationality: 'Eritrean',
+ },
+ {
+ name: 'Estonia',
+ code: 233,
+ alpha2: 'EE',
+ alpha3: 'EST',
+ nationality: 'Estonian',
+ },
+ {
+ name: 'Ethiopia',
+ code: 231,
+ alpha2: 'ET',
+ alpha3: 'ETH',
+ nationality: 'Ethiopian',
+ },
+ {
+ name: 'Falkland Islands (Malvinas)',
+ alias: 'Falkland Islands',
+ code: 238,
+ alpha2: 'FK',
+ alpha3: 'FLK',
+ nationality: 'Falkland Islander',
+ },
+ {
+ name: 'Faroe Islands',
+ code: 234,
+ alpha2: 'FO',
+ alpha3: 'FRO',
+ nationality: 'Faroese',
+ },
+ {
+ name: 'Fiji',
+ code: 242,
+ alpha2: 'FJ',
+ alpha3: 'FJI',
+ nationality: 'Fijian',
+ },
+ {
+ name: 'Finland',
+ code: 246,
+ alpha2: 'FI',
+ alpha3: 'FIN',
+ nationality: 'Finnish',
+ },
+ {
+ name: 'France',
+ code: 250,
+ alpha2: 'FR',
+ alpha3: 'FRA',
+ nationality: 'French',
+ },
+ {
+ name: 'French Guiana',
+ code: 254,
+ alpha2: 'GF',
+ alpha3: 'GUF',
+ nationality: 'French Guianese',
+ },
+ {
+ name: 'French Polynesia',
+ code: 258,
+ alpha2: 'PF',
+ alpha3: 'PYF',
+ nationality: 'French Polynesian',
+ },
+ {
+ name: 'French Southern Territories',
+ code: 260,
+ alpha2: 'TF',
+ alpha3: 'ATF',
+ nationality: 'French Southern Territories',
+ },
+ {
+ name: 'Gabon',
+ code: 266,
+ alpha2: 'GA',
+ alpha3: 'GAB',
+ nationality: 'Gabonese',
+ },
+ {
+ name: 'Gambia',
+ code: 270,
+ alpha2: 'GM',
+ alpha3: 'GMB',
+ nationality: 'Gambian',
+ },
+ {
+ name: 'Georgia',
+ code: 268,
+ alpha2: 'GE',
+ alpha3: 'GEO',
+ nationality: 'Georgian',
+ },
+ {
+ name: 'Germany',
+ code: 276,
+ alpha2: 'DE',
+ alpha3: 'DEU',
+ nationality: 'German',
+ },
+ {
+ name: 'Ghana',
+ code: 288,
+ alpha2: 'GH',
+ alpha3: 'GHA',
+ nationality: 'Ghanaian',
+ },
+ {
+ name: 'Gibraltar',
+ code: 292,
+ alpha2: 'GI',
+ alpha3: 'GIB',
+ nationality: 'Gibraltar',
+ },
+ {
+ name: 'Greece',
+ code: 300,
+ alpha2: 'GR',
+ alpha3: 'GRC',
+ nationality: 'Greek, Hellenic',
+ },
+ {
+ name: 'Greenland',
+ code: 304,
+ alpha2: 'GL',
+ alpha3: 'GRL',
+ nationality: 'Greenlandic',
+ },
+ {
+ name: 'Grenada',
+ code: 308,
+ alpha2: 'GD',
+ alpha3: 'GRD',
+ nationality: 'Grenadian',
+ },
+ {
+ name: 'Guadeloupe',
+ code: 312,
+ alpha2: 'GP',
+ alpha3: 'GLP',
+ nationality: 'Guadeloupean',
+ },
+ {
+ name: 'Guam',
+ code: 316,
+ alpha2: 'GU',
+ alpha3: 'GUM',
+ nationality: 'Guamanian, Guambat',
+ },
+ {
+ name: 'Guatemala',
+ code: 320,
+ alpha2: 'GT',
+ alpha3: 'GTM',
+ nationality: 'Guatemalan',
+ },
+ {
+ name: 'Guernsey',
+ code: 831,
+ alpha2: 'GG',
+ alpha3: 'GGY',
+ nationality: 'Channel Islander',
+ },
+ {
+ name: 'Guinea',
+ code: 324,
+ alpha2: 'GN',
+ alpha3: 'GIN',
+ nationality: 'Guinean',
+ },
+ {
+ name: 'Guinea-Bissau',
+ code: 624,
+ alpha2: 'GW',
+ alpha3: 'GNB',
+ nationality: 'Bissau-Guinean',
+ },
+ {
+ name: 'Guyana',
+ code: 328,
+ alpha2: 'GY',
+ alpha3: 'GUY',
+ nationality: 'Guyanese',
+ },
+ {
+ name: 'Haiti',
+ code: 332,
+ alpha2: 'HT',
+ alpha3: 'HTI',
+ nationality: 'Haitian',
+ },
+ {
+ name: 'Heard Island and McDonald Islands',
+ code: 334,
+ alpha2: 'HM',
+ alpha3: 'HMD',
+ nationality: 'Heard Islander, McDonald Islander',
+ },
+ {
+ name: 'Vatican City State',
+ code: 336,
+ alpha2: 'VA',
+ alpha3: 'VAT',
+ nationality: 'Vatican',
+ },
+ {
+ name: 'Honduras',
+ code: 340,
+ alpha2: 'HN',
+ alpha3: 'HND',
+ nationality: 'Honduran',
+ },
+ {
+ name: 'Hong Kong',
+ code: 344,
+ alpha2: 'HK',
+ alpha3: 'HKG',
+ nationality: 'Hongkonger, Hong Konger, Hong Kongese',
+ },
+ {
+ name: 'Hungary',
+ code: 348,
+ alpha2: 'HU',
+ alpha3: 'HUN',
+ nationality: 'Hungarian, Magyar',
+ },
+ {
+ name: 'Iceland',
+ code: 352,
+ alpha2: 'IS',
+ alpha3: 'ISL',
+ nationality: 'Icelandic',
+ },
+ {
+ name: 'India',
+ code: 356,
+ alpha2: 'IN',
+ alpha3: 'IND',
+ nationality: 'Indian',
+ },
+ {
+ name: 'Indonesia',
+ code: 360,
+ alpha2: 'ID',
+ alpha3: 'IDN',
+ nationality: 'Indonesian',
+ },
+ {
+ name: 'Iran',
+ code: 364,
+ alpha2: 'IR',
+ alpha3: 'IRN',
+ nationality: 'Iranian, Persian',
+ },
+ {
+ name: 'Iraq',
+ code: 368,
+ alpha2: 'IQ',
+ alpha3: 'IRQ',
+ nationality: 'Iraqi',
+ },
+ {
+ name: 'Ireland',
+ code: 372,
+ alpha2: 'IE',
+ alpha3: 'IRL',
+ nationality: 'Irish',
+ },
+ {
+ name: 'Isle of Man',
+ code: 833,
+ alpha2: 'IM',
+ alpha3: 'IMN',
+ nationality: 'Manx',
+ },
+ {
+ name: 'Israel',
+ code: 376,
+ alpha2: 'IL',
+ alpha3: 'ISR',
+ nationality: 'Israeli',
+ },
+ {
+ name: 'Italy',
+ code: 380,
+ alpha2: 'IT',
+ alpha3: 'ITA',
+ nationality: 'Italian',
+ },
+ {
+ name: 'Jamaica',
+ code: 388,
+ alpha2: 'JM',
+ alpha3: 'JAM',
+ nationality: 'Jamaican',
+ },
+ {
+ name: 'Japan',
+ code: 392,
+ alpha2: 'JP',
+ alpha3: 'JPN',
+ nationality: 'Japanese',
+ },
+ {
+ name: 'Jersey',
+ code: 832,
+ alpha2: 'JE',
+ alpha3: 'JEY',
+ nationality: 'Channel Island',
+ },
+ {
+ name: 'Jordan',
+ code: 400,
+ alpha2: 'JO',
+ alpha3: 'JOR',
+ nationality: 'Jordanian',
+ },
+ {
+ name: 'Kazakhstan',
+ code: 398,
+ alpha2: 'KZ',
+ alpha3: 'KAZ',
+ nationality: 'Kazakhstani, Kazakh',
+ },
+ {
+ name: 'Kenya',
+ code: 404,
+ alpha2: 'KE',
+ alpha3: 'KEN',
+ nationality: 'Kenyan',
+ },
+ {
+ name: 'Kiribati',
+ code: 296,
+ alpha2: 'KI',
+ alpha3: 'KIR',
+ nationality: 'I-Kiribati',
+ },
+ {
+ name: "Korea (Democratic People's Republic of)",
+ alias: 'North Korea',
+ code: 408,
+ alpha2: 'KP',
+ alpha3: 'PRK',
+ nationality: 'North Korean',
+ },
+ {
+ name: 'Korea (Republic of)',
+ alias: 'South Korea',
+ code: 410,
+ alpha2: 'KR',
+ alpha3: 'KOR',
+ nationality: 'South Korean',
+ },
+ {
+ name: 'Republic of Kosovo',
+ alias: 'Kosovo',
+ code: 383,
+ alpha2: 'XK',
+ alpha3: 'UNK',
+ nationality: 'Kosovan',
+ },
+ {
+ name: 'Kuwait',
+ code: 414,
+ alpha2: 'KW',
+ alpha3: 'KWT',
+ nationality: 'Kuwaiti',
+ },
+ {
+ name: 'Kyrgyzstan',
+ code: 417,
+ alpha2: 'KG',
+ alpha3: 'KGZ',
+ nationality: 'Kyrgyzstani, Kyrgyz, Kirgiz, Kirghiz',
+ },
+ {
+ name: 'Lao People\'s Democratic Republic',
+ alias: 'Laos',
+ code: 418,
+ alpha2: 'LA',
+ alpha3: 'LAO',
+ nationality: 'Lao, Laotian',
+ },
+ {
+ name: 'Latvia',
+ code: 428,
+ alpha2: 'LV',
+ alpha3: 'LVA',
+ nationality: 'Latvian',
+ },
+ {
+ name: 'Lebanon',
+ code: 422,
+ alpha2: 'LB',
+ alpha3: 'LBN',
+ nationality: 'Lebanese',
+ },
+ {
+ name: 'Lesotho',
+ code: 426,
+ alpha2: 'LS',
+ alpha3: 'LSO',
+ nationality: 'Basotho',
+ },
+ {
+ name: 'Liberia',
+ code: 430,
+ alpha2: 'LR',
+ alpha3: 'LBR',
+ nationality: 'Liberian',
+ },
+ {
+ name: 'Libya',
+ code: 434,
+ alpha2: 'LY',
+ alpha3: 'LBY',
+ nationality: 'Libyan',
+ },
+ {
+ name: 'Liechtenstein',
+ code: 438,
+ alpha2: 'LI',
+ alpha3: 'LIE',
+ nationality: 'Liechtenstein',
+ },
+ {
+ name: 'Lithuania',
+ code: 440,
+ alpha2: 'LT',
+ alpha3: 'LTU',
+ nationality: 'Lithuanian',
+ },
+ {
+ name: 'Luxembourg',
+ code: 442,
+ alpha2: 'LU',
+ alpha3: 'LUX',
+ nationality: 'Luxembourg, Luxembourgish',
+ },
+ {
+ name: 'Macao',
+ code: 446,
+ alpha2: 'MO',
+ alpha3: 'MAC',
+ nationality: 'Macanese, Chinese',
+ priority: 0,
+ },
+ {
+ name: 'Macedonia (the former Yugoslav Republic of)',
+ alias: 'Macedonia',
+ code: 807,
+ alpha2: 'MK',
+ alpha3: 'MKD',
+ nationality: 'Macedonian',
+ },
+ {
+ name: 'Madagascar',
+ code: 450,
+ alpha2: 'MG',
+ alpha3: 'MDG',
+ nationality: 'Malagasy',
+ },
+ {
+ name: 'Malawi',
+ code: 454,
+ alpha2: 'MW',
+ alpha3: 'MWI',
+ nationality: 'Malawian',
+ },
+ {
+ name: 'Malaysia',
+ code: 458,
+ alpha2: 'MY',
+ alpha3: 'MYS',
+ nationality: 'Malaysian',
+ },
+ {
+ name: 'Maldives',
+ code: 462,
+ alpha2: 'MV',
+ alpha3: 'MDV',
+ nationality: 'Maldivian',
+ },
+ {
+ name: 'Mali',
+ code: 466,
+ alpha2: 'ML',
+ alpha3: 'MLI',
+ nationality: 'Malian, Malinese',
+ },
+ {
+ name: 'Malta',
+ code: 470,
+ alpha2: 'MT',
+ alpha3: 'MLT',
+ nationality: 'Maltese',
+ },
+ {
+ name: 'Marshall Islands',
+ code: 584,
+ alpha2: 'MH',
+ alpha3: 'MHL',
+ nationality: 'Marshallese',
+ },
+ {
+ name: 'Martinique',
+ code: 474,
+ alpha2: 'MQ',
+ alpha3: 'MTQ',
+ nationality: 'Martiniquais, Martinican',
+ },
+ {
+ name: 'Mauritania',
+ code: 478,
+ alpha2: 'MR',
+ alpha3: 'MRT',
+ nationality: 'Mauritanian',
+ },
+ {
+ name: 'Mauritius',
+ code: 480,
+ alpha2: 'MU',
+ alpha3: 'MUS',
+ nationality: 'Mauritian',
+ },
+ {
+ name: 'Mayotte',
+ code: 175,
+ alpha2: 'YT',
+ alpha3: 'MYT',
+ nationality: 'Mahoran',
+ },
+ {
+ name: 'Mexico',
+ code: 484,
+ alpha2: 'MX',
+ alpha3: 'MEX',
+ nationality: 'Mexican',
+ },
+ {
+ name: 'Micronesia (Federated States of)',
+ alias: 'Micronesia',
+ code: 583,
+ alpha2: 'FM',
+ alpha3: 'FSM',
+ nationality: 'Micronesian',
+ },
+ {
+ name: 'Moldova (Republic of)',
+ alias: 'Moldova',
+ code: 498,
+ alpha2: 'MD',
+ alpha3: 'MDA',
+ nationality: 'Moldovan',
+ },
+ {
+ name: 'Monaco',
+ code: 492,
+ alpha2: 'MC',
+ alpha3: 'MCO',
+ nationality: 'Monégasque, Monacan',
+ },
+ {
+ name: 'Mongolia',
+ code: 496,
+ alpha2: 'MN',
+ alpha3: 'MNG',
+ nationality: 'Mongolian',
+ },
+ {
+ name: 'Montenegro',
+ code: 499,
+ alpha2: 'ME',
+ alpha3: 'MNE',
+ nationality: 'Montenegrin',
+ },
+ {
+ name: 'Montserrat',
+ code: 500,
+ alpha2: 'MS',
+ alpha3: 'MSR',
+ nationality: 'Montserratian',
+ },
+ {
+ name: 'Morocco',
+ code: 504,
+ alpha2: 'MA',
+ alpha3: 'MAR',
+ nationality: 'Moroccan',
+ },
+ {
+ name: 'Mozambique',
+ code: 508,
+ alpha2: 'MZ',
+ alpha3: 'MOZ',
+ nationality: 'Mozambican',
+ },
+ {
+ name: 'Myanmar',
+ code: 104,
+ alpha2: 'MM',
+ alpha3: 'MMR',
+ nationality: 'Burmese',
+ },
+ {
+ name: 'Namibia',
+ code: 516,
+ alpha2: 'NA',
+ alpha3: 'NAM',
+ nationality: 'Namibian',
+ },
+ {
+ name: 'Nauru',
+ code: 520,
+ alpha2: 'NR',
+ alpha3: 'NRU',
+ nationality: 'Nauruan',
+ },
+ {
+ name: 'Nepal',
+ code: 524,
+ alpha2: 'NP',
+ alpha3: 'NPL',
+ nationality: 'Nepali, Nepalese',
+ },
+ {
+ name: 'Netherlands',
+ code: 528,
+ alpha2: 'NL',
+ alpha3: 'NLD',
+ nationality: 'Dutch',
+ },
+ {
+ name: 'New Caledonia',
+ code: 540,
+ alpha2: 'NC',
+ alpha3: 'NCL',
+ nationality: 'New Caledonian',
+ },
+ {
+ name: 'New Zealand',
+ code: 554,
+ alpha2: 'NZ',
+ alpha3: 'NZL',
+ nationality: 'New Zealander, Kiwi',
+ },
+ {
+ name: 'Nicaragua',
+ code: 558,
+ alpha2: 'NI',
+ alpha3: 'NIC',
+ nationality: 'Nicaraguan',
+ },
+ {
+ name: 'Niger',
+ code: 562,
+ alpha2: 'NE',
+ alpha3: 'NER',
+ nationality: 'Nigerien',
+ },
+ {
+ name: 'Nigeria',
+ code: 566,
+ alpha2: 'NG',
+ alpha3: 'NGA',
+ nationality: 'Nigerian',
+ },
+ {
+ name: 'Niue',
+ code: 570,
+ alpha2: 'NU',
+ alpha3: 'NIU',
+ nationality: 'Niuean',
+ },
+ {
+ name: 'Norfolk Island',
+ code: 574,
+ alpha2: 'NF',
+ alpha3: 'NFK',
+ nationality: 'Norfolk Islander',
+ },
+ {
+ name: 'Northern Mariana Islands',
+ code: 580,
+ alpha2: 'MP',
+ alpha3: 'MNP',
+ nationality: 'Northern Marianan',
+ },
+ {
+ name: 'Norway',
+ code: 578,
+ alpha2: 'NO',
+ alpha3: 'NOR',
+ nationality: 'Norwegian',
+ },
+ {
+ name: 'Oman',
+ code: 512,
+ alpha2: 'OM',
+ alpha3: 'OMN',
+ nationality: 'Omani',
+ },
+ {
+ name: 'Pakistan',
+ code: 586,
+ alpha2: 'PK',
+ alpha3: 'PAK',
+ nationality: 'Pakistani',
+ },
+ {
+ name: 'Palau',
+ code: 585,
+ alpha2: 'PW',
+ alpha3: 'PLW',
+ nationality: 'Palauan',
+ },
+ {
+ name: 'Palestine, State of',
+ alias: 'Palestine',
+ code: 275,
+ alpha2: 'PS',
+ alpha3: 'PSE',
+ nationality: 'Palestinian',
+ },
+ {
+ name: 'Panama',
+ code: 591,
+ alpha2: 'PA',
+ alpha3: 'PAN',
+ nationality: 'Panamanian',
+ },
+ {
+ name: 'Papua New Guinea',
+ code: 598,
+ alpha2: 'PG',
+ alpha3: 'PNG',
+ nationality: 'Papua New Guinean, Papuan',
+ },
+ {
+ name: 'Paraguay',
+ code: 600,
+ alpha2: 'PY',
+ alpha3: 'PRY',
+ nationality: 'Paraguayan',
+ },
+ {
+ name: 'Peru',
+ code: 604,
+ alpha2: 'PE',
+ alpha3: 'PER',
+ nationality: 'Peruvian',
+ },
+ {
+ name: 'Philippines',
+ code: 608,
+ alpha2: 'PH',
+ alpha3: 'PHL',
+ nationality: 'Philippine, Filipino',
+ },
+ {
+ name: 'Pitcairn',
+ code: 612,
+ alpha2: 'PN',
+ alpha3: 'PCN',
+ nationality: 'Pitcairn Island',
+ },
+ {
+ name: 'Poland',
+ code: 616,
+ alpha2: 'PL',
+ alpha3: 'POL',
+ nationality: 'Polish',
+ },
+ {
+ name: 'Portugal',
+ code: 620,
+ alpha2: 'PT',
+ alpha3: 'PRT',
+ nationality: 'Portuguese',
+ },
+ {
+ name: 'Puerto Rico',
+ code: 630,
+ alpha2: 'PR',
+ alpha3: 'PRI',
+ nationality: 'Puerto Rican',
+ },
+ {
+ name: 'Qatar',
+ code: 634,
+ alpha2: 'QA',
+ alpha3: 'QAT',
+ nationality: 'Qatari',
+ },
+ {
+ name: 'Réunion',
+ code: 638,
+ alpha2: 'RE',
+ alpha3: 'REU',
+ nationality: 'Réunionese, Réunionnais',
+ },
+ {
+ name: 'Romania',
+ code: 642,
+ alpha2: 'RO',
+ alpha3: 'ROU',
+ nationality: 'Romanian',
+ },
+ {
+ name: 'Russian Federation',
+ alias: 'Russia',
+ code: 643,
+ alpha2: 'RU',
+ alpha3: 'RUS',
+ nationality: 'Russian',
+ },
+ {
+ name: 'Rwanda',
+ code: 646,
+ alpha2: 'RW',
+ alpha3: 'RWA',
+ nationality: 'Rwandan',
+ },
+ {
+ name: 'Saint Barthélemy',
+ code: 652,
+ alpha2: 'BL',
+ alpha3: 'BLM',
+ nationality: 'Barthélemois',
+ },
+ {
+ name: 'Saint Helena, Ascension and Tristan da Cunha',
+ code: 654,
+ alpha2: 'SH',
+ alpha3: 'SHN',
+ nationality: 'Saint Helenian',
+ },
+ {
+ name: 'Saint Kitts and Nevis',
+ code: 659,
+ alpha2: 'KN',
+ alpha3: 'KNA',
+ nationality: 'Kittitian or Nevisian',
+ },
+ {
+ name: 'Saint Lucia',
+ code: 662,
+ alpha2: 'LC',
+ alpha3: 'LCA',
+ nationality: 'Saint Lucian',
+ },
+ {
+ name: 'Saint Martin (French part)',
+ alias: 'Saint Martin',
+ code: 663,
+ alpha2: 'MF',
+ alpha3: 'MAF',
+ nationality: 'Saint-Martinoise',
+ },
+ {
+ name: 'Saint Pierre and Miquelon',
+ code: 666,
+ alpha2: 'PM',
+ alpha3: 'SPM',
+ nationality: 'Saint-Pierrais or Miquelonnais',
+ },
+ {
+ name: 'Saint Vincent and the Grenadines',
+ code: 670,
+ alpha2: 'VC',
+ alpha3: 'VCT',
+ nationality: 'Saint Vincentian, Vincentian',
+ },
+ {
+ name: 'Samoa',
+ code: 882,
+ alpha2: 'WS',
+ alpha3: 'WSM',
+ nationality: 'Samoan',
+ },
+ {
+ name: 'San Marino',
+ code: 674,
+ alpha2: 'SM',
+ alpha3: 'SMR',
+ nationality: 'Sammarinese',
+ },
+ {
+ name: 'Sao Tome and Principe',
+ code: 678,
+ alpha2: 'ST',
+ alpha3: 'STP',
+ nationality: 'São Toméan',
+ },
+ {
+ name: 'Saudi Arabia',
+ code: 682,
+ alpha2: 'SA',
+ alpha3: 'SAU',
+ nationality: 'Saudi, Saudi Arabian',
+ },
+ {
+ name: 'Senegal',
+ code: 686,
+ alpha2: 'SN',
+ alpha3: 'SEN',
+ nationality: 'Senegalese',
+ },
+ {
+ name: 'Serbia',
+ code: 688,
+ alpha2: 'RS',
+ alpha3: 'SRB',
+ nationality: 'Serbian',
+ },
+ {
+ name: 'Seychelles',
+ code: 690,
+ alpha2: 'SC',
+ alpha3: 'SYC',
+ nationality: 'Seychellois',
+ },
+ {
+ name: 'Sierra Leone',
+ code: 694,
+ alpha2: 'SL',
+ alpha3: 'SLE',
+ nationality: 'Sierra Leonean',
+ },
+ {
+ name: 'Singapore',
+ code: 702,
+ alpha2: 'SG',
+ alpha3: 'SGP',
+ nationality: 'Singaporean',
+ },
+ {
+ name: 'Sint Maarten (Dutch part)',
+ alias: 'Sint Maarten',
+ code: 534,
+ alpha2: 'SX',
+ alpha3: 'SXM',
+ nationality: 'Sint Maarten',
+ },
+ {
+ name: 'Slovakia',
+ code: 703,
+ alpha2: 'SK',
+ alpha3: 'SVK',
+ nationality: 'Slovak',
+ },
+ {
+ name: 'Slovenia',
+ code: 705,
+ alpha2: 'SI',
+ alpha3: 'SVN',
+ nationality: 'Slovenian, Slovene',
+ },
+ {
+ name: 'Solomon Islands',
+ code: 90,
+ alpha2: 'SB',
+ alpha3: 'SLB',
+ nationality: 'Solomon Island',
+ },
+ {
+ name: 'Somalia',
+ code: 706,
+ alpha2: 'SO',
+ alpha3: 'SOM',
+ nationality: 'Somali, Somalian',
+ },
+ {
+ name: 'South Africa',
+ code: 710,
+ alpha2: 'ZA',
+ alpha3: 'ZAF',
+ nationality: 'South African',
+ },
+ {
+ name: 'South Georgia and the South Sandwich Islands',
+ code: 239,
+ alpha2: 'GS',
+ alpha3: 'SGS',
+ nationality: 'South Georgia or South Sandwich Islands',
+ },
+ {
+ name: 'South Sudan',
+ code: 728,
+ alpha2: 'SS',
+ alpha3: 'SSD',
+ nationality: 'South Sudanese',
+ },
+ {
+ name: 'Spain',
+ code: 724,
+ alpha2: 'ES',
+ alpha3: 'ESP',
+ nationality: 'Spanish',
+ },
+ {
+ name: 'Sri Lanka',
+ code: 144,
+ alpha2: 'LK',
+ alpha3: 'LKA',
+ nationality: 'Sri Lankan',
+ },
+ {
+ name: 'Sudan',
+ code: 729,
+ alpha2: 'SD',
+ alpha3: 'SDN',
+ nationality: 'Sudanese',
+ },
+ {
+ name: 'Suriname',
+ code: 740,
+ alpha2: 'SR',
+ alpha3: 'SUR',
+ nationality: 'Surinamese',
+ },
+ {
+ name: 'Svalbard and Jan Mayen',
+ code: 744,
+ alpha2: 'SJ',
+ alpha3: 'SJM',
+ nationality: 'Svalbard',
+ },
+ {
+ name: 'Swaziland',
+ code: 748,
+ alpha2: 'SZ',
+ alpha3: 'SWZ',
+ nationality: 'Swazi',
+ },
+ {
+ name: 'Sweden',
+ code: 752,
+ alpha2: 'SE',
+ alpha3: 'SWE',
+ nationality: 'Swedish',
+ },
+ {
+ name: 'Switzerland',
+ code: 756,
+ alpha2: 'CH',
+ alpha3: 'CHE',
+ nationality: 'Swiss',
+ },
+ {
+ name: 'Syrian Arab Republic',
+ alias: 'Syria',
+ code: 760,
+ alpha2: 'SY',
+ alpha3: 'SYR',
+ nationality: 'Syrian',
+ },
+ {
+ name: 'Taiwan, Province of China',
+ alias: 'Taiwan',
+ code: 158,
+ alpha2: 'TW',
+ alpha3: 'TWN',
+ nationality: 'Chinese, Taiwanese',
+ priority: 0,
+ },
+ {
+ name: 'Tajikistan',
+ code: 762,
+ alpha2: 'TJ',
+ alpha3: 'TJK',
+ nationality: 'Tajikistani',
+ },
+ {
+ name: 'Tanzania, United Republic of',
+ alias: 'Tanzania',
+ code: 834,
+ alpha2: 'TZ',
+ alpha3: 'TZA',
+ nationality: 'Tanzanian',
+ },
+ {
+ name: 'Thailand',
+ code: 764,
+ alpha2: 'TH',
+ alpha3: 'THA',
+ nationality: 'Thai',
+ },
+ {
+ name: 'Timor-Leste',
+ code: 626,
+ alpha2: 'TL',
+ alpha3: 'TLS',
+ nationality: 'Timorese',
+ },
+ {
+ name: 'Togo',
+ code: 768,
+ alpha2: 'TG',
+ alpha3: 'TGO',
+ nationality: 'Togolese',
+ },
+ {
+ name: 'Tokelau',
+ code: 772,
+ alpha2: 'TK',
+ alpha3: 'TKL',
+ nationality: 'Tokelauan',
+ },
+ {
+ name: 'Tonga',
+ code: 776,
+ alpha2: 'TO',
+ alpha3: 'TON',
+ nationality: 'Tongan',
+ },
+ {
+ name: 'Trinidad and Tobago',
+ code: 780,
+ alpha2: 'TT',
+ alpha3: 'TTO',
+ nationality: 'Trinidadian or Tobagonian',
+ },
+ {
+ name: 'Tunisia',
+ code: 788,
+ alpha2: 'TN',
+ alpha3: 'TUN',
+ nationality: 'Tunisian',
+ },
+ {
+ name: 'Turkey',
+ code: 792,
+ alpha2: 'TR',
+ alpha3: 'TUR',
+ nationality: 'Turkish',
+ },
+ {
+ name: 'Turkmenistan',
+ code: 795,
+ alpha2: 'TM',
+ alpha3: 'TKM',
+ nationality: 'Turkmen',
+ },
+ {
+ name: 'Turks and Caicos Islands',
+ code: 796,
+ alpha2: 'TC',
+ alpha3: 'TCA',
+ nationality: 'Turks and Caicos Island',
+ },
+ {
+ name: 'Tuvalu',
+ code: 798,
+ alpha2: 'TV',
+ alpha3: 'TUV',
+ nationality: 'Tuvaluan',
+ },
+ {
+ name: 'Uganda',
+ code: 800,
+ alpha2: 'UG',
+ alpha3: 'UGA',
+ nationality: 'Ugandan',
+ },
+ {
+ name: 'Ukraine',
+ code: 804,
+ alpha2: 'UA',
+ alpha3: 'UKR',
+ nationality: 'Ukrainian',
+ },
+ {
+ name: 'United Arab Emirates',
+ code: 784,
+ alpha2: 'AE',
+ alpha3: 'ARE',
+ nationality: 'Emirati, Emirian, Emiri',
+ },
+ {
+ name: 'United Kingdom of Great Britain and Northern Ireland',
+ alias: 'United Kingdom',
+ code: 826,
+ alpha2: 'GB',
+ alpha3: 'GBR',
+ nationality: 'British, English',
+ },
+ {
+ name: 'United States Minor Outlying Islands',
+ code: 581,
+ alpha2: 'UM',
+ alpha3: 'UMI',
+ nationality: 'American',
+ priority: 0,
+ },
+ {
+ name: 'United States of America',
+ alias: 'United States',
+ code: 840,
+ alpha2: 'US',
+ alpha3: 'USA',
+ nationality: 'American',
+ priority: 1,
+ },
+ {
+ name: 'Uruguay',
+ code: 858,
+ alpha2: 'UY',
+ alpha3: 'URY',
+ nationality: 'Uruguayan',
+ },
+ {
+ name: 'Uzbekistan',
+ code: 860,
+ alpha2: 'UZ',
+ alpha3: 'UZB',
+ nationality: 'Uzbekistani, Uzbek',
+ },
+ {
+ name: 'Vanuatu',
+ code: 548,
+ alpha2: 'VU',
+ alpha3: 'VUT',
+ nationality: 'Ni-Vanuatu, Vanuatuan',
+ },
+ {
+ name: 'Venezuela (Bolivarian Republic of)',
+ alias: 'Venezuela',
+ code: 862,
+ alpha2: 'VE',
+ alpha3: 'VEN',
+ nationality: 'Venezuelan',
+ },
+ {
+ name: 'Vietnam',
+ code: 704,
+ alpha2: 'VN',
+ alpha3: 'VNM',
+ nationality: 'Vietnamese',
+ },
+ {
+ name: 'Virgin Islands (British)',
+ code: 92,
+ alpha2: 'VG',
+ alpha3: 'VGB',
+ nationality: 'British Virgin Island',
+ },
+ {
+ name: 'Virgin Islands (U.S.)',
+ code: 850,
+ alpha2: 'VI',
+ alpha3: 'VIR',
+ nationality: 'U.S. Virgin Island',
+ },
+ {
+ name: 'Wallis and Futuna',
+ code: 876,
+ alpha2: 'WF',
+ alpha3: 'WLF',
+ nationality: 'Wallis and Futuna, Wallisian or Futunan',
+ },
+ {
+ name: 'Western Sahara',
+ code: 732,
+ alpha2: 'EH',
+ alpha3: 'ESH',
+ nationality: 'Sahrawi, Sahrawian, Sahraouian',
+ },
+ {
+ name: 'Yemen',
+ code: 887,
+ alpha2: 'YE',
+ alpha3: 'YEM',
+ nationality: 'Yemeni',
+ },
+ {
+ name: 'Zambia',
+ code: 894,
+ alpha2: 'ZM',
+ alpha3: 'ZMB',
+ nationality: 'Zambian',
+ },
+ {
+ name: 'Zimbabwe',
+ code: 716,
+ alpha2: 'ZW',
+ alpha3: 'ZWE',
+ nationality: 'Zimbabwean',
+ },
];
exports.seed = knex => knex('countries')
- .then(async () => upsert('countries', countries, 'alpha2', knex));
+ .then(async () => upsert('countries', countries, 'alpha2', knex));
diff --git a/src/actors.js b/src/actors.js
index b5fe37b7..508dac36 100644
--- a/src/actors.js
+++ b/src/actors.js
@@ -20,11 +20,56 @@ const slugify = require('./utils/slugify');
const capitalize = require('./utils/capitalize');
const resolvePlace = require('./utils/resolve-place');
+const hairColors = {
+ 'jet-black': 'black',
+ 'red-head': 'red',
+ 'soft-black': 'black',
+ black: 'black',
+ blonde: 'blonde',
+ blondie: 'blonde',
+ brown: 'brown',
+ brunette: 'brown',
+ fair: 'blonde',
+ raven: 'black',
+ red: 'red',
+ redhead: 'red',
+};
+
+const eyeColors = {
+ blue: 'blue',
+ brown: 'brown',
+ dark: 'brown',
+ gray: 'gray',
+ green: 'green',
+ grey: 'gray',
+ hazel: 'hazel',
+};
+
+const ethnicities = {
+ 'african american': 'black',
+ 'african-american': 'black',
+ 'native american': 'native american',
+ african: 'black',
+ aravic: 'arabic',
+ asian: 'asian',
+ black: 'black',
+ caucasian: 'white',
+ european: 'white',
+ hispanic: 'latina',
+ indian: 'indian',
+ japanese: 'japanese',
+ latina: 'latina',
+ latino: 'latino',
+ white: 'white',
+};
+
function getMostFrequent(items) {
const { mostFrequent } = items.reduce((acc, item) => {
- acc.counts[item] = (acc.counts[item] || 0) + 1;
+ const slug = slugify(item);
- if (!acc.mostFrequent || acc.counts[item] > acc.counts[acc.mostFrequent]) {
+ acc.counts[slug] = (acc.counts[slug] || 0) + 1;
+
+ if (!acc.mostFrequent || acc.counts[slug] > acc.counts[slugify(acc.mostFrequent)]) {
acc.mostFrequent = item;
}
@@ -144,9 +189,11 @@ async function curateProfile(profile) {
curatedProfile.description = profile.description?.trim() || null;
curatedProfile.nationality = profile.nationality?.trim() || null; // used to derive country when country not available
- curatedProfile.ethnicity = profile.ethnicity?.trim() || null;
- curatedProfile.hair = profile.hair?.trim() || null;
- curatedProfile.eyes = profile.eyes?.trim() || null;
+
+ curatedProfile.ethnicity = ethnicities[profile.ethnicity?.trim().toLowerCase()] || null;
+ curatedProfile.hair = hairColors[profile.hair?.trim().toLowerCase()] || null;
+ curatedProfile.eyes = eyeColors[profile.eyes?.trim().toLowerCase()] || null;
+
curatedProfile.tattoos = profile.tattoos?.trim() || null;
curatedProfile.piercings = profile.piercings?.trim() || null;
@@ -211,6 +258,10 @@ async function curateProfile(profile) {
curatedProfile.releases = toBaseReleases(profile.releases);
+ if (profile.ethnicity && !curatedProfile.ethnicity) logger.warn(`Unrecognized ethnicity returned by '${profile.site?.name || profile.network?.slug}' scraper: ${profile.ethnicity}`);
+ if (profile.hair && !curatedProfile.hair) logger.warn(`Unrecognized hair color returned by '${profile.site?.name || profile.network?.slug}' scraper: ${profile.hair}`);
+ if (profile.eyes && !curatedProfile.eyes) logger.warn(`Unrecognized eye color returned by '${profile.site?.name || profile.network?.slug}' scraper: ${profile.eyes}`);
+
return curatedProfile;
} catch (error) {
logger.error(`Failed to curate '${profile.name}': ${error.message}`);
@@ -234,15 +285,28 @@ async function interpolateProfiles(actors) {
}), {});
const interpolatedProfiles = Object.entries(profilesByActorId).map(([actorId, actorProfiles]) => {
+ // group values from each profile
const valuesByProperty = actorProfiles.reduce((acc, profile) => Object
.entries(profile)
.reduce((profileAcc, [property, value]) => ({
...profileAcc,
[property]: [
...(acc[property] || []),
- ...(value === null ? [] : [value]),
+ ...(value === null ? [] : Array.from({ length: profile.priority }, () => value)), // multiply by priority, increasing the odds of being the most frequent value
],
- }), {}), {});
+ }), {
+ // bundle location values so they can be assessed together, to ensure the most frequent city is in the most frequent state is in most frequent country
+ origin: [...acc.origin || [], {
+ ...(profile.birth_country_alpha2 && { country: profile.birth_country_alpha2 }),
+ ...(profile.birth_state && { state: profile.birth_state }),
+ ...(profile.birth_city && { city: profile.birth_city }),
+ }].filter(location => Object.keys(location).length > 0),
+ residence: [...acc.residence || [], {
+ ...(profile.residence_country_alpha2 && { country: profile.residence_country_alpha2 }),
+ ...(profile.residence_state && { state: profile.residence_state }),
+ ...(profile.residence_city && { city: profile.residence_city }),
+ }].filter(location => Object.keys(location).length > 0),
+ }), {});
const avatars = actorProfiles.map(profile => profile.avatar_media_id && ({
id: profile.avatar_media_id,
@@ -251,39 +315,50 @@ async function interpolateProfiles(actors) {
size: profile.avatar_size,
})).filter(Boolean);
+ const mostFrequentValues = [
+ 'gender',
+ 'ethnicity',
+ 'cup',
+ 'bust',
+ 'waist',
+ 'hip',
+ 'natural_boobs',
+ 'height',
+ 'hair',
+ 'eyes',
+ 'has_tattoos',
+ 'has_piercings',
+ ].reduce((acc, property) => ({
+ ...acc,
+ [property]: getMostFrequent(valuesByProperty[property]),
+ }), {});
+
const profile = {
id: actorId,
+ ...mostFrequentValues,
};
- profile.gender = getMostFrequent(valuesByProperty.gender);
- profile.ethnicity = getMostFrequent(valuesByProperty.ethnicity.map(ethnicity => ethnicity.toLowerCase()));
-
profile.date_of_birth = getMostFrequentDate(valuesByProperty.date_of_birth);
profile.date_of_death = getMostFrequentDate(valuesByProperty.date_of_death);
- // TODO: fix city, state and country not matching
- profile.birth_city = getMostFrequent(valuesByProperty.birth_city);
- profile.birth_state = getMostFrequent(valuesByProperty.birth_state);
- profile.birth_country_alpha2 = getMostFrequent(valuesByProperty.birth_country_alpha2);
+ // ensure most frequent country, city and state match up
+ profile.birth_country_alpha2 = getMostFrequent(valuesByProperty.origin.map(location => location.country));
+ const remainingOriginCountries = valuesByProperty.origin.filter(location => location.country === profile.birth_country_alpha2);
- profile.residence_city = getMostFrequent(valuesByProperty.residence_city);
- profile.residence_state = getMostFrequent(valuesByProperty.residence_state);
- profile.residence_country_alpha2 = getMostFrequent(valuesByProperty.residence_country_alpha2);
+ profile.birth_state = getMostFrequent(remainingOriginCountries.map(location => location.state));
+ const remainingOriginStates = remainingOriginCountries.filter(location => !profile.birth_state || location.state === profile.birth_state);
- profile.cup = getMostFrequent(valuesByProperty.cup);
- profile.bust = getMostFrequent(valuesByProperty.bust);
- profile.waist = getMostFrequent(valuesByProperty.waist);
- profile.hip = getMostFrequent(valuesByProperty.hip);
- profile.natural_boobs = getMostFrequent(valuesByProperty.natural_boobs);
+ profile.birth_city = getMostFrequent(remainingOriginStates.map(location => location.city));
- profile.hair = getMostFrequent(valuesByProperty.hair.map(hair => hair.toLowerCase()));
- profile.eyes = getMostFrequent(valuesByProperty.eyes.map(eyes => eyes.toLowerCase()));
+ profile.residence_country_alpha2 = getMostFrequent(valuesByProperty.residence.map(location => location.country));
+ const remainingResidenceCountries = valuesByProperty.residence.filter(location => location.country === profile.residence_country_alpha2);
+
+ profile.residence_state = getMostFrequent(remainingResidenceCountries.map(location => location.state));
+ const remainingResidenceStates = remainingResidenceCountries.filter(location => !profile.residence_state || location.state === profile.residence_state);
+
+ profile.residence_city = getMostFrequent(remainingResidenceStates.map(location => location.city));
profile.weight = getAverage(valuesByProperty.weight);
- profile.height = getMostFrequent(valuesByProperty.height);
-
- profile.has_tattoos = getMostFrequent(valuesByProperty.has_tattoos);
- profile.has_piercings = getMostFrequent(valuesByProperty.has_piercings);
profile.tattoos = getLongest(valuesByProperty.tattoos);
profile.piercings = getLongest(valuesByProperty.piercings);
@@ -366,38 +441,47 @@ async function upsertProfiles(profiles) {
async function scrapeProfiles(actor, sources, networksBySlug, sitesBySlug) {
const profiles = Promise.map(sources, async (source) => {
try {
+ // config may group sources to try until success
return await [].concat(source).reduce(async (outcome, scraperSlug) => outcome.catch(async () => {
- const scraper = scrapers[scraperSlug];
- const context = {
- site: sitesBySlug[scraperSlug] || null,
- network: networksBySlug[scraperSlug] || sitesBySlug[scraperSlug]?.network || null,
- scraper: scraperSlug,
- };
+ try {
+ const scraper = scrapers[scraperSlug];
+ const context = {
+ site: sitesBySlug[scraperSlug] || null,
+ network: networksBySlug[scraperSlug] || sitesBySlug[scraperSlug]?.network || null,
+ scraper: scraperSlug,
+ };
- if (!scraper?.fetchProfile) {
- logger.warn(`No profile profile scraper available for ${scraperSlug}`);
- throw new Error(`No profile profile scraper available for ${scraperSlug}`);
+ if (!scraper?.fetchProfile) {
+ logger.warn(`No profile profile scraper available for ${scraperSlug}`);
+ throw new Error(`No profile profile scraper available for ${scraperSlug}`);
+ }
+
+ if (!context.site && !context.network) {
+ logger.warn(`No site or network found for ${scraperSlug}`);
+ throw new Error(`No site or network found for ${scraperSlug}`);
+ }
+
+ logger.verbose(`Searching profile for '${actor.name}' on '${scraperSlug}'`);
+
+ const profile = await scraper.fetchProfile(actor.name, context, include);
+
+ if (!profile || typeof profile === 'number') { // scraper returns HTTP code on request failure
+ logger.verbose(`Profile for '${actor.name}' not available on ${context.site?.name || context.network?.name || context.scraper}, scraper returned ${profile}`);
+ throw Object.assign(new Error(`Profile for '${actor.name}' not available on ${context.site?.name || context.network?.name || context.scraper}`), { code: 'PROFILE_NOT_AVAILABLE' });
+ }
+
+ return {
+ ...actor,
+ ...profile,
+ ...context,
+ };
+ } catch (error) {
+ if (error.code !== 'PROFILE_NOT_AVAILABLE') {
+ logger.error(`Failed to fetch profile for '${actor.name}' from '${scraperSlug}': ${error.message}`);
+ }
+
+ throw error;
}
-
- if (!context.site && !context.network) {
- logger.warn(`No site or network found for ${scraperSlug}`);
- throw new Error(`No site or network found for ${scraperSlug}`);
- }
-
- logger.verbose(`Searching profile for '${actor.name}' on '${scraperSlug}'`);
-
- const profile = await scraper.fetchProfile(actor.name, context, include);
-
- if (!profile || typeof profile === 'number') { // scraper returns HTTP code on request failure
- logger.verbose(`Profile for '${actor.name}' not available on ${scraperSlug}, scraper returned ${profile}`);
- throw Object.assign(new Error(`Profile for '${actor.name}' not available on ${scraperSlug}`), { code: 'PROFILE_NOT_AVAILABLE' });
- }
-
- return {
- ...actor,
- ...profile,
- ...context,
- };
}), Promise.reject(new Error()));
} catch (error) {
if (error.code !== 'PROFILE_NOT_AVAILABLE') {
diff --git a/src/scrapers/julesjordan.js b/src/scrapers/julesjordan.js
index 90b66cf2..fbb33af4 100644
--- a/src/scrapers/julesjordan.js
+++ b/src/scrapers/julesjordan.js
@@ -119,7 +119,6 @@ async function getPhotos(entryId, site, type = 'highres', page = 1) {
}
function getEntryId(html) {
- // TODO: not working for https://www.julesjordan.com/members/scenes/jada-stevens-anal-ass-gets-oiled-up-for-james-deens-cock_vids.html
const entryId = html.match(/showtagform\((\d+)\)/);
if (entryId) {
diff --git a/src/scrapers/legalporno.js b/src/scrapers/legalporno.js
index eafe2481..acc2b24f 100644
--- a/src/scrapers/legalporno.js
+++ b/src/scrapers/legalporno.js
@@ -9,7 +9,7 @@ const slugify = require('../utils/slugify');
function extractTitle(originalTitle) {
const titleComponents = originalTitle.split(' ');
- const sceneIdMatch = titleComponents.slice(-1)[0].match(/(AB|AF|GP|SZ|IV|GIO|RS|TW|MA|FM|SAL|NR|AA|GL|BZ|FS|KS|OT)\d+/); // detect studio prefixes
+ const sceneIdMatch = titleComponents.slice(-1)[0].match(/(AB|AF|GP|SZ|IV|GIO|RS|TW|MA|FM|SAL|NR|AA|GL|BZ|FS|KS|OTS)\d+/); // detect studio prefixes
const shootId = sceneIdMatch ? sceneIdMatch[0] : null;
const title = sceneIdMatch ? titleComponents.slice(0, -1).join(' ') : originalTitle;
diff --git a/src/utils/slugify.js b/src/utils/slugify.js
index a14c76c5..c1e2f5c3 100644
--- a/src/utils/slugify.js
+++ b/src/utils/slugify.js
@@ -4,7 +4,7 @@ function slugify(string, delimiter = '-', {
encode = false,
limit = 1000,
} = {}) {
- if (!string) {
+ if (!string || typeof string !== 'string') {
return string;
}