diff --git a/dtos/movies.go b/dtos/movies.go new file mode 100644 index 0000000..6079ad1 --- /dev/null +++ b/dtos/movies.go @@ -0,0 +1,28 @@ +package dtos + +type ActorDetails struct { + URL string `json:"url"` + Type string `json:"type"` + Name string `json:"name"` + MoviesAndRoles []MovieAndRole `json:"movies"` +} + +type MovieAndRole struct { + URL string `json:"url"` //movie's url + Name string `json:"name"` + Role string `json:"role"` +} + +type MovieDetail struct { + URL string `json:"url"` + Type string `json:"type"` + Name string `json:"name"` + Cast []CastAndCrew `json:"cast"` + Crew []CastAndCrew `json:"crew"` +} + +type CastAndCrew struct { + URL string `json:"url"` //person's URL + Name string `json:"name"` + Role string `json:"role"` +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..25c9072 --- /dev/null +++ b/go.mod @@ -0,0 +1,35 @@ +module myproject/challenge2015 + +go 1.20 + +require github.com/gin-gonic/gin v1.9.1 + +require ( + github.com/bytedance/sonic v1.9.1 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/leodido/go-urn v1.2.4 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect + golang.org/x/arch v0.3.0 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..7a91e25 --- /dev/null +++ b/go.sum @@ -0,0 +1,93 @@ +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/internal/handlers/movie.go b/internal/handlers/movie.go new file mode 100644 index 0000000..8ef8c3c --- /dev/null +++ b/internal/handlers/movie.go @@ -0,0 +1,34 @@ +package handlers + +import ( + "fmt" + "net/http" + + movieService "myproject/challenge2015/internal/services/movie" + + "github.com/gin-gonic/gin" +) + +func setMovieRoutes(router *gin.Engine) { + router.GET("/smallest-degree-of-separation/:person1/:person2", GetMinimumDegreeOfSeperation) +} + +func GetMinimumDegreeOfSeperation(c *gin.Context) { + + person1 := c.Param("person1") + person2 := c.Param("person2") + + //validatation + if !(len(person1) > 0 || len(person2) > 0) { + c.IndentedJSON(http.StatusBadRequest, gin.H{"message": "Please Provide Both Person Name"}) + } + service := movieService.New() + seperation, err := service.GetMinimumDegreeOfSeperation(person1, person2) + if err != nil { + c.IndentedJSON(http.StatusInternalServerError, gin.H{"message": fmt.Sprintf("error in service layer %s", err.Error())}) + } + + message := fmt.Sprintf("Smallest Degree Of Separation between %s and %s is %d", person1, person2, seperation) + + c.IndentedJSON(http.StatusOK, gin.H{"message": message}) +} diff --git a/internal/handlers/ping.go b/internal/handlers/ping.go new file mode 100644 index 0000000..a11b74f --- /dev/null +++ b/internal/handlers/ping.go @@ -0,0 +1,33 @@ +package handlers + +import ( + "net/http" + + "github.com/gin-gonic/gin" +) + +func setPingRoutes(router *gin.Engine) { + router.GET("/ping", Ping) + router.GET("/albums", getAlbums) +} + +func Ping(c *gin.Context) { + c.IndentedJSON(http.StatusOK, "ping") +} + +type album struct { + ID string `json:"id"` + Title string `json:"title"` + Artist string `json:"artist"` + Price float64 `json:"price"` +} + +var albums = []album{ + {ID: "1", Title: "Blue Train", Artist: "John Coltrane", Price: 56.99}, + {ID: "2", Title: "Jeru", Artist: "Gerry Mulligan", Price: 17.99}, + {ID: "3", Title: "Sarah Vaughan and Clifford Brown", Artist: "Sarah Vaughan", Price: 39.99}, +} + +func getAlbums(c *gin.Context) { + c.IndentedJSON(http.StatusOK, albums) +} diff --git a/internal/handlers/router.go b/internal/handlers/router.go new file mode 100644 index 0000000..fdcab16 --- /dev/null +++ b/internal/handlers/router.go @@ -0,0 +1,16 @@ +package handlers + +import ( + "net/http" + + "github.com/gin-gonic/gin" +) + +// New creates a router and registers all the routes for the +// service and returns it. +func New() http.Handler { + router := gin.Default() + setPingRoutes(router) + setMovieRoutes(router) + return router +} diff --git a/internal/services/movie/movie.go b/internal/services/movie/movie.go new file mode 100644 index 0000000..9456da5 --- /dev/null +++ b/internal/services/movie/movie.go @@ -0,0 +1,249 @@ +package movie + +import ( + "encoding/json" + "io/ioutil" + "log" + "myproject/challenge2015/dtos" + "net/http" + "strconv" + "sync" + "time" +) + +type MovieService struct{} + +func New() *MovieService { + return &MovieService{} +} + +type IMovie interface { + GetMinimumDegreeOfSeperation(person1, person2 string) (int, error) +} + +// Node represents a node in the graph. +type PersonNetwork struct { + personURL string + personRole []string + associateRole []string + movieName []string + associate []*PersonNetwork +} + +func (n *PersonNetwork) Add_Edge(node *PersonNetwork) { + n.associate = append(n.associate, node) +} + +func (m *MovieService) GetMinimumDegreeOfSeperation(person1, person2 string) (int, error) { + + degree := 0 + isPerson2Found := false + personDiscovered := make(map[string]*PersonNetwork) + // movieDiscovered := make(map[string]*PersonNetwork) + + var root *PersonNetwork + + person1Node := &PersonNetwork{ + personURL: person1, + associate: []*PersonNetwork{}, + } + personDiscovered[person1Node.personURL] = person1Node + + if root == nil { + root = person1Node + } + + networkQueue := &Queue{} + networkQueue.Enqueue(person1Node) + lock := sync.Mutex{} + + for !networkQueue.IsEmpty() && !isPerson2Found { + if !isPerson2Found { + degree++ + } + wtgrp1 := sync.WaitGroup{} + networkQueueInner := &Queue{} // networkQueueInner.Enqueue() update this inside below loop + + for { + + person := networkQueue.Dequeue() + if person == nil { + break + } + + wtgrp1.Add(1) + + go func(personURL string) { + defer wtgrp1.Done() + + personDetails, err := m.GetPersonDetailsByURL(personURL) + if err != nil { + log.Printf("GetPersonDetailsByURL: %s error: %s", personURL, err.Error()) + } + for _, movie := range personDetails.MoviesAndRoles { + + movieDetails, err := m.GetMovieDetailsByURL(movie.URL) //TODO: make get movie detail call concurrent using gorutine + if err != nil { + log.Printf("GetMovieDetailsByURL: %s error: %s", movie.URL, err.Error()) + } + + //find person role in movie //from both cast and crew. + personRole := "" + for _, cast := range movieDetails.Cast { + if person.personURL != cast.URL { + personRole = cast.Role + } + } + if len(personRole) == 0 { + for _, crew := range movieDetails.Crew { + if person.personURL != crew.URL { + personRole = crew.Role + } + } + } + + //Process cast + for _, cast := range movieDetails.Cast { + if cast.URL == person2 { + isPerson2Found = true + } + + lock.Lock() + if _, ok := personDiscovered[cast.URL]; !ok { + + castPersonNode := &PersonNetwork{ + personURL: cast.URL, + associate: []*PersonNetwork{}, + } + personDiscovered[cast.URL] = castPersonNode + person.associate = append(person.associate, castPersonNode) + networkQueueInner.Enqueue(castPersonNode) + + } else { + if person.personURL != cast.URL { + person.associate = append(person.associate, personDiscovered[cast.URL]) + } + } + person.movieName = append(person.movieName, movieDetails.Name) + person.personRole = append(person.personRole, personRole) + person.associateRole = append(person.associateRole, cast.Role) + + //TODO: setting a reverse link + + lock.Unlock() + } + + //Process crew + for _, crew := range movieDetails.Crew { + if crew.URL == person2 { + isPerson2Found = true + } + lock.Lock() + if _, ok := personDiscovered[crew.URL]; !ok { + + crewPersonNode := &PersonNetwork{ + personURL: crew.URL, + associate: []*PersonNetwork{}, + } + personDiscovered[crew.URL] = crewPersonNode + person.associate = append(person.associate, crewPersonNode) + networkQueueInner.Enqueue(crewPersonNode) + + } else { + if person.personURL != crew.URL { + person.associate = append(person.associate, personDiscovered[crew.URL]) + } + } + person.movieName = append(person.movieName, movieDetails.Name) + person.personRole = append(person.personRole, personRole) + person.associateRole = append(person.associateRole, crew.Role) + + //TODO: setting a reverse link + + lock.Unlock() + } + //} + } + }(person.personURL) + + } + wtgrp1.Wait() + networkQueue = networkQueueInner + } + + return degree, nil +} + +func (m *MovieService) GetPersonDetailsByURL(personUrl string) (dtos.ActorDetails, error) { + + response := dtos.ActorDetails{} + + for i := 0; i < 10; i++ { // retry 10 time + + resp, err := http.Get("https://data.moviebuff.com/" + personUrl) + + if resp != nil && resp.StatusCode == 429 { + waitTime, _ := strconv.Atoi(resp.Header.Get("retry-after")) + time.Sleep(time.Duration(waitTime) * time.Second) + + } else if err != nil && i < 10 { + log.Printf("GetPersonDetailsByURL sleep : %s", err.Error()) + time.Sleep(time.Duration(60) * time.Second) + } else if err != nil { + log.Printf("GetPersonDetailsByURL error: %s ", err.Error()) + return response, err + } + + if resp != nil && resp.StatusCode == 200 { + + defer resp.Body.Close() + body, _ := ioutil.ReadAll(resp.Body) + err = json.Unmarshal(body, &response) + if err != nil { + log.Printf("Reading body failed: %s", err) + return response, err + } + break + } + + } + + return response, nil +} + +func (m *MovieService) GetMovieDetailsByURL(movieNameUrl string) (dtos.MovieDetail, error) { + + response := dtos.MovieDetail{} + + for i := 0; i < 10; i++ { // retry 10 time + + resp, err := http.Get("https://data.moviebuff.com/" + movieNameUrl) + + if resp != nil && resp.StatusCode == 429 { + waitTime, _ := strconv.Atoi(resp.Header.Get("retry-after")) + time.Sleep(time.Duration(waitTime) * time.Second) + + } else if err != nil && i < 10 { + log.Printf("GetMovieDetailsByURL sleep : %s", err.Error()) + time.Sleep(time.Duration(60) * time.Second) + } else if err != nil { + log.Printf("GetMovieDetailsByURL error: %s", err.Error()) + return response, err + } + + if resp != nil && resp.StatusCode == 200 { + + defer resp.Body.Close() + body, _ := ioutil.ReadAll(resp.Body) + err = json.Unmarshal(body, &response) + if err != nil { + log.Printf("Reading body failed: %s", err) + return response, err + } + break + } + + } + + return response, nil +} diff --git a/internal/services/movie/queue.go b/internal/services/movie/queue.go new file mode 100644 index 0000000..6e5685b --- /dev/null +++ b/internal/services/movie/queue.go @@ -0,0 +1,26 @@ +package movie + +type Queue struct { + item_value []*PersonNetwork +} + +func (q *Queue) Enqueue(item *PersonNetwork) { + q.item_value = append(q.item_value, item) //used to add items +} + +func (q *Queue) Dequeue() *PersonNetwork { + if q.IsEmpty() { + return nil + } + item := q.item_value[0] + q.item_value = q.item_value[1:] //used to remove items + return item +} + +func (q *Queue) IsEmpty() bool { + return len(q.item_value) == 0 +} + +func (q *Queue) Size() int { + return len(q.item_value) +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..5c65dca --- /dev/null +++ b/main.go @@ -0,0 +1,20 @@ +package main + +import ( + + //"log" + "log" + "myproject/challenge2015/internal/handlers" + + //"net/http" + + "net/http" +) + +func main() { + + err := http.ListenAndServe(":8080", handlers.New()) + if err != nil { + log.Fatal("error ", err.Error()) + } +} diff --git a/samples-jsons/amitabh-bachchan.json b/samples-jsons/amitabh-bachchan.json new file mode 100644 index 0000000..22ef5e2 --- /dev/null +++ b/samples-jsons/amitabh-bachchan.json @@ -0,0 +1,1402 @@ +{ + "url": "amitabh-bachchan", + "type": "Person", + "name": "Amitabh Bachchan", + "movies": [ + { + "name": "Aankhen 2", + "url": "aankhen-2", + "role": "Supporting Actor" + }, + { + "name": "Arasuri Maa Ambe", + "url": "arasuri-maa-ambe", + "role": "Actor" + }, + { + "name": "Badlaa", + "url": "badlaa", + "role": "Actor" + }, + { + "name": "Jhony Mastana", + "url": "jhony-mastana", + "role": "Actor" + }, + { + "name": "Kabira", + "url": "kabira", + "role": "Special Appearance" + }, + { + "name": "Kalpvriksh", + "url": "kalpvriksh", + "role": "Actor" + }, + { + "name": "Leader", + "url": "leader-2014-hindi", + "role": "Actor" + }, + { + "name": "Mehrunissa", + "url": "mehrunissa", + "role": "Actor" + }, + { + "name": "Pehle Aap Janab", + "url": "pehle-aap-janab", + "role": "Supporting Actor" + }, + { + "name": "Power", + "url": "power-2014-hindi", + "role": "Actor" + }, + { + "name": "Shoebite", + "url": "shoebite", + "role": "Actor" + }, + { + "name": "Taalismaan", + "url": "taalismaan", + "role": "Actor" + }, + { + "name": "Yudh", + "url": "yudh", + "role": "Actor" + }, + { + "name": "Pink", + "url": "pink-2016-hindi", + "role": "Actor" + }, + { + "name": "TE3N", + "url": "te3n", + "role": "Actor" + }, + { + "name": "Ki & Ka", + "url": "ki-and-ka", + "role": "Special Appearance" + }, + { + "name": "Wazir", + "url": "wazir", + "role": "Actor" + }, + { + "name": "Piku", + "url": "piku", + "role": "Actor" + }, + { + "name": "Hey Bro", + "url": "hey-bro", + "role": "Special Appearance" + }, + { + "name": "Shamitabh", + "url": "shamitabh", + "role": "Actor" + }, + { + "name": "Manam", + "url": "manam", + "role": "Special Appearance" + }, + { + "name": "Bhoothnath Returns", + "url": "bhoothnath-returns", + "role": "Actor" + }, + { + "name": "Sholay 3D", + "url": "sholay-3d", + "role": "Actor" + }, + { + "name": "Mahabharat", + "url": "mahabharat", + "role": "Actor" + }, + { + "name": "Satyagraha", + "url": "satyagraha", + "role": "Actor" + }, + { + "name": "The Great Gatsby", + "url": "the-great-gatsby", + "role": "Supporting Actor" + }, + { + "name": "Bombay Talkies", + "url": "bombay-talkies", + "role": "Special Appearance" + }, + { + "name": "Naam Chhe Maru Ganga", + "url": "naam-chhe-maru-ganga", + "role": "Actor" + }, + { + "name": "Zamaanat", + "url": "zamaanat", + "role": "Actor" + }, + { + "name": "English Vinglish", + "url": "english-vinglish", + "role": "Special Appearance" + }, + { + "name": "Ganga Devi", + "url": "ganga-devi", + "role": "Actor" + }, + { + "name": "Bol Bachchan", + "url": "bol-bachchan", + "role": "Supporting Actor" + }, + { + "name": "Department", + "url": "department", + "role": "Supporting Actor" + }, + { + "name": "Mr Bhatti on Chutti", + "url": "mr-bhatti-on-chutti", + "role": "Supporting Actor" + }, + { + "name": "Bollywood: The Greatest Love Story Ever Told", + "url": "bollywood-the-greatest-love-story-ever-told", + "role": "Actor" + }, + { + "name": "Poet of Politics", + "url": "poet-of-politics", + "role": "Actor" + }, + { + "name": "Aarakshan", + "url": "aarakshan", + "role": "Supporting Actor" + }, + { + "name": "Bbuddah Hoga Terra Baap", + "url": "bbuddah-hoga-terra-baap", + "role": "Actor" + }, + { + "name": "Kandahar", + "url": "kandahar", + "role": "Supporting Actor" + }, + { + "name": "Teen Patti", + "url": "teen-patti", + "role": "Actor" + }, + { + "name": "Rann", + "url": "rann", + "role": "Actor" + }, + { + "name": "Twinergy", + "url": "twinergy", + "role": "Actor" + }, + { + "name": "Paa", + "url": "paa", + "role": "Supporting Actor" + }, + { + "name": "Aladin", + "url": "aladin", + "role": "Actor" + }, + { + "name": "Slumdog Millionaire", + "url": "slumdog-millionaire", + "role": "Special Appearance" + }, + { + "name": "Zor Lagaa Ke... Haiya!", + "url": "zor-lagaa-ke-haiya", + "role": "Supporting Actor" + }, + { + "name": "Delhi-6", + "url": "delhi-6", + "role": "Supporting Actor" + }, + { + "name": "The Last Lear", + "url": "the-last-lear", + "role": "Supporting Actor" + }, + { + "name": "God Tussi Great Ho", + "url": "god-tussi-great-ho", + "role": "Actor" + }, + { + "name": "Sarkar Raj", + "url": "sarkar-raj", + "role": "Supporting Actor" + }, + { + "name": "Bhoothnath", + "url": "bhoothnath", + "role": "Actor" + }, + { + "name": "Yaar Meri Zindagi", + "url": "yaar-meri-zindagi", + "role": "Actor" + }, + { + "name": "Jodhaa Akbar", + "url": "jodhaa-akbar", + "role": "Supporting Actor" + }, + { + "name": "Gangotri", + "url": "gangotri", + "role": "Actor" + }, + { + "name": "Om Shanti Om", + "url": "om-shanti-om", + "role": "Special Appearance" + }, + { + "name": "Ram Gopal Varma Ki Aag", + "url": "ram-gopal-varma-ki-aag", + "role": "Supporting Actor" + }, + { + "name": "Jhoom Barabar Jhoom", + "url": "jhoom-barabar-jhoom", + "role": "Supporting Actor" + }, + { + "name": "Swami", + "url": "swami", + "role": "Supporting Actor" + }, + { + "name": "Cheeni Kum", + "url": "cheeni-kum", + "role": "Actor" + }, + { + "name": "Shootout at Lokhandwala", + "url": "shootout-at-lokhandwala", + "role": "Supporting Actor" + }, + { + "name": "Nishabd", + "url": "nishabd", + "role": "Actor" + }, + { + "name": "Eklavya", + "url": "eklavya", + "role": "Actor" + }, + { + "name": "52nd Fair One Filmfare Awards", + "url": "52nd-fair-one-filmfare-awards", + "role": "Actor" + }, + { + "name": "Ek Krantiveer: Vasudev Balwant Phadke", + "url": "ek-krantiveer-vasudev-balwant-phadke", + "role": "Supporting Actor" + }, + { + "name": "Baabul", + "url": "baabul", + "role": "Supporting Actor" + }, + { + "name": "Ganga", + "url": "ganga", + "role": "Actor" + }, + { + "name": "Kabhi Alvida Naa Kehna", + "url": "kabhi-alvida-naa-kehna", + "role": "Supporting Actor" + }, + { + "name": "Darna Zaroori Hai", + "url": "darna-zaroori-hai", + "role": "Supporting Actor" + }, + { + "name": "Family: Ties of Blood", + "url": "family-ties-of-blood", + "role": "Supporting Actor" + }, + { + "name": "Ek Ajnabee", + "url": "ek-ajnabee", + "role": "Actor" + }, + { + "name": "Amrithadhare", + "url": "amrithadhare", + "role": "Special Appearance" + }, + { + "name": "Dil Jo Bhi Kahey...", + "url": "dil-jo-bhi-kahey", + "role": "Actor" + }, + { + "name": "Viruddh... Family Comes First", + "url": "viruddh-family-comes-first", + "role": "Actor" + }, + { + "name": "Sarkar", + "url": "sarkar", + "role": "Actor" + }, + { + "name": "Paheli", + "url": "paheli", + "role": "Actor" + }, + { + "name": "Parineeta", + "url": "parineeta", + "role": "Supporting Actor" + }, + { + "name": "Bunty Aur Babli", + "url": "bunty-aur-babli", + "role": "Supporting Actor" + }, + { + "name": "Waqt: The Race Against Time", + "url": "waqt-the-race-against-time", + "role": "Supporting Actor" + }, + { + "name": "Black", + "url": "black", + "role": "Actor" + }, + { + "name": "Ramji Londonwaley", + "url": "ramji-londonwaley", + "role": "Supporting Actor" + }, + { + "name": "Ab Tumhare Hawale Watan Saathiyo", + "url": "ab-tumhare-hawale-watan-saathiyo", + "role": "Actor" + }, + { + "name": "Veer-Zaara", + "url": "veer-zaara", + "role": "Special Appearance" + }, + { + "name": "Hum Kaun Hai?", + "url": "hum-kaun-hai", + "role": "Actor" + }, + { + "name": "Kyun! Ho Gaya Na...", + "url": "kyun-ho-gaya-na", + "role": "Supporting Actor" + }, + { + "name": "Deewaar: Let's Bring Our Heroes Home", + "url": "deewaar-lets-bring-our-heroes-home", + "role": "Supporting Actor" + }, + { + "name": "Lakshya", + "url": "lakshya", + "role": "Supporting Actor" + }, + { + "name": "Dev", + "url": "dev", + "role": "Supporting Actor" + }, + { + "name": "Insaaf: The Justice", + "url": "insaaf-the-justice", + "role": "Supporting Actor" + }, + { + "name": "Rudraksh", + "url": "rudraksh", + "role": "Supporting Actor" + }, + { + "name": "Aetbaar", + "url": "aetbaar", + "role": "Actor" + }, + { + "name": "Khakee", + "url": "khakee", + "role": "Supporting Actor" + }, + { + "name": "49th Manikchand Filmfare Awards 2003", + "url": "49th-manikchand-filmfare-awards-2003", + "role": "Actor" + }, + { + "name": "Fun2shh... Dudes in the 10th Century", + "url": "fun2shh-dudes-in-the-10th-century", + "role": "Supporting Actor" + }, + { + "name": "Baghban", + "url": "baghban", + "role": "Actor" + }, + { + "name": "Boom", + "url": "boom", + "role": "Actor" + }, + { + "name": "Mumbai Se Aaya Mera Dost", + "url": "mumbai-se-aaya-mera-dost", + "role": "Supporting Actor" + }, + { + "name": "Armaan", + "url": "armaan", + "role": "Actor" + }, + { + "name": "Khushi", + "url": "khushi-2003-hindi", + "role": "Supporting Actor" + }, + { + "name": "Kaante", + "url": "kaante", + "role": "Actor" + }, + { + "name": "Agni Varsha", + "url": "agni-varsha", + "role": "Special Appearance" + }, + { + "name": "Hum Kisi Se Kum Nahin", + "url": "hum-kisi-se-kum-nahin", + "role": "Actor, Actor" + }, + { + "name": "Aankhen", + "url": "aankhen", + "role": "Actor" + }, + { + "name": "Kabhi Khushi Kabhie Gham...", + "url": "kabhi-khushi-kabhie-gham", + "role": "Supporting Actor" + }, + { + "name": "Aks", + "url": "aks", + "role": "Actor" + }, + { + "name": "Lagaan", + "url": "lagaan", + "role": "Supporting Actor" + }, + { + "name": "Ek Rishtaa: The Bond of Love", + "url": "ek-rishtaa-the-bond-of-love", + "role": "Actor" + }, + { + "name": "Dafan", + "url": "dafan", + "role": "Supporting Actor" + }, + { + "name": "Mohabbatein", + "url": "mohabbatein", + "role": "Supporting Actor" + }, + { + "name": "International Indian Film Awards", + "url": "international-indian-film-awards", + "role": "Actor" + }, + { + "name": "Hello Brother", + "url": "hello-brother", + "role": "Supporting Actor" + }, + { + "name": "Kohram", + "url": "kohram", + "role": "Actor" + }, + { + "name": "Hindustan Ki Kasam", + "url": "hindustan-ki-kasam", + "role": "Supporting Actor" + }, + { + "name": "Biwi No. 1", + "url": "biwi-no-1", + "role": "Supporting Actor" + }, + { + "name": "Sooryavansham", + "url": "sooryavansham", + "role": "Actor" + }, + { + "name": "Lal Baadshah", + "url": "lal-baadshah", + "role": "Actor" + }, + { + "name": "Hero Hindustani", + "url": "hero-hindustani", + "role": "Supporting Actor" + }, + { + "name": "Bade Miyan Chote Miyan", + "url": "bade-miyan-chote-miyan", + "role": "Supporting Actor" + }, + { + "name": "Major Saab", + "url": "major-saab", + "role": "Supporting Actor" + }, + { + "name": "Mrityudaata", + "url": "mrityudaata", + "role": "Actor" + }, + { + "name": "Tere Mere Sapne", + "url": "tere-mere-sapne", + "role": "Supporting Actor" + }, + { + "name": "Insaniyat", + "url": "insaniyat", + "role": "Actor" + }, + { + "name": "Akkaa", + "url": "akka", + "role": "Supporting Actor" + }, + { + "name": "Professor Ki Padosan", + "url": "professor-ki-padosan", + "role": "Supporting Actor" + }, + { + "name": "Zulm Ki Hukumat", + "url": "zulm-ki-hukumat", + "role": "Supporting Actor" + }, + { + "name": "Khuda Gawah", + "url": "khuda-gawah", + "role": "Actor" + }, + { + "name": "Akayla", + "url": "akayla", + "role": "Actor" + }, + { + "name": "Indrajeet", + "url": "indrajeet", + "role": "Actor" + }, + { + "name": "Ajooba", + "url": "ajooba", + "role": "Actor" + }, + { + "name": "Hum", + "url": "hum", + "role": "Actor" + }, + { + "name": "Aaj Ka Arjun", + "url": "aaj-ka-arjun", + "role": "Actor" + }, + { + "name": "Kroadh", + "url": "kroadh", + "role": "Supporting Actor" + }, + { + "name": "Agneepath", + "url": "agneepath-1990-hindi", + "role": "Actor" + }, + { + "name": "Main Azaad Hoon", + "url": "main-azaad-hoon", + "role": "Actor" + }, + { + "name": "Jadugar", + "url": "jadugar", + "role": "Actor" + }, + { + "name": "Batwara", + "url": "batwara", + "role": "Supporting Actor" + }, + { + "name": "Toofan", + "url": "toofan-1989-hindi", + "role": "Actor" + }, + { + "name": "Ganga Jamuna Saraswathi", + "url": "ganga-jamuna-saraswathi", + "role": "Actor" + }, + { + "name": "Gangaa Jamunaa Saraswathi", + "url": "gangaa-jamunaa-saraswathi", + "role": "Actor" + }, + { + "name": "Soorma Bhopali", + "url": "soorma-bhopali", + "role": "Actor" + }, + { + "name": "Shahenshah", + "url": "shahenshah", + "role": "Actor" + }, + { + "name": "Jalwa", + "url": "jalwa", + "role": "Supporting Actor" + }, + { + "name": "Dosti Dushmani", + "url": "dosti-dushmani", + "role": "Special Appearance" + }, + { + "name": "Aakhree Raasta", + "url": "aakhree-raasta", + "role": "Actor" + }, + { + "name": "Mard", + "url": "mard", + "role": "Actor" + }, + { + "name": "Geraftaar", + "url": "geraftaar", + "role": "Special Appearance" + }, + { + "name": "Ghulami", + "url": "ghulami", + "role": "Supporting Actor" + }, + { + "name": "Sharaabi", + "url": "sharabi", + "role": "Actor" + }, + { + "name": "Inquilaab", + "url": "inquilaab", + "role": "Actor" + }, + { + "name": "Kanoon Kya Karega", + "url": "2689e784c79364fc9fd8f0d136de8a41", + "role": "Supporting Actor" + }, + { + "name": "Paan Khaye Saiyan Hamaar", + "url": "paan-khaye-saiyan-hamaar", + "role": "Supporting Actor" + }, + { + "name": "Coolie", + "url": "coolie", + "role": "Actor" + }, + { + "name": "Mahaan", + "url": "mahaan", + "role": "Actor" + }, + { + "name": "Andhaa Kanoon", + "url": "andhaa-kanoon", + "role": "Special Appearance" + }, + { + "name": "Nastik", + "url": "nastik", + "role": "Actor" + }, + { + "name": "Pukar", + "url": "pukar", + "role": "Actor" + }, + { + "name": "Shakti", + "url": "shakti-1982-hindi", + "role": "Actor" + }, + { + "name": "Desh Premee", + "url": "desh-premee", + "role": "Actor" + }, + { + "name": "Bemisal", + "url": "bemisal", + "role": "Actor" + }, + { + "name": "Satte Pe Satta", + "url": "satte-pe-satta", + "role": "Actor" + }, + { + "name": "Khud-Daar", + "url": "khud-daar", + "role": "Actor" + }, + { + "name": "Namak Halal", + "url": "namak-halal", + "role": "Actor" + }, + { + "name": "Kaalia", + "url": "kaalia", + "role": "Actor" + }, + { + "name": "Silsila", + "url": "silsila", + "role": "Actor" + }, + { + "name": "Laawaris", + "url": "laawaris", + "role": "Actor" + }, + { + "name": "Naseeb", + "url": "naseeb", + "role": "Actor" + }, + { + "name": "Barsaat Ki Ek Raat", + "url": "barsaat-ki-ek-raat", + "role": "Actor" + }, + { + "name": "Yaarana", + "url": "yaarana-b785", + "role": "Actor" + }, + { + "name": "Chashme Buddoor", + "url": "chashme-buddoor", + "role": "Special Appearance" + }, + { + "name": "Commander", + "url": "commander", + "role": "Supporting Actor" + }, + { + "name": "Vilayati Babu", + "url": "vilayati-babu", + "role": "Actor" + }, + { + "name": "Shaan", + "url": "shaan-1980-hindi", + "role": "Actor" + }, + { + "name": "Ram Balram", + "url": "ram-balram", + "role": "Actor" + }, + { + "name": "Dostana", + "url": "dostana-1980-hindi", + "role": "Actor" + }, + { + "name": "Do Aur Do Paanch", + "url": "do-aur-do-paanch", + "role": "Actor" + }, + { + "name": "Suhaag", + "url": "suhaag-1979-hindi", + "role": "Actor" + }, + { + "name": "Kala Patthar", + "url": "kala-patthar", + "role": "Actor" + }, + { + "name": "Mr Natwarlal", + "url": "mr-natwarlal", + "role": "Actor" + }, + { + "name": "Manzil", + "url": "manzil", + "role": "Actor" + }, + { + "name": "Jurmana", + "url": "jurmana", + "role": "Actor" + }, + { + "name": "Golmaal", + "url": "golmaal", + "role": "Special Appearance" + }, + { + "name": "The Great Gambler", + "url": "the-great-gambler", + "role": "Actor" + }, + { + "name": "Ahsaas", + "url": "ahsaas", + "role": "Special Appearance" + }, + { + "name": "Muqaddar Ka Sikandar", + "url": "muqaddar-ka-sikandar", + "role": "Actor" + }, + { + "name": "Trishul", + "url": "trishul-1978-hindi", + "role": "Actor" + }, + { + "name": "Don", + "url": "don-1978-hindi", + "role": "Actor" + }, + { + "name": "Kasme Vaade", + "url": "kasme-vaade", + "role": "Actor" + }, + { + "name": "Besharam", + "url": "besharam-1978-hindi", + "role": "Actor" + }, + { + "name": "Ganga Ki Saugand", + "url": "ganga-ki-saugand", + "role": "Actor" + }, + { + "name": "Cinema Cinema", + "url": "cinema-cinema-1978-hindi", + "role": "Actor" + }, + { + "name": "Chala Murari Hero Banne", + "url": "chala-murari-hero-banne", + "role": "Special Appearance" + }, + { + "name": "Parvarish", + "url": "parvarish", + "role": "Actor" + }, + { + "name": "Charandas", + "url": "charandas", + "role": "Actor" + }, + { + "name": "Shatranj Ke Khilari", + "url": "shatranj-ke-khilari", + "role": "Supporting Actor" + }, + { + "name": "Khoon Pasina", + "url": "khoon-pasina", + "role": "Actor" + }, + { + "name": "Amar Akbar Anthony", + "url": "amar-akbar-anthony-1977-hindi", + "role": "Actor" + }, + { + "name": "Imaan Dharam", + "url": "imaan-dharam", + "role": "Actor" + }, + { + "name": "Alaap", + "url": "alaap", + "role": "Actor" + }, + { + "name": "Balika Badhu", + "url": "balika-badhu", + "role": "Supporting Actor" + }, + { + "name": "Adalat", + "url": "adalat", + "role": "Actor" + }, + { + "name": "Do Anjaane", + "url": "do-anjaane", + "role": "Actor" + }, + { + "name": "Hera Pheri", + "url": "hera-pheri-ecfa", + "role": "Actor" + }, + { + "name": "Kabhi Kabhi", + "url": "kabhi-kabhi", + "role": "Supporting Actor" + }, + { + "name": "Chhoti Si Baat", + "url": "chhoti-si-baat", + "role": "Special Appearance" + }, + { + "name": "Faraar", + "url": "faraar", + "role": "Actor" + }, + { + "name": "Sholay", + "url": "sholay", + "role": "Actor" + }, + { + "name": "Mili", + "url": "mili-1975-hindi", + "role": "Actor" + }, + { + "name": "Chupke Chupke", + "url": "chupke-chupke", + "role": "Actor" + }, + { + "name": "Zameer", + "url": "zameer", + "role": "Actor" + }, + { + "name": "Deewar", + "url": "deewar", + "role": "Actor" + }, + { + "name": "Majboor", + "url": "majboor", + "role": "Actor" + }, + { + "name": "Kunwara Baap", + "url": "kunwara-baap", + "role": "Supporting Actor" + }, + { + "name": "Benaam", + "url": "6dcce2fd44cf475ffd71429dc1d176f2", + "role": "Actor" + }, + { + "name": "Roti Kapda Aur Makaan", + "url": "roti-kapda-aur-makaan", + "role": "Supporting Actor" + }, + { + "name": "Kasauti", + "url": "kasauti", + "role": "Actor" + }, + { + "name": "Dost", + "url": "dost", + "role": "Supporting Actor" + }, + { + "name": "Namak Haram", + "url": "namak-haram", + "role": "Actor" + }, + { + "name": "Saudagar", + "url": "saudagar", + "role": "Actor" + }, + { + "name": "Abhimaan", + "url": "abhimaan", + "role": "Actor" + }, + { + "name": "Gehri Chaal", + "url": "gehri-chaal", + "role": "Actor" + }, + { + "name": "Bandhe Haath", + "url": "bandhe-haath", + "role": "Actor" + }, + { + "name": "Zanjeer", + "url": "zanjeer-1973-hindi", + "role": "Actor" + }, + { + "name": "Bawarchi", + "url": "bawarchi", + "role": "Supporting Actor" + }, + { + "name": "Garam Masala", + "url": "garam-masala-1972-hindi", + "role": "Supporting Actor" + }, + { + "name": "Reshma Aur Shera", + "url": "reshma-aur-shera", + "role": "Supporting Actor" + }, + { + "name": "Bombay to Goa", + "url": "bombay-to-goa", + "role": "Actor" + }, + { + "name": "Piya Ka Ghar", + "url": "piya-ka-ghar", + "role": "Supporting Actor" + }, + { + "name": "Bansi Birju", + "url": "bansi-birju", + "role": "Actor" + }, + { + "name": "Ek Nazar", + "url": "ek-nazar", + "role": "Actor" + }, + { + "name": "Jaban", + "url": "49e7500edec04e9d1fb2b0a96a30f12f", + "role": "Supporting Actor" + }, + { + "name": "Raaste Ka Patthar", + "url": "raaste-ka-patthar", + "role": "Actor" + }, + { + "name": "Pyar Ki Kahani", + "url": "pyar-ki-kahani", + "role": "Actor" + }, + { + "name": "Anand", + "url": "anand-1971-hindi", + "role": "Supporting Actor" + }, + { + "name": "Parwana", + "url": "parwana", + "role": "Actor" + }, + { + "name": "Sanjog", + "url": "sanjog", + "role": "Actor" + }, + { + "name": "Saat Hindustani", + "url": "saat-hindustani", + "role": "Supporting Actor" + }, + { + "name": "TE3N", + "url": "te3n", + "role": "Playback Singer" + }, + { + "name": "Wazir", + "url": "wazir", + "role": "Playback Singer" + }, + { + "name": "Shamitabh", + "url": "shamitabh", + "role": "Playback Singer" + }, + { + "name": "Bol Bachchan", + "url": "bol-bachchan", + "role": "Playback Singer" + }, + { + "name": "Kahaani", + "url": "kahaani", + "role": "Playback Singer" + }, + { + "name": "Paa", + "url": "paa", + "role": "Playback Singer" + }, + { + "name": "Aladin", + "url": "aladin", + "role": "Playback Singer" + }, + { + "name": "Bhoothnath", + "url": "bhoothnath", + "role": "Playback Singer" + }, + { + "name": "Ram Gopal Varma Ki Aag", + "url": "ram-gopal-varma-ki-aag", + "role": "Playback Singer" + }, + { + "name": "Nishabd", + "url": "nishabd", + "role": "Playback Singer" + }, + { + "name": "Baabul", + "url": "baabul", + "role": "Playback Singer" + }, + { + "name": "Sarkar", + "url": "sarkar", + "role": "Playback Singer" + }, + { + "name": "Aetbaar", + "url": "aetbaar", + "role": "Playback Singer, Playback Singer" + }, + { + "name": "Baghban", + "url": "baghban", + "role": "Playback Singer" + }, + { + "name": "Armaan", + "url": "armaan", + "role": "Playback Singer" + }, + { + "name": "Kabhi Khushi Kabhie Gham...", + "url": "kabhi-khushi-kabhie-gham", + "role": "Playback Singer" + }, + { + "name": "Aks", + "url": "aks", + "role": "Playback Singer" + }, + { + "name": "Sooryavansham", + "url": "sooryavansham", + "role": "Playback Singer" + }, + { + "name": "Lal Baadshah", + "url": "lal-baadshah", + "role": "Playback Singer" + }, + { + "name": "Khuda Gawah", + "url": "khuda-gawah", + "role": "Playback Singer" + }, + { + "name": "Main Azaad Hoon", + "url": "main-azaad-hoon", + "role": "Playback Singer" + }, + { + "name": "Jadugar", + "url": "jadugar", + "role": "Playback Singer" + }, + { + "name": "Sharaabi", + "url": "sharabi", + "role": "Playback Singer" + }, + { + "name": "Mahaan", + "url": "mahaan", + "role": "Playback Singer" + }, + { + "name": "Laawaris", + "url": "laawaris", + "role": "Playback Singer" + }, + { + "name": "Amar Akbar Anthony", + "url": "amar-akbar-anthony-1977-hindi", + "role": "Playback Singer" + }, + { + "name": "Kabhi Kabhi", + "url": "kabhi-kabhi", + "role": "Playback Singer" + }, + { + "name": "Mili", + "url": "mili-1975-hindi", + "role": "Playback Singer" + }, + { + "name": "Shamitabh", + "url": "shamitabh", + "role": "Producer" + }, + { + "name": "Bbuddah Hoga Terra Baap", + "url": "bbuddah-hoga-terra-baap", + "role": "Producer" + }, + { + "name": "Twinergy", + "url": "twinergy", + "role": "Producer" + }, + { + "name": "Viruddh... Family Comes First", + "url": "viruddh-family-comes-first", + "role": "Producer" + }, + { + "name": "Aks", + "url": "aks", + "role": "Producer" + }, + { + "name": "Major Saab", + "url": "major-saab", + "role": "Producer" + }, + { + "name": "Saat Rang Ke Sapne", + "url": "saat-rang-ke-sapne", + "role": "Producer" + }, + { + "name": "Ullaasam", + "url": "ullaasam", + "role": "Producer" + }, + { + "name": "Mrityudaata", + "url": "mrityudaata", + "role": "Producer" + }, + { + "name": "Tere Mere Sapne", + "url": "tere-mere-sapne", + "role": "Producer" + }, + { + "name": "Krantiveer-The Revolution", + "url": "krantiveer-the-revolution", + "role": "Thanks" + }, + { + "name": "Zor Lagaa Ke... Haiya!", + "url": "zor-lagaa-ke-haiya", + "role": "Thanks" + }, + { + "name": "Delhi-6", + "url": "delhi-6", + "role": "Thanks" + }, + { + "name": "Jodhaa Akbar", + "url": "jodhaa-akbar", + "role": "Thanks" + }, + { + "name": "Gangotri", + "url": "gangotri", + "role": "Thanks" + }, + { + "name": "Lagaan", + "url": "lagaan", + "role": "Special Thanks" + } + ] + } \ No newline at end of file diff --git a/samples-jsons/leonardo-dicaprio.json b/samples-jsons/leonardo-dicaprio.json new file mode 100644 index 0000000..0703dfd --- /dev/null +++ b/samples-jsons/leonardo-dicaprio.json @@ -0,0 +1,67 @@ +{ + "url": "leonardo-dicaprio", + "type": "Person", + "name": "Leonardo DiCaprio", + "movies": [ + { + "name": "The Revenant", + "url": "the-revenant", + "role": "Actor" + }, + { + "name": "The Wolf of Wall Street", + "url": "the-wolf-of-wall-street", + "role": "Actor" + }, + { + "name": "The Great Gatsby", + "url": "the-great-gatsby", + "role": "Actor" + }, + { + "name": "Django Unchained", + "url": "django-unchained", + "role": "Actor" + }, + { + "name": "Inception", + "url": "inception", + "role": "Actor" + }, + { + "name": "The Departed", + "url": "the-departed", + "role": "Actor" + }, + { + "name": "Catch Me If You Can", + "url": "catch-me-if-you-can", + "role": "Actor" + }, + { + "name": "Titanic", + "url": "titanic", + "role": "Actor" + }, + { + "name": "Live by Night", + "url": "live-by-night", + "role": "Producer" + }, + { + "name": "The Wolf of Wall Street", + "url": "the-wolf-of-wall-street", + "role": "Producer" + }, + { + "name": "Out of the Furnace", + "url": "out-of-the-furnace", + "role": "Producer" + }, + { + "name": "Runner Runner", + "url": "runner-runner", + "role": "Producer" + } + ] +} \ No newline at end of file diff --git a/samples-jsons/martin-scorsese.json b/samples-jsons/martin-scorsese.json new file mode 100644 index 0000000..609d5a4 --- /dev/null +++ b/samples-jsons/martin-scorsese.json @@ -0,0 +1,72 @@ +{ + "url": "martin-scorsese", + "type": "Person", + "name": "Martin Scorsese", + "movies": [ + { + "name": "Silence", + "url": "silence-2015-english", + "role": "Director" + }, + { + "name": "The 50 Year Argument", + "url": "the-50-year-argument", + "role": "Director" + }, + { + "name": "The Wolf of Wall Street", + "url": "the-wolf-of-wall-street", + "role": "Director" + }, + { + "name": "The Departed", + "url": "the-departed", + "role": "Director" + }, + { + "name": "Cape Fear", + "url": "cape-fear", + "role": "Director" + }, + { + "name": "Goodfellas", + "url": "goodfellas", + "role": "Director" + }, + { + "name": "Taxi Driver", + "url": "taxi-driver", + "role": "Director" + }, + { + "name": "The 50 Year Argument", + "url": "the-50-year-argument", + "role": "Producer" + }, + { + "name": "The Third Side of the River", + "url": "the-third-side-of-the-river", + "role": "Executive Producer" + }, + { + "name": "The Wolf of Wall Street", + "url": "the-wolf-of-wall-street", + "role": "Producer" + }, + { + "name": "Malavita", + "url": "the-family", + "role": "Executive Producer" + }, + { + "name": "Taxi Driver", + "url": "taxi-driver", + "role": "Supporting Actor" + }, + { + "name": "Goodfellas", + "url": "goodfellas", + "role": "Screenplay Writer" + } + ] +} \ No newline at end of file diff --git a/samples-jsons/sholay-3d.json b/samples-jsons/sholay-3d.json new file mode 100644 index 0000000..3dad057 --- /dev/null +++ b/samples-jsons/sholay-3d.json @@ -0,0 +1,364 @@ +{ + "url": "sholay-3d", + "type": "Movie", + "name": "Sholay 3D", + "cast": [ + { + "url": "amitabh-bachchan", + "name": "Amitabh Bachchan", + "role": "Actor" + }, + { + "url": "amjad-khan", + "name": "Amjad Khan", + "role": "Actor" + }, + { + "url": "dharmendra", + "name": "Dharmendra", + "role": "Actor" + }, + { + "url": "hema-malini", + "name": "Hema Malini", + "role": "Actress" + }, + { + "url": "jaya-bachchan", + "name": "Jaya Bachchan", + "role": "Actress" + }, + { + "url": "sanjeev-kumar-1", + "name": "Sanjeev Kumar", + "role": "Actor" + }, + { + "url": "helen-richardson", + "name": "Helen Richardson", + "role": "Special Appearance" + }, + { + "url": "jagdeep-syed", + "name": "Jagdeep Syed", + "role": "Special Appearance" + }, + { + "url": "jalal-agha", + "name": "Jalal Agha", + "role": "Special Appearance" + }, + { + "url": "om-shivpuri", + "name": "Om Shivpuri", + "role": "Special Appearance" + }, + { + "url": "ak-hangal", + "name": "AK Hangal", + "role": "Supporting Actor" + }, + { + "url": "alankar-joshi", + "name": "Alankar Joshi", + "role": "Supporting Actor" + }, + { + "url": "arvind-joshi", + "name": "Arvind Joshi", + "role": "Supporting Actor" + }, + { + "url": "bhagwan-sinha", + "name": "Bhagwan Sinha", + "role": "Supporting Actor" + }, + { + "url": "govardhan-asrani", + "name": "Govardhan Asrani", + "role": "Supporting Actor" + }, + { + "url": "iftekhar-khan", + "name": "Iftekhar Khan", + "role": "Supporting Actor" + }, + { + "url": "iftekhar-khan", + "name": "Iftekhar Khan", + "role": "Supporting Actor" + }, + { + "url": "jagdeep-syed", + "name": "Jagdeep Syed", + "role": "Supporting Actor" + }, + { + "url": "keshto-mukherjee", + "name": "Keshto Mukherjee", + "role": "Supporting Actor" + }, + { + "url": "leela-mishra", + "name": "Leela Mishra", + "role": "Supporting Actress" + }, + { + "url": "mac-mohan", + "name": "Mac Mohan", + "role": "Supporting Actor" + }, + { + "url": "mac-mohan", + "name": "Mac Mohan", + "role": "Supporting Actor" + }, + { + "url": "sachin-pilgaonkar", + "name": "Sachin Pilgaonkar", + "role": "Supporting Actor" + }, + { + "url": "satyen-kappu", + "name": "Satyen Kappu", + "role": "Supporting Actor" + }, + { + "url": "viju-khote", + "name": "Viju Khote", + "role": "Supporting Actor" + }, + { + "url": "vikas-anand", + "name": "Vikas Anand", + "role": "Supporting Actor" + } + ], + "crew": [ + { + "name": "Ramesh Sippy", + "url": "ramesh-sippy", + "role": "Director / Direction" + }, + { + "name": "Jimmy Allen", + "url": "jimmy-allen", + "role": "Second Unit Director / Direction" + }, + { + "name": "AR Balan", + "url": "ar-balan", + "role": "Assistant Director / Direction" + }, + { + "name": "Khalish Lucknavi", + "url": "khalish-lucknavi", + "role": "Assistant Director / Direction" + }, + { + "name": "Kishen Bishen", + "url": "kishen-bishen", + "role": "Assistant Director / Direction" + }, + { + "name": "Sharad Palekar", + "url": "sharad-palekar", + "role": "Assistant Director / Direction" + }, + { + "name": "GP Sippy", + "url": "gp-sippy", + "role": "Producer / Production" + }, + { + "name": "Sippy Films", + "url": "sippy-films", + "role": "Production Company / Production" + }, + { + "name": "United Producers", + "url": "united-producers", + "role": "Production Company / Production" + }, + { + "name": "Aziz Bhai", + "url": "aziz-bhai", + "role": "Production Manager / Production" + }, + { + "name": "Rajan Walia", + "url": "rajan-walia", + "role": "Production Manager / Production" + }, + { + "name": "Suresh Desai", + "url": "suresh-desai", + "role": "Production Manager / Production" + }, + { + "name": "Javed Akhtar", + "url": "javed-akhtar", + "role": "Screenplay Writer / Writers" + }, + { + "name": "Salim Khan", + "url": "salim-khan", + "role": "Screenplay Writer / Writers" + }, + { + "name": "Dwarka Divecha", + "url": "dwarka-divecha", + "role": "Director of Photography / Camera and Electrical" + }, + { + "name": "Omee Kapoor", + "url": "omee-kapoor", + "role": "Still Photographer / Camera and Electrical" + }, + { + "name": "PRL Raman", + "url": "prl-raman", + "role": "Assistant Cameraman / Camera and Electrical" + }, + { + "name": "Vasant Rao", + "url": "vasant-rao", + "role": "Assistant Cameraman / Camera and Electrical" + }, + { + "name": "SM Anwar", + "url": "sm-anwar", + "role": "Camera Operator / Camera and Electrical" + }, + { + "name": "Rahul Dev Burman", + "url": "rahul-dev-burman", + "role": "Music Director / Music" + }, + { + "name": "Anand Bakshi", + "url": "anand-bakshi", + "role": "Lyricist / Music" + }, + { + "name": "Polydor Records", + "url": "polydor-records", + "role": "Music Label / Music" + }, + { + "name": "Hema Malini", + "url": "hema-malini", + "role": "Playback Singer / Music" + }, + { + "name": "Kishore Kumar", + "url": "kishore-kumar", + "role": "Playback Singer / Music" + }, + { + "name": "Lata Mangeshkar", + "url": "lata-mangeshkar", + "role": "Playback Singer / Music" + }, + { + "name": "Manna Dey", + "url": "manna-dey", + "role": "Playback Singer / Music" + }, + { + "name": "Rahul Dev Burman", + "url": "rahul-dev-burman", + "role": "Playback Singer / Music" + }, + { + "name": "Basu Deo Chakravarty", + "url": "basu-deo-chakravarty", + "role": "Music Assistant / Music" + }, + { + "name": "Manohari Singh", + "url": "manohari-singh", + "role": "Music Assistant / Music" + }, + { + "name": "Maruti Rao", + "url": "maruti-rao", + "role": "Music Assistant / Music" + }, + { + "name": "Gerry Humphreys", + "url": "gerry-humphreys", + "role": "Sound Re-recording Mixer / Sound" + }, + { + "name": "Mangesh Desai", + "url": "mangesh-desai-1", + "role": "Sound Re-recording Mixer / Sound" + }, + { + "name": "Baba Iqbal", + "url": "baba-iqbal", + "role": "Audio Assistant / Sound" + }, + { + "name": "Ram Yedekar", + "url": "ram-yedekar", + "role": "Art Director / Art" + }, + { + "name": "Babu Ghanekar", + "url": "babu-ghanekar", + "role": "Costume Assistant / Costume and Wardrobe" + }, + { + "name": "Vithal Thorat", + "url": "vithal-thorat", + "role": "Costume Assistant / Costume and Wardrobe" + }, + { + "name": "MS Shinde", + "url": "ms-shinde", + "role": "Editor / Editorial" + }, + { + "name": "B Naag", + "url": "b-naag", + "role": "Assistant Editor / Editorial" + }, + { + "name": "NS Lingayat", + "url": "ns-lingayat", + "role": "Assistant Editor / Editorial" + }, + { + "name": "Dinu Indulkar", + "url": "dinu-indulkar", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "MS Deepak", + "url": "ms-deepak", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "Sarosh B Modi", + "url": "sarosh-b-modi", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "Pandu Indulkar", + "url": "pandu-indulkar", + "role": "Assistant Makeup Artist / Makeup and Hair" + }, + { + "name": "Gerry Crampton", + "url": "gerry-crampton", + "role": "Stunt Coordinator / Stunts" + }, + { + "name": "Mohammed Ali", + "url": "mohammed-ali", + "role": "Stunt Coordinator / Stunts" + } + ] +} \ No newline at end of file diff --git a/samples-jsons/taxi-driver.json b/samples-jsons/taxi-driver.json new file mode 100644 index 0000000..1f906db --- /dev/null +++ b/samples-jsons/taxi-driver.json @@ -0,0 +1,144 @@ +{ + "url": "taxi-driver", + "type": "Movie", + "name": "Taxi Driver", + "cast": [ + { + "url": "cybill-shepherd", + "name": "Cybill Shepherd", + "role": "Actress" + }, + { + "url": "jodie-foster", + "name": "Jodie Foster", + "role": "Actress" + }, + { + "url": "robert-de-niro", + "name": "Robert De Niro", + "role": "Actor" + }, + { + "url": "albert-brooks", + "name": "Albert Brooks", + "role": "Supporting Actor" + }, + { + "url": "brenda-dickson", + "name": "Brenda Dickson", + "role": "Supporting Actress" + }, + { + "url": "diahnne-abbott", + "name": "Diahnne Abbott", + "role": "Supporting Actress" + }, + { + "url": "frank-adu", + "name": "Frank Adu", + "role": "Supporting Actor" + }, + { + "url": "gino-ardito", + "name": "Gino Ardito", + "role": "Supporting Actor" + }, + { + "url": "harvey-keitel", + "name": "Harvey Keitel", + "role": "Supporting Actor" + }, + { + "url": "martin-scorsese", + "name": "Martin Scorsese", + "role": "Supporting Actor" + }, + { + "url": "peter-boyle", + "name": "Peter Boyle", + "role": "Supporting Actor" + }, + { + "url": "victor-argo", + "name": "Victor Argo", + "role": "Supporting Actor" + } + ], + "crew": [ + { + "name": "Martin Scorsese", + "url": "martin-scorsese", + "role": "Director / Direction" + }, + { + "name": "Julia Phillips", + "url": "julia-phillips", + "role": "Producer / Production" + }, + { + "name": "Michael Phillips", + "url": "michael-phillips", + "role": "Producer / Production" + }, + { + "name": "Columbia Pictures", + "url": "columbia-pictures", + "role": "Production Company / Production" + }, + { + "name": "Phillip M Goldfarb", + "url": "phillip-m-goldfarb", + "role": "Associate Producer / Production" + }, + { + "name": "Columbia Pictures", + "url": "columbia-pictures", + "role": "Distributor / Distribution" + }, + { + "name": "Paul Schrader", + "url": "paul-schrader", + "role": "Screenplay Writer / Writers" + }, + { + "name": "Michael Chapman", + "url": "michael-chapman", + "role": "Director of Photography / Camera and Electrical" + }, + { + "name": "Bernard Herrmann", + "url": "bernard-herrmann", + "role": "Music Director / Music" + }, + { + "name": "Charles Rosen", + "url": "charles-rosen", + "role": "Art Director / Art" + }, + { + "name": "Herbert F Mulligan", + "url": "herbert-f-mulligan", + "role": "Set Decorator / Art" + }, + { + "name": "Ruth Morley", + "url": "ruth-morley", + "role": "Costume Designer / Costume and Wardrobe" + }, + { + "name": "Melvin Shapiro", + "url": "melvin-shapiro", + "role": "Editor / Editorial" + }, + { + "name": "Tom Rolf", + "url": "tom-rolf", + "role": "Editor / Editorial" + }, + { + "name": "Irving Buchman", + "url": "irving-buchman", + "role": "Makeup Artist / Makeup and Hair" + } + ] +} \ No newline at end of file diff --git a/samples-jsons/the-great-gatsby.json b/samples-jsons/the-great-gatsby.json new file mode 100644 index 0000000..0d27a05 --- /dev/null +++ b/samples-jsons/the-great-gatsby.json @@ -0,0 +1,674 @@ +{ + "url": "the-great-gatsby", + "type": "Movie", + "name": "The Great Gatsby", + "cast": [ + { + "url": "carey-mulligan", + "name": "Carey Mulligan", + "role": "Actress" + }, + { + "url": "leonardo-dicaprio", + "name": "Leonardo DiCaprio", + "role": "Actor" + }, + { + "url": "adelaide-clemens", + "name": "Adelaide Clemens", + "role": "Supporting Actress" + }, + { + "url": "amitabh-bachchan", + "name": "Amitabh Bachchan", + "role": "Supporting Actor" + }, + { + "url": "barrie-laws", + "name": "Barrie Laws", + "role": "Supporting Actor" + }, + { + "url": "barry-otto", + "name": "Barry Otto", + "role": "Supporting Actor" + }, + { + "url": "brendan-maclean", + "name": "Brendan Maclean", + "role": "Supporting Actor" + }, + { + "url": "brenton-prince", + "name": "Brenton Prince", + "role": "Supporting Actor" + }, + { + "url": "brian-rooney", + "name": "Brian Rooney", + "role": "Supporting Actor" + }, + { + "url": "callan-mcauliffe", + "name": "Callan McAuliffe", + "role": "Supporting Actor" + }, + { + "url": "charlize-skinner", + "name": "Charlize Skinner", + "role": "Supporting Actress" + }, + { + "url": "conor-fogarty", + "name": "Conor Fogarty", + "role": "Supporting Actor" + }, + { + "url": "daniel-gill", + "name": "Daniel Gill", + "role": "Supporting Actor" + }, + { + "url": "david-furlong", + "name": "David Furlong", + "role": "Supporting Actor" + }, + { + "url": "eden-falk", + "name": "Eden Falk", + "role": "Supporting Actor" + }, + { + "url": "elizabeth-debicki", + "name": "Elizabeth Debicki", + "role": "Supporting Actress" + }, + { + "url": "emily-foreman", + "name": "Emily Foreman", + "role": "Supporting Actress" + }, + { + "url": "emmanuel-ekwenski", + "name": "Emmanuel Ekwenski", + "role": "Supporting Actor" + }, + { + "url": "frank-aldridge", + "name": "Frank Aldridge", + "role": "Supporting Actor" + }, + { + "url": "garrett-william-fountain", + "name": "Garrett William Fountain", + "role": "Supporting Actor" + }, + { + "url": "gemma-ward", + "name": "Gemma Ward", + "role": "Supporting Actress" + }, + { + "url": "goran-d-kleut", + "name": "Goran D Kleut", + "role": "Supporting Actor" + }, + { + "url": "gus-murray", + "name": "Gus Murray", + "role": "Supporting Actor" + }, + { + "url": "hamish-michael", + "name": "Hamish Michael", + "role": "Supporting Actor" + }, + { + "url": "isla-fisher", + "name": "Isla Fisher", + "role": "Supporting Actress" + }, + { + "url": "jack-thompson", + "name": "Jack Thompson", + "role": "Supporting Actor" + }, + { + "url": "jason-clarke", + "name": "Jason Clarke", + "role": "Supporting Actor" + }, + { + "url": "joel-edgerton", + "name": "Joel Edgerton", + "role": "Supporting Actor" + }, + { + "url": "john-maumau", + "name": "John Maumau", + "role": "Supporting Actor" + }, + { + "url": "kasia-stelmach", + "name": "Kasia Stelmach", + "role": "Supporting Actress" + }, + { + "url": "kate-mulvany", + "name": "Kate Mulvany", + "role": "Supporting Actress" + }, + { + "url": "kevin-mcglothan", + "name": "Kevin McGlothan", + "role": "Supporting Actor" + }, + { + "url": "kim-knuckey", + "name": "Kim Knuckey", + "role": "Supporting Actor" + }, + { + "url": "lisa-adam", + "name": "Lisa Adam", + "role": "Supporting Actress" + }, + { + "url": "mal-day", + "name": "Mal Day", + "role": "Supporting Actor" + }, + { + "url": "mark-lemon", + "name": "Mark Lemon", + "role": "Supporting Actor" + }, + { + "url": "max-cullen", + "name": "Max Cullen", + "role": "Supporting Actor" + }, + { + "url": "milan-pulvermacher", + "name": "Milan Pulvermacher", + "role": "Supporting Actor" + }, + { + "url": "nick-tate", + "name": "Nick Tate", + "role": "Supporting Actor" + }, + { + "url": "price-johnson", + "name": "Price Johnson", + "role": "Supporting Actor" + }, + { + "url": "richard-carter", + "name": "Richard Carter", + "role": "Supporting Actor" + }, + { + "url": "stephen-james-king", + "name": "Stephen James King", + "role": "Supporting Actor" + }, + { + "url": "steve-bisley", + "name": "Steve Bisley", + "role": "Supporting Actor" + }, + { + "url": "sylvana-vandertouw", + "name": "Sylvana Vandertouw", + "role": "Supporting Actress" + }, + { + "url": "tasman-palazzi", + "name": "Tasman Palazzi", + "role": "Supporting Actor" + }, + { + "url": "tiger-leacey-wyvill", + "name": "Tiger Leacey Wyvill", + "role": "Supporting Actress" + }, + { + "url": "tobey-maguire", + "name": "Tobey Maguire", + "role": "Supporting Actor" + }, + { + "url": "vince-colosimo", + "name": "Vince Colosimo", + "role": "Supporting Actor" + } + ], + "crew": [ + { + "name": "Baz Luhrmann", + "url": "baz-luhrmann", + "role": "Director / Direction" + }, + { + "name": "Emma Jamvold", + "url": "emma-jamvold", + "role": "First Assistant Director / Direction" + }, + { + "name": "Jennifer Leacey", + "url": "jennifer-leacey", + "role": "First Assistant Director / Direction" + }, + { + "name": "Glenn Ruehland", + "url": "glenn-ruehland", + "role": "Second Unit Director / Direction" + }, + { + "name": "Luke Doolan", + "url": "luke-doolan", + "role": "Second Unit Director / Direction" + }, + { + "name": "Darwin Brooks", + "url": "darwin-brooks", + "role": "Assistant Director / Direction" + }, + { + "name": "Eddie Thorne", + "url": "eddie-thorne", + "role": "Assistant Director / Direction" + }, + { + "name": "Henry Downes", + "url": "henry-downes", + "role": "Assistant Director / Direction" + }, + { + "name": "Peter Dunlop", + "url": "peter-dunlop", + "role": "Assistant Director / Direction" + }, + { + "name": "Samantha Smith", + "url": "samantha-smith", + "role": "Assistant Director / Direction" + }, + { + "name": "Baz Luhrmann", + "url": "baz-luhrmann", + "role": "Producer / Production" + }, + { + "name": "Catherine Knapman\t", + "url": "catherine-knapman", + "role": "Producer / Production" + }, + { + "name": "Catherine Martin", + "url": "catherine-martin", + "role": "Producer / Production" + }, + { + "name": "Douglas Wick", + "url": "douglas-wick", + "role": "Producer / Production" + }, + { + "name": "Lucy Fisher", + "url": "lucy-fisher", + "role": "Producer / Production" + }, + { + "name": "A&E Television Networks", + "url": "a-and-e-television-networks", + "role": "Production Company / Production" + }, + { + "name": "Bazmark Films", + "url": "bazmark-films", + "role": "Production Company / Production" + }, + { + "name": "Red Wagon Entertainment", + "url": "red-wagon-entertainment", + "role": "Production Company / Production" + }, + { + "name": "Warner Bros. Pictures", + "url": "warner-bros-pictures", + "role": "Production Company / Production" + }, + { + "name": "Anton Monsted", + "url": "anton-monsted", + "role": "Co-Producer / Production" + }, + { + "name": "Barrie M Osborne", + "url": "barrie-m-osborne", + "role": "Executive Producer / Production" + }, + { + "name": "Bruce Berman", + "url": "bruce-berman", + "role": "Executive Producer / Production" + }, + { + "name": "Alex Taussig", + "url": "alex-taussig", + "role": "Unit Production Manager / Production" + }, + { + "name": "ACME Film", + "url": "acme-film", + "role": "Distributor / Distribution" + }, + { + "name": "Golden Village Pictures", + "url": "golden-village-pictures", + "role": "Distributor / Distribution" + }, + { + "name": "Warner Bros", + "url": "warner-bros", + "role": "Distributor / Distribution" + }, + { + "name": "Warner Bros. Entertainment", + "url": "warner-bros-entertainment", + "role": "Distributor / Distribution" + }, + { + "name": "Baz Luhrmann", + "url": "baz-luhrmann", + "role": "Screenplay Writer / Writers" + }, + { + "name": "Craig Pearce", + "url": "craig-pearce", + "role": "Screenplay Writer / Writers" + }, + { + "name": "Simon Duggan", + "url": "simon-duggan", + "role": "Director of Photography / Camera and Electrical" + }, + { + "name": "Craig Armstrong", + "url": "craig-armstrong", + "role": "Music Director / Music" + }, + { + "name": "Universal Music Australia", + "url": "universal-music-australia", + "role": "Music Label / Music" + }, + { + "name": "Damian Candusso", + "url": "damian-candusso", + "role": "Sound Effects Editor / Sound" + }, + { + "name": "Damon Mouris", + "url": "damon-mouris", + "role": "Sound Effects Editor / Sound" + }, + { + "name": "Rick Lisle", + "url": "rick-lisle", + "role": "Sound Effects Editor / Sound" + }, + { + "name": "Fabian Sanjurjo", + "url": "fabian-sanjurjo", + "role": "Sound Format Supervisor / Sound" + }, + { + "name": "Glenn Butler", + "url": "glenn-butler", + "role": "Sound Re-recording Mixer / Sound" + }, + { + "name": "Guntis Sics", + "url": "guntis-sics", + "role": "Location Sound Recordist / Sound" + }, + { + "name": "Ines Richter", + "url": "ines-richter", + "role": "Sound Editor / Sound" + }, + { + "name": "Libby Villa", + "url": "libby-villa", + "role": "Sound Editor / Sound" + }, + { + "name": "William Ward", + "url": "william-ward", + "role": "Sound Editor / Sound" + }, + { + "name": "Andy Bradfield", + "url": "andy-bradfield", + "role": "Assistant Mix Engineer / Sound" + }, + { + "name": "Ian Thomson", + "url": "ian-thomson", + "role": "Audio Assistant / Sound" + }, + { + "name": "Catherine Martin", + "url": "catherine-martin", + "role": "Production Designer / Art" + }, + { + "name": "Damien Drew", + "url": "damien-drew", + "role": "Art Director / Art" + }, + { + "name": "Ian Gracie", + "url": "ian-gracie", + "role": "Art Director / Art" + }, + { + "name": "Michael Turner\t", + "url": "michael-turner", + "role": "Art Director / Art" + }, + { + "name": "Beverley Dunn", + "url": "beverley-dunn", + "role": "Set Decorator / Art" + }, + { + "name": "Nikki Barrett", + "url": "nikki-barrett", + "role": "Casting Director / Casting" + }, + { + "name": "Ronna Kress", + "url": "ronna-kress", + "role": "Casting Director / Casting" + }, + { + "name": "Catherine Martin", + "url": "catherine-martin", + "role": "Costume Designer / Costume and Wardrobe" + }, + { + "name": "Jason Ballantine", + "url": "jason-ballantine", + "role": "Editor / Editorial" + }, + { + "name": "Jonathan Redmond", + "url": "jonathan-redmond", + "role": "Editor / Editorial" + }, + { + "name": "Matt Villa", + "url": "matt-villa", + "role": "Editor / Editorial" + }, + { + "name": "Catherine Biggs", + "url": "catherine-biggs", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "Diane Dusting", + "url": "diane-dusting", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "Lara Jade Birch", + "url": "lara-jade-birch", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "Matteo Silvi", + "url": "matteo-silvi", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "Lara Jade Birch", + "url": "lara-jade-birch", + "role": "Hair Stylist / Makeup and Hair" + }, + { + "name": "Warren Hanneman", + "url": "warren-hanneman", + "role": "Hair Stylist / Makeup and Hair" + }, + { + "name": "Andrea Berchtold", + "url": "andrea-berchtold", + "role": "Stunt Director / Stunts" + }, + { + "name": "Tony Lynch", + "url": "tony-lynch", + "role": "Stunt Director / Stunts" + }, + { + "name": "Ashley Fairfield", + "url": "ashley-fairfield", + "role": "Stunt Coordinator / Stunts" + }, + { + "name": "Glenn Ruehland", + "url": "glenn-ruehland", + "role": "Stunt Coordinator / Stunts" + }, + { + "name": "Ben Toyer", + "url": "ben-toyer", + "role": "Stunt Performer / Stunts" + }, + { + "name": "Blake Lindsell", + "url": "blake-lindsell", + "role": "Stunt Performer / Stunts" + }, + { + "name": "Joel Amos Byrnes", + "url": "joel-amos-byrnes", + "role": "Stunt Performer / Stunts" + }, + { + "name": "Karl Van Moorsel", + "url": "karl-van-moorsel", + "role": "Stunt Performer / Stunts" + }, + { + "name": "Leon Stripp", + "url": "leon-stripp", + "role": "Stunt Performer / Stunts" + }, + { + "name": "Neal Horton", + "url": "neal-horton", + "role": "Stunt Performer / Stunts" + }, + { + "name": "Philip Partridge", + "url": "philip-partridge", + "role": "Stunt Performer / Stunts" + }, + { + "name": "Rea Corcoran", + "url": "rea-corcoran", + "role": "Stunt Performer / Stunts" + }, + { + "name": "Stephen Murdoch", + "url": "stephen-murdoch", + "role": "Stunt Performer / Stunts" + }, + { + "name": "Ingrid Kleinig", + "url": "ingrid-kleinig", + "role": "Stunt Double / Stunts" + }, + { + "name": "Nash Edgerton", + "url": "nash-edgerton", + "role": "Stunt Double / Stunts" + }, + { + "name": "Lee Adamson", + "url": "lee-adamson", + "role": "Stunt Driver / Stunts" + }, + { + "name": "Darren A Bell", + "url": "darren-a-bell", + "role": "Visual Effects Producer / Visual Effects" + }, + { + "name": "Gayle Munro", + "url": "gayle-munro", + "role": "Visual Effects Producer / Visual Effects" + }, + { + "name": "Ineke Majoor", + "url": "ineke-majoor", + "role": "Visual Effects Producer / Visual Effects" + }, + { + "name": "Ingrid Johnston", + "url": "ingrid-johnston", + "role": "Visual Effects Producer / Visual Effects" + }, + { + "name": "Jacqueline Lopez", + "url": "jacqueline-lopez", + "role": "Visual Effects Producer / Visual Effects" + }, + { + "name": "Joyce Cox", + "url": "joyce-cox", + "role": "Visual Effects Producer / Visual Effects" + }, + { + "name": "Prue Fletcher", + "url": "prue-fletcher", + "role": "Visual Effects Producer / Visual Effects" + }, + { + "name": "Richard Thwaites", + "url": "richard-thwaites", + "role": "Visual Effects Producer / Visual Effects" + }, + { + "name": "Sarah Cauchois", + "url": "sarah-cauchois", + "role": "Visual Effects Producer / Visual Effects" + } + ] +} \ No newline at end of file diff --git a/samples-jsons/the-wolf-of-wall-street.json b/samples-jsons/the-wolf-of-wall-street.json new file mode 100644 index 0000000..dec58b8 --- /dev/null +++ b/samples-jsons/the-wolf-of-wall-street.json @@ -0,0 +1,739 @@ +{ + "url": "the-wolf-of-wall-street", + "type": "Movie", + "name": "The Wolf of Wall Street", + "cast": [ + { + "url": "leonardo-dicaprio", + "name": "Leonardo DiCaprio", + "role": "Actor" + }, + { + "url": "matthew-mcconaughey", + "name": "Matthew McConaughey", + "role": "Actor" + }, + { + "url": "aaron-lazar", + "name": "Aaron Lazar", + "role": "Supporting Actor" + }, + { + "url": "adria-baratta", + "name": "Adria Baratta", + "role": "Supporting Actress" + }, + { + "url": "ari-barkan", + "name": "Ari Barkan", + "role": "Supporting Actor" + }, + { + "url": "armen-garo", + "name": "Armen Garo", + "role": "Supporting Actor" + }, + { + "url": "ashley-blankenship", + "name": "Ashley Blankenship", + "role": "Supporting Actress" + }, + { + "url": "ashley-springer", + "name": "Ashley Springer", + "role": "Supporting Actor" + }, + { + "url": "ashlie-atkinson", + "name": "Ashlie Atkinson", + "role": "Supporting Actress" + }, + { + "url": "aya-cash", + "name": "Aya Cash", + "role": "Supporting Actress" + }, + { + "url": "barry-rothbart", + "name": "Barry Rothbart", + "role": "Supporting Actor" + }, + { + "url": "ben-leasure", + "name": "Ben Leasure", + "role": "Supporting Actor" + }, + { + "url": "ben-rameaka", + "name": "Ben Rameaka", + "role": "Supporting Actor" + }, + { + "url": "ben-van-bergen", + "name": "Ben Van Bergen", + "role": "Supporting Actor" + }, + { + "url": "blago-simon", + "name": "Blago Simon", + "role": "Supporting Actor" + }, + { + "url": "bo-dietl", + "name": "Bo Dietl", + "role": "Supporting Actor" + }, + { + "url": "brett-fazio", + "name": "Brett Fazio", + "role": "Supporting Actor" + }, + { + "url": "brian-colin-foley", + "name": "Brian Colin Foley", + "role": "Supporting Actor" + }, + { + "url": "brian-sacca", + "name": "Brian Sacca", + "role": "Supporting Actor" + }, + { + "url": "carla-corvo", + "name": "Carla Corvo", + "role": "Supporting Actress" + }, + { + "url": "catherine-curtin", + "name": "Catherine Curtin", + "role": "Supporting Actress" + }, + { + "url": "chris-caldovino", + "name": "Chris Caldovino", + "role": "Supporting Actor" + }, + { + "url": "chris-j-cullen", + "name": "Chris J Cullen", + "role": "Supporting Actor" + }, + { + "url": "chris-nunez", + "name": "Chris Nuñez", + "role": "Supporting Actor" + }, + { + "url": "chris-riggi", + "name": "Chris Riggi", + "role": "Supporting Actor" + }, + { + "url": "christina-jeffs", + "name": "Christina Jeffs", + "role": "Supporting Actress" + }, + { + "url": "christine-ebersole", + "name": "Christine Ebersole", + "role": "Supporting Actress" + }, + { + "url": "chuck-schanamann", + "name": "Chuck Schanamann", + "role": "Supporting Actor" + }, + { + "url": "cristin-milioti", + "name": "Cristin Milioti", + "role": "Supporting Actress" + }, + { + "url": "dan-bittner", + "name": "Dan Bittner", + "role": "Supporting Actor" + }, + { + "url": "dan-daily", + "name": "Dan Daily", + "role": "Supporting Actor" + }, + { + "url": "dan-hunter", + "name": "Dan Hunter", + "role": "Supporting Actor" + }, + { + "url": "daniel-flaherty", + "name": "Daniel Flaherty", + "role": "Supporting Actor" + }, + { + "url": "danny-a-abeckaser", + "name": "Danny A Abeckaser", + "role": "Supporting Actor" + }, + { + "url": "deema-aitken", + "name": "Deema Aitken", + "role": "Supporting Actor" + }, + { + "url": "dierdre-reimold", + "name": "Dierdre Reimold", + "role": "Supporting Actress" + }, + { + "url": "donnie-keshawarz", + "name": "Donnie Keshawarz", + "role": "Supporting Actor" + }, + { + "url": "dustin-kerns", + "name": "Dustin Kerns", + "role": "Supporting Actor" + }, + { + "url": "emily-tremaine", + "name": "Emily Tremaine", + "role": "Supporting Actress" + }, + { + "url": "erika-lynn", + "name": "Erika Lynn", + "role": "Supporting Actress" + }, + { + "url": "ethan-suplee", + "name": "Ethan Suplee", + "role": "Supporting Actor" + }, + { + "url": "fileena-bahris", + "name": "Fileena Bahris", + "role": "Supporting Actress" + }, + { + "url": "fran-lebowitz", + "name": "Fran Lebowitz", + "role": "Supporting Actor" + }, + { + "url": "garry-pastore", + "name": "Garry Pastore", + "role": "Supporting Actor" + }, + { + "url": "georgie-lalov", + "name": "Georgie Lalov", + "role": "Supporting Actor" + }, + { + "url": "gerard-sullivan", + "name": "Gerard Sullivan", + "role": "Supporting Actor" + }, + { + "url": "giselle-eisenberg", + "name": "Giselle Eisenberg", + "role": "Supporting Actress" + }, + { + "url": "gregory-perri", + "name": "Gregory Perri", + "role": "Supporting Actor" + }, + { + "url": "henry-zebrowski", + "name": "Henry Zebrowski", + "role": "Supporting Actor" + }, + { + "url": "jc-mackenzie", + "name": "JC MacKenzie", + "role": "Supporting Actor" + }, + { + "url": "jake-hoffman", + "name": "Jake Hoffman", + "role": "Supporting Actor" + }, + { + "url": "jason-furlani", + "name": "Jason Furlani", + "role": "Supporting Actor" + }, + { + "url": "jean-dujardin", + "name": "Jean Dujardin", + "role": "Supporting Actor" + }, + { + "url": "jeremy-bobb", + "name": "Jeremy Bobb", + "role": "Supporting Actor" + }, + { + "url": "joanna-lumley", + "name": "Joanna Lumley", + "role": "Supporting Actress" + }, + { + "url": "john-behlmann", + "name": "John Behlmann", + "role": "Supporting Actor" + }, + { + "url": "johnathan-tchaikovsky", + "name": "Johnathan Tchaikovsky", + "role": "Supporting Actor" + }, + { + "url": "johnnie-mae", + "name": "Johnnie Mae", + "role": "Supporting Actress" + }, + { + "url": "jon-bernthal", + "name": "Jon Bernthal", + "role": "Supporting Actor" + }, + { + "url": "jon-douglas-rainey", + "name": "Jon Douglas Rainey", + "role": "Supporting Actor" + }, + { + "url": "jon-favreau", + "name": "Jon Favreau", + "role": "Supporting Actor" + }, + { + "url": "jonah-hill", + "name": "Jonah Hill", + "role": "Supporting Actor" + }, + { + "url": "joseph-dimartino", + "name": "Joseph Dimartino", + "role": "Supporting Actor" + }, + { + "url": "jose-ramon-rosario", + "name": "José Ramón Rosario", + "role": "Supporting Actor" + }, + { + "url": "julian-brand", + "name": "Julian Brand", + "role": "Supporting Actor" + }, + { + "url": "julie-gudz", + "name": "Julie Gudz", + "role": "Supporting Actress" + }, + { + "url": "katarina-cas", + "name": "Katarina Cas", + "role": "Supporting Actress" + }, + { + "url": "katrina-elizabeth-perkins", + "name": "Katrina Elizabeth Perkins", + "role": "Supporting Actress" + }, + { + "url": "kelly-southerland", + "name": "Kelly Southerland", + "role": "Supporting Actor" + }, + { + "url": "kenneth-choi", + "name": "Kenneth Choi", + "role": "Supporting Actor" + }, + { + "url": "kyle-chandler", + "name": "Kyle Chandler", + "role": "Supporting Actor" + }, + { + "url": "lawrence-smith", + "name": "Lawrence Smith", + "role": "Supporting Actor" + }, + { + "url": "mackenzie-meehan", + "name": "Mackenzie Meehan", + "role": "Supporting Actress" + }, + { + "url": "madeleine-wade", + "name": "Madeleine Wade", + "role": "Supporting Actress" + }, + { + "url": "madison-mckinley", + "name": "Madison McKinley", + "role": "Supporting Actress" + }, + { + "url": "margot-robbie", + "name": "Margot Robbie", + "role": "Supporting Actress" + }, + { + "url": "maria-di-angelis", + "name": "Maria Di Angelis", + "role": "Supporting Actress" + }, + { + "url": "marianne-tatum", + "name": "Marianne Tatum", + "role": "Supporting Actress" + }, + { + "url": "matthew-rauch", + "name": "Matthew Rauch", + "role": "Supporting Actor" + }, + { + "url": "meghan-rafferty", + "name": "Meghan Rafferty", + "role": "Supporting Actress" + }, + { + "url": "meki-saldana", + "name": "Meki Saldana", + "role": "Supporting Actress" + }, + { + "url": "meredith-riley-stewart", + "name": "Meredith Riley Stewart", + "role": "Supporting Actress" + }, + { + "url": "michael-devine", + "name": "Michael Devine", + "role": "Supporting Actor" + }, + { + "url": "michael-izquierdo", + "name": "Michael Izquierdo", + "role": "Supporting Actor" + }, + { + "url": "michael-nathanson", + "name": "Michael Nathanson", + "role": "Supporting Actor" + }, + { + "url": "mike-catapano", + "name": "Mike Catapano", + "role": "Supporting Actor" + }, + { + "url": "nicole-neuman", + "name": "Nicole Neuman", + "role": "Supporting Actress" + }, + { + "url": "nicole-rutigliano", + "name": "Nicole Rutigliano", + "role": "Supporting Actress" + }, + { + "url": "pj-byrne", + "name": "PJ Byrne", + "role": "Supporting Actor" + }, + { + "url": "remy-bennett", + "name": "Remy Bennett", + "role": "Supporting Actress" + }, + { + "url": "richard-r-corapi", + "name": "Richard R Corapi", + "role": "Supporting Actor" + }, + { + "url": "rizwan-manji", + "name": "Rizwan Manji", + "role": "Supporting Actor" + }, + { + "url": "rob-reiner", + "name": "Rob Reiner", + "role": "Supporting Actor" + }, + { + "url": "robert-clohessy", + "name": "Robert Clohessy", + "role": "Supporting Actor" + }, + { + "url": "sandra-nelson", + "name": "Sandra Nelson", + "role": "Supporting Actress" + }, + { + "url": "scott-nicholson", + "name": "Scott Nicholson", + "role": "Supporting Actor" + }, + { + "url": "sebastian-tillinger", + "name": "Sebastian Tillinger", + "role": "Supporting Actor" + }, + { + "url": "shea-whigham", + "name": "Shea Whigham", + "role": "Supporting Actor" + }, + { + "url": "silvia-kal", + "name": "Silvia Kal", + "role": "Supporting Actress" + }, + { + "url": "spenser-granese", + "name": "Spenser Granese", + "role": "Supporting Actor" + }, + { + "url": "spike-jonze", + "name": "Spike Jonze", + "role": "Supporting Actor" + }, + { + "url": "stephanie-kurtzuba", + "name": "Stephanie Kurtzuba", + "role": "Supporting Actress" + }, + { + "url": "stephen-kunken", + "name": "Stephen Kunken", + "role": "Supporting Actor" + }, + { + "url": "steve-garfanti", + "name": "Steve Garfanti", + "role": "Supporting Actor" + }, + { + "url": "steve-routman", + "name": "Steve Routman", + "role": "Supporting Actor" + }, + { + "url": "steven-boyer", + "name": "Steven Boyer", + "role": "Supporting Actor" + }, + { + "url": "ward-horton", + "name": "Ward Horton", + "role": "Supporting Actor" + }, + { + "url": "welker-white", + "name": "Welker White", + "role": "Supporting Actress" + }, + { + "url": "zana-markelson", + "name": "Zana Markelson", + "role": "Supporting Actress" + }, + { + "url": "zineb-oukach", + "name": "Zineb Oukach", + "role": "Supporting Actress" + } + ], + "crew": [ + { + "name": "Martin Scorsese", + "url": "martin-scorsese", + "role": "Director / Direction" + }, + { + "name": "Adam Somner", + "url": "adam-somner", + "role": "First Assistant Director / Direction" + }, + { + "name": "Emma Tillinger Koskoff", + "url": "emma-tillinger-koskoff", + "role": "Producer / Production" + }, + { + "name": "Joey McFarland", + "url": "joey-mcfarland", + "role": "Producer / Production" + }, + { + "name": "Leonardo DiCaprio", + "url": "leonardo-dicaprio", + "role": "Producer / Production" + }, + { + "name": "Martin Scorsese", + "url": "martin-scorsese", + "role": "Producer / Production" + }, + { + "name": "Riza Aziz", + "url": "riza-aziz", + "role": "Producer / Production" + }, + { + "name": "Appian Way", + "url": "appian-way", + "role": "Production Company / Production" + }, + { + "name": "EMJAG Productions", + "url": "emjag-productions", + "role": "Production Company / Production" + }, + { + "name": "Red Granite Pictures", + "url": "red-granite-pictures", + "role": "Production Company / Production" + }, + { + "name": "Sikelia Productions", + "url": "sikelia-productions", + "role": "Production Company / Production" + }, + { + "name": "Alexandra Milchan", + "url": "alexandra-milchan", + "role": "Executive Producer / Production" + }, + { + "name": "Georgia Kacandes", + "url": "georgia-kacandes", + "role": "Executive Producer / Production" + }, + { + "name": "Irwin Winkler", + "url": "irwin-winkler", + "role": "Executive Producer / Production" + }, + { + "name": "Georgia Kacandes", + "url": "georgia-kacandes", + "role": "Unit Production Manager / Production" + }, + { + "name": "Richard Baratta", + "url": "richard-baratta", + "role": "Unit Production Manager / Production" + }, + { + "name": "Terence Winter", + "url": "terence-winter", + "role": "Screenplay Writer / Writers" + }, + { + "name": "Rodrigo Prieto", + "url": "rodrigo-prieto", + "role": "Director of Photography / Camera and Electrical" + }, + { + "name": "Howard Shore", + "url": "howard-shore", + "role": "Music Director / Music" + }, + { + "name": "James Sabat", + "url": "james-sabat", + "role": "Sound Mixer / Sound" + }, + { + "name": "Bob Shaw", + "url": "bob-shaw", + "role": "Production Designer / Art" + }, + { + "name": "Chris Shriver", + "url": "chris-shriver", + "role": "Art Director / Art" + }, + { + "name": "David Meyer", + "url": "david-meyer", + "role": "Set Designer / Art" + }, + { + "name": "Ellen Christiansen", + "url": "ellen-christiansen", + "role": "Set Decorator / Art" + }, + { + "name": "Alexios Chrysikos", + "url": "alexios-chrysikos", + "role": "Assistant Art Director / Art" + }, + { + "name": "Ellen Lewis", + "url": "ellen-lewis", + "role": "Casting Director / Casting" + }, + { + "name": "Sandy Powell", + "url": "sandy-powell", + "role": "Costume Designer / Costume and Wardrobe" + }, + { + "name": "Thelma Schoonmaker", + "url": "thelma-schoonmaker", + "role": "Editor / Editorial" + }, + { + "name": "Christine Domaniecki", + "url": "christine-domaniecki", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "Francesca Buccellato", + "url": "francesca-buccellato", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "Jill Astmann", + "url": "jill-astmann", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "Rosemary Redlin", + "url": "rosemary-redlin", + "role": "Makeup Artist / Makeup and Hair" + }, + { + "name": "Jacqueline Weiss", + "url": "jacqueline-weiss", + "role": "Hair Stylist / Makeup and Hair" + }, + { + "name": "Joanne Cocuzza", + "url": "joanne-cocuzza", + "role": "Hair Stylist / Makeup and Hair" + }, + { + "name": "Kelley Cribben", + "url": "kelley-cribben", + "role": "Post Production Supervisor / Post Production" + }, + { + "name": "Stephen Powers", + "url": "stephen-powers", + "role": "Special Effects Technician / Special Effects" + } + ] +} \ No newline at end of file