diff --git a/README.md b/README.md
index 8388f4e..a5a33eb 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+
+
`#node.js` `#master-in-software-engineering`
@@ -17,6 +19,7 @@ In this project you will learn how to create a cli app with Node.js.
- [Project requirements](#project-requirements)
- [Project delivery](#project-delivery)
- [Resources](#resources)
+- [Command Line](#command-line)
## Getting Started
@@ -44,7 +47,7 @@ section.
The branches follow a naming strategy like the following:
- `main`: includes the main contents and the instructions
-- `assembler-solution`: includes the solution
+
### Fetching All the Branches
@@ -78,14 +81,6 @@ Run the following command in your terminal after cloning the main repo:
$ npm install
```
-### Running the Tests
-
-The tests that validate your solution can be executed by runing the following
-command:
-
-```
-$ npm run test
-```
### Git `precommit` and `prepush` Hooks
@@ -103,20 +98,40 @@ In this pill we won't deploy the app.
- `prettier`
- `lint-staged`
- `husky`
+- `Commander`
+- `Ora`
+- `Chalk`
+
## The Project
-In this project you will build a cli app similar to the following screenshot.
+In this project we have build an CLI command line using MovieDb's API.
+
+
+## Command Line
+
+You are required to use the following command line to execute the projects functions
-
+#### To fetch data
-## Project requirements
+- `./moviedb.js command... ---options... --flags...`
+- `OUR OPTIONS`
+- Get Persons
+ -p, --popular", "Fetch the popular persons"
+ --page ''"
+- Get Person
+-i, --id ", "The id of the person
+- Get Movies
+-p, --popular", "Fetch the popular movies
+-n, --now-playing", "Fetch the movies that are playing now
+- Get Movie
+-i, --id ", "The id of the movie
+-r, --reviews", "Fetch the reviews of the movie
+
+--save", "Save the data in a local file
+--local", "Read the data from the local file
-This is an overview of the main requirements of this project. The exact ones are
-found in the doc that the academic team will provide you.
-- You must follow all the instructions of the project step-by-step
-- You should always try to solve them by yourself before asking for help
- You should always help your team members and fellow students of the master so
that you can all learn together and become better software developers and team
members
@@ -124,20 +139,11 @@ found in the doc that the academic team will provide you.
- Once you are done, you can move on to the optional ones that are marked as
`Extra 💯`
-## Project delivery
-
-To deliver this project you must follow the steps indicated in the document:
-
-- [Submitting a solution](https://www.notion.so/Submitting-a-solution-524dab1a71dd4b96903f26385e24cdb6)
## Resources
- See the document we provide
-## License
-
-This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
-for details
## Contributors ✨
@@ -147,11 +153,11 @@ Thanks goes to these wonderful people
-
+
+ - Jonathan Cedeño
+
- Alvaro Merino
+
- Sebastian Brupbacher
+
@@ -160,4 +166,4 @@ Thanks goes to these wonderful people
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
-specification. Contributions of any kind welcome!
+specification. Contributions of any kind welcome!
\ No newline at end of file
diff --git a/docs/MovieDB CLI.postman_collection.json b/docs/MovieDB CLI.postman_collection.json
new file mode 100644
index 0000000..035877b
--- /dev/null
+++ b/docs/MovieDB CLI.postman_collection.json
@@ -0,0 +1,190 @@
+{
+ "info": {
+ "_postman_id": "97fe2bcc-f30d-49c5-9a72-8ad1f34e71aa",
+ "name": "MovieDB CLI",
+ "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
+ },
+ "item": [
+ {
+ "name": "Get Persons",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "https://api.themoviedb.org/3/person/popular?page=3&api_key=68f9f55926a0797cb1d0996f1987c150",
+ "protocol": "https",
+ "host": [
+ "api",
+ "themoviedb",
+ "org"
+ ],
+ "path": [
+ "3",
+ "person",
+ "popular"
+ ],
+ "query": [
+ {
+ "key": "page",
+ "value": "3"
+ },
+ {
+ "key": "api_key",
+ "value": "68f9f55926a0797cb1d0996f1987c150"
+ }
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Get Individual Person",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "https://api.themoviedb.org/3/person/3?api_key=68f9f55926a0797cb1d0996f1987c150",
+ "protocol": "https",
+ "host": [
+ "api",
+ "themoviedb",
+ "org"
+ ],
+ "path": [
+ "3",
+ "person",
+ "3"
+ ],
+ "query": [
+ {
+ "key": "api_key",
+ "value": "68f9f55926a0797cb1d0996f1987c150"
+ }
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Get Movies",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "https://api.themoviedb.org/3/movie/popular?page=3&api_key=68f9f55926a0797cb1d0996f1987c150",
+ "protocol": "https",
+ "host": [
+ "api",
+ "themoviedb",
+ "org"
+ ],
+ "path": [
+ "3",
+ "movie",
+ "popular"
+ ],
+ "query": [
+ {
+ "key": "page",
+ "value": "3"
+ },
+ {
+ "key": "api_key",
+ "value": "68f9f55926a0797cb1d0996f1987c150"
+ }
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Get Movies Now Playing",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "https://api.themoviedb.org/3/movie/now_playing?page=3&api_key=68f9f55926a0797cb1d0996f1987c150",
+ "protocol": "https",
+ "host": [
+ "api",
+ "themoviedb",
+ "org"
+ ],
+ "path": [
+ "3",
+ "movie",
+ "now_playing"
+ ],
+ "query": [
+ {
+ "key": "page",
+ "value": "3"
+ },
+ {
+ "key": "api_key",
+ "value": "68f9f55926a0797cb1d0996f1987c150"
+ }
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Get Individual Movie",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "https://api.themoviedb.org/3/movie/3?api_key=68f9f55926a0797cb1d0996f1987c150",
+ "protocol": "https",
+ "host": [
+ "api",
+ "themoviedb",
+ "org"
+ ],
+ "path": [
+ "3",
+ "movie",
+ "3"
+ ],
+ "query": [
+ {
+ "key": "api_key",
+ "value": "68f9f55926a0797cb1d0996f1987c150"
+ }
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Get Individual Movie with Reviews",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "url": {
+ "raw": "https://api.themoviedb.org/3/movie/3/reviews?api_key=68f9f55926a0797cb1d0996f1987c150",
+ "protocol": "https",
+ "host": [
+ "api",
+ "themoviedb",
+ "org"
+ ],
+ "path": [
+ "3",
+ "movie",
+ "3",
+ "reviews"
+ ],
+ "query": [
+ {
+ "key": "api_key",
+ "value": "68f9f55926a0797cb1d0996f1987c150"
+ }
+ ]
+ }
+ },
+ "response": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/files/app-icon.png b/files/app-icon.png
new file mode 100644
index 0000000..13a575f
Binary files /dev/null and b/files/app-icon.png differ
diff --git a/files/movies folder/movie-reviews.json b/files/movies folder/movie-reviews.json
new file mode 100644
index 0000000..87d64ca
--- /dev/null
+++ b/files/movies folder/movie-reviews.json
@@ -0,0 +1 @@
+{"id":9,"page":1,"results":[],"total_pages":0,"total_results":0}
\ No newline at end of file
diff --git a/files/movies folder/movie.json b/files/movies folder/movie.json
new file mode 100644
index 0000000..e2d3ed6
--- /dev/null
+++ b/files/movies folder/movie.json
@@ -0,0 +1 @@
+{"adult":false,"backdrop_path":"/hQ4pYsIbP22TMXOUdSfC2mjWrO0.jpg","belongs_to_collection":null,"budget":0,"genres":[{"id":18,"name":"Drama"},{"id":80,"name":"Crime"},{"id":35,"name":"Comedy"}],"homepage":"","id":2,"imdb_id":"tt0094675","original_language":"fi","original_title":"Ariel","overview":"Taisto Kasurinen is a Finnish coal miner whose father has just committed suicide and who is framed for a crime he did not commit. In jail, he starts to dream about leaving the country and starting a new life. He escapes from prison but things don't go as planned...","popularity":7.237,"poster_path":"/ojDg0PGvs6R9xYFodRct2kdI6wC.jpg","production_companies":[{"id":2303,"logo_path":null,"name":"Villealfa Filmproductions","origin_country":"FI"}],"production_countries":[{"iso_3166_1":"FI","name":"Finland"}],"release_date":"1988-10-21","revenue":0,"runtime":73,"spoken_languages":[{"english_name":"German","iso_639_1":"de","name":"Deutsch"},{"english_name":"Finnish","iso_639_1":"fi","name":"suomi"}],"status":"Released","tagline":"","title":"Ariel","video":false,"vote_average":6.8,"vote_count":142}
\ No newline at end of file
diff --git a/files/movies folder/now-playing-movies.json b/files/movies folder/now-playing-movies.json
new file mode 100644
index 0000000..d5c0e52
--- /dev/null
+++ b/files/movies folder/now-playing-movies.json
@@ -0,0 +1 @@
+{"dates":{"maximum":"2021-08-01","minimum":"2021-06-14"},"page":5,"results":[{"adult":false,"backdrop_path":"/eShw0LB5CkoEfYtpUcXPD85oz5Q.jpg","genre_ids":[27,53,35,14],"id":551804,"original_language":"en","original_title":"Freaky","overview":"A mystical, ancient dagger causes a notorious serial killer to magically switch bodies with a 17-year-old girl.","popularity":48.902,"poster_path":"/8xC6QSyxrpm0D5A6iyHNemEWBVe.jpg","release_date":"2020-11-12","title":"Freaky","video":false,"vote_average":6.8,"vote_count":746},{"adult":false,"backdrop_path":"/gJgaleXnuJX6trB0U0x1hYbPJY1.jpg","genre_ids":[12,35],"id":577242,"original_language":"fr","original_title":"Kaamelott : Premier volet","overview":"Following the end of the acclaimed tv series, King Arthur will oppose Lancelot's army to get the throne back after his flee to Rome.","popularity":47.412,"poster_path":"/negQj3ch5bfvSdqoWz9eZMHyQ4b.jpg","release_date":"2021-07-21","title":"Kaamelott - The First Chapter","video":false,"vote_average":7.6,"vote_count":139},{"adult":false,"backdrop_path":"/3sTjAagABWM68nitUlrNNjI5gYW.jpg","genre_ids":[10751,14,35],"id":252,"original_language":"en","original_title":"Willy Wonka & the Chocolate Factory","overview":"When eccentric candy man Willy Wonka promises a lifetime supply of sweets and a tour of his chocolate factory to five lucky kids, penniless Charlie Bucket seeks the golden ticket that will make him a winner.","popularity":39.179,"poster_path":"/avEUV2YWABEVqvpSjif0NKmTykS.jpg","release_date":"1971-06-29","title":"Willy Wonka & the Chocolate Factory","video":false,"vote_average":7.5,"vote_count":2444},{"adult":false,"backdrop_path":"/wRrhiUWQSrmCzuVRTUfrei6p3VY.jpg","genre_ids":[28,35,80],"id":650783,"original_language":"en","original_title":"The Comeback Trail","overview":"Two movie producers who owe money to the mob set up their aging movie star for an insurance scam to try and save themselves. But they wind up getting more than they ever imagined.","popularity":67.336,"poster_path":"/ublJIJbc2NZ30ptXj4O2d2apo1t.jpg","release_date":"2020-11-12","title":"The Comeback Trail","video":false,"vote_average":6.3,"vote_count":43},{"adult":false,"backdrop_path":"/dXQLVJxvScwtUtORAiaAxgikmtC.jpg","genre_ids":[18,53],"id":644583,"original_language":"en","original_title":"The Mauritanian","overview":"A detainee at the U.S military's Guantanamo Bay detention center is held without charges for over a decade and seeks help from a defense attorney for his release.","popularity":37.97,"poster_path":"/lIADEa6oH74uUapjsPbNRzxus8M.jpg","release_date":"2021-02-10","title":"The Mauritanian","video":false,"vote_average":7.5,"vote_count":423},{"adult":false,"backdrop_path":"/sFHKmVxJYoNK08yz0WbJrxeK4iI.jpg","genre_ids":[18,80,53],"id":616651,"original_language":"en","original_title":"Stillwater","overview":"Bill Baker, an American oil-rig roughneck from Oklahoma, travels to Marseille to visit his estranged daughter, Allison, who is in prison for a murder she claims she did not commit. Confronted with language barriers, cultural differences, and a complicated legal system, Bill builds a new life for himself in France as he makes it his personal mission to exonerate his daughter.","popularity":47.493,"poster_path":"/gzV6cxmwsq3RDKgr9wnpn55eIpx.jpg","release_date":"2021-07-30","title":"Stillwater","video":false,"vote_average":5.6,"vote_count":7},{"adult":false,"backdrop_path":"/gpFBYlNHCaxiqArTI2TysgVy4l0.jpg","genre_ids":[18,36],"id":583406,"original_language":"en","original_title":"Judas and the Black Messiah","overview":"Bill O'Neal infiltrates the Black Panthers on the orders of FBI Agent Mitchell and J. Edgar Hoover. As Black Panther Chairman Fred Hampton ascends—falling for a fellow revolutionary en route—a battle wages for O’Neal’s soul.","popularity":32.723,"poster_path":"/gPRy77DNDeLrvGyfloFqnZ7HA7o.jpg","release_date":"2021-02-12","title":"Judas and the Black Messiah","video":false,"vote_average":7.5,"vote_count":680},{"adult":false,"backdrop_path":"/rWrvcsrvISKXdMOzCdkvU3Jtg0j.jpg","genre_ids":[53,80,18],"id":582014,"original_language":"en","original_title":"Promising Young Woman","overview":"A young woman, traumatized by a tragic event in her past, seeks out vengeance against those who crossed her path.","popularity":36.629,"poster_path":"/73QoFJFmUrJfDG2EynFjNc5gJxk.jpg","release_date":"2020-12-13","title":"Promising Young Woman","video":false,"vote_average":7.6,"vote_count":1337},{"adult":false,"backdrop_path":"/xG8MoAb91jRGi01iwU0UMpXNlvK.jpg","genre_ids":[878,28],"id":688258,"original_language":"en","original_title":"Occupation: Rainfall","overview":"Two years into an intergalactic invasion of Earth, survivors in Sydney, Australia, fight back in a desperate ground war. As casualties mount by the day, the resistance and their unexpected allies, uncover a plot that could see the war come to a decisive end. With the Alien invaders hell-bent on making earth their new home, the race is on to save mankind.","popularity":30.694,"poster_path":"/vpq8XjZ3ZalcbqWOYIdqcV7FbIJ.jpg","release_date":"2021-01-28","title":"Occupation: Rainfall","video":false,"vote_average":6.7,"vote_count":59},{"adult":false,"backdrop_path":"/3GgkzCDq6KYpcmJmcOKh27hYRyj.jpg","genre_ids":[12,16,10751,14],"id":588921,"original_language":"en","original_title":"Ainbo: Spirit of the Amazon","overview":"An epic journey of a young hero and her Spirit Guides, 'Dillo' a cute and humorous armadillo and \"Vaca\" a goofy oversized tapir, who embark on a quest to save their home in the spectacular Amazon Rainforest.","popularity":44.875,"poster_path":"/l8HyObVj8fPrzacAPtGWWLDhcfh.jpg","release_date":"2021-02-10","title":"Ainbo: Spirit of the Amazon","video":false,"vote_average":7.4,"vote_count":135},{"adult":false,"backdrop_path":null,"genre_ids":[27],"id":775943,"original_language":"es","original_title":"Llanto Maldito","overview":"Sara and Óscar, a couple going through a marital crisis, decide to spend a week in a remote country cabin with their two children, Alicia and Tomás. The family tries to have a quiet time, but something strange happens there. There is a woman who prowls through the forest and cries uncontrollably looking for a baby she has just lost. This deeply affects the family who will have to stay together to survive this nightmare.","popularity":29.046,"poster_path":"/iwlmZKndp7fIfHbxVzQtk9zby3A.jpg","release_date":"2021-07-29","title":"Tarumama","video":false,"vote_average":0,"vote_count":0},{"adult":false,"backdrop_path":"/2ZzmfwgvVh2KLH4A8HMzX5TytAc.jpg","genre_ids":[18],"id":598896,"original_language":"en","original_title":"Land","overview":"Edee, in the aftermath of an unfathomable event, finds herself unable to stay connected to the world she once knew and in the face of that uncertainty, retreats to the magnificent, but unforgiving, wilds of the Rockies. After a local hunter brings her back from the brink of death, she must find a way to live again.","popularity":30.598,"poster_path":"/6pYhDPzYPGKvDYpxdf0IUE3RDAS.jpg","release_date":"2021-02-12","title":"Land","video":false,"vote_average":7.3,"vote_count":76},{"adult":false,"backdrop_path":"/2XQPcgGMyw2qSssv3CsCaOP61l3.jpg","genre_ids":[53,10749,18,9648],"id":721625,"original_language":"en","original_title":"Songbird","overview":"During a pandemic lockdown, Nico, a young man with rare immunity, must overcome martial law, murderous vigilantes and a powerful family to reunite with his love, Sara.","popularity":39.468,"poster_path":"/pm7pstYup0ZHpImjT0k6YyxGVkX.jpg","release_date":"2020-12-10","title":"Songbird","video":false,"vote_average":6.2,"vote_count":305},{"adult":false,"backdrop_path":"/4lGB2Iy7BruiRfvVc6MZ2UM0yNX.jpg","genre_ids":[16,10749,10402,18],"id":579741,"original_language":"ja","original_title":"サイダーのように言葉が湧き上がる","overview":"After meeting one bright, sunny day, a shy boy who expresses himself through haiku and a bubbly but self-conscious girl share a brief, magical summer.","popularity":32.33,"poster_path":"/ooISQS2rzVqgkt2aq5HNoz8n2sa.jpg","release_date":"2020-11-03","title":"Words Bubble Up Like Soda Pop","video":false,"vote_average":7.1,"vote_count":35},{"adult":false,"backdrop_path":"/3El9bWuGsaYwFu2TIksMdjgkPbR.jpg","genre_ids":[35,18],"id":580175,"original_language":"da","original_title":"Druk","overview":"Four high school teachers launch a drinking experiment: upholding a constant low level of intoxication.","popularity":35.328,"poster_path":"/fsn4cjpCvWuP9wU9hcFnK7M8RZC.jpg","release_date":"2020-09-24","title":"Another Round","video":false,"vote_average":7.8,"vote_count":1097},{"adult":false,"backdrop_path":"/DnjwdbjdR2c5MFhKv5ZSRf8rDU.jpg","genre_ids":[53,27,18],"id":546121,"original_language":"en","original_title":"Run","overview":"Chloe, a teenager who is confined to a wheelchair, is homeschooled by her mother, Diane. Chloe soon becomes suspicious of her mother and begins to suspect that she may be harboring a dark secret.","popularity":34.729,"poster_path":"/ilHG4EayOVoYeKqslspY3pR4wzC.jpg","release_date":"2020-11-20","title":"Run","video":false,"vote_average":7.5,"vote_count":1190},{"adult":false,"backdrop_path":"/2BftdeCkD7uf68KUxaKRBxtsmZZ.jpg","genre_ids":[35,16,10402,10751,12],"id":449406,"original_language":"en","original_title":"Vivo","overview":"Vivo, a music-loving kinkajou, embarks on the journey of a lifetime to fulfill his destiny and deliver a love song for an old friend.","popularity":31.031,"poster_path":"/eRLlrhbdYE7XN6VtcZKy6o2BsOw.jpg","release_date":"2021-07-30","title":"Vivo","video":false,"vote_average":6,"vote_count":2},{"adult":false,"backdrop_path":"/jLPmdSG4D0k5YwkMXm1noJIZhzb.jpg","genre_ids":[18,28],"id":607844,"original_language":"ko","original_title":"모가디슈","overview":"Diplomats from the North and South Korean embassies in Somalia attempt a daring joint escape from Mogadishu when the outbreak of civil war leaves them stranded.","popularity":33.564,"poster_path":"/7hc5r0OffRVaqeczAtCFvlA6e8q.jpg","release_date":"2021-07-28","title":"Escape from Mogadishu","video":false,"vote_average":6,"vote_count":2},{"adult":false,"backdrop_path":"/rCQp2lOfGeiUnXxRk3B3FEq59rC.jpg","genre_ids":[18,53],"id":575446,"original_language":"es","original_title":"Nuevo orden","overview":"In the near future, a popular uprising in Mexico City interrupts a wedding held at the home of a wealthy family. After the riots have been quashed, they discover the bride has gone missing and plea with the military to help locate her.","popularity":30.21,"poster_path":"/v6NodCMzqilx0Xw541P65WFnDfE.jpg","release_date":"2020-09-10","title":"New Order","video":false,"vote_average":6.7,"vote_count":156},{"adult":false,"backdrop_path":"/fLZshCIFoLm3IypozhQ9Tnj0cd8.jpg","genre_ids":[18,10749,36],"id":454527,"original_language":"fr","original_title":"Benedetta","overview":"In the late 17th century, with plague ravaging the land, Benedetta Carlini joins the convent in Pescia, Tuscany, as a novice. Capable from an early age of performing miracles, Benedetta’s impact on life in the community is immediate and momentous.","popularity":33.782,"poster_path":"/tFiNuFtfcDGZxp5vxTBdo9EvhPJ.jpg","release_date":"2021-07-09","title":"Benedetta","video":false,"vote_average":6.8,"vote_count":75}],"total_pages":56,"total_results":1113}
\ No newline at end of file
diff --git a/files/movies folder/popular-movies.json b/files/movies folder/popular-movies.json
new file mode 100644
index 0000000..18a292a
--- /dev/null
+++ b/files/movies folder/popular-movies.json
@@ -0,0 +1 @@
+{"page":6,"results":[{"adult":false,"backdrop_path":"/y3XMIea7mwTzxt3NFFXi5YJKeFJ.jpg","genre_ids":[16,28,14],"id":20982,"original_language":"ja","original_title":"劇場版 NARUTO -ナルト- 疾風伝","overview":"Demons that once almost destroyed the world, are revived by someone. To prevent the world from being destroyed, the demon has to be sealed and the only one who can do it is the shrine maiden Shion from the country of demons, who has two powers; one is sealing demons and the other is predicting the deaths of humans. This time Naruto's mission is to guard Shion, but she predicts Naruto's death. The only way to escape it, is to get away from Shion, which would leave her unguarded, then the demon, whose only goal is to kill Shion will do so, thus meaning the end of the world. Naruto decides to challenge this \"prediction of death.\"","popularity":297.248,"poster_path":"/vDkct38sSFSWJIATlfJw0l3QOIR.jpg","release_date":"2007-08-04","title":"Naruto Shippuden the Movie","video":false,"vote_average":7.3,"vote_count":350},{"adult":false,"backdrop_path":"/jFINtstDUh0vHOGImpMAmLrPcXy.jpg","genre_ids":[28,27,35],"id":643586,"original_language":"en","original_title":"Willy's Wonderland","overview":"When his car breaks down, a quiet loner agrees to clean an abandoned family fun center in exchange for repairs. He soon finds himself waging war against possessed animatronic mascots while trapped inside Willy's Wonderland.","popularity":287.495,"poster_path":"/keEnkeAvifw8NSEC4f6WsqeLJgF.jpg","release_date":"2021-02-12","title":"Willy's Wonderland","video":false,"vote_average":6.6,"vote_count":294},{"adult":false,"backdrop_path":"/zTxHf9iIOCqRbxvl8W5QYKrsMLq.jpg","genre_ids":[12,35,14],"id":512200,"original_language":"en","original_title":"Jumanji: The Next Level","overview":"As the gang return to Jumanji to rescue one of their own, they discover that nothing is as they expect. The players will have to brave parts unknown and unexplored in order to escape the world’s most dangerous game.","popularity":293.502,"poster_path":"/jyw8VKYEiM1UDzPB7NsisUgBeJ8.jpg","release_date":"2019-12-04","title":"Jumanji: The Next Level","video":false,"vote_average":7,"vote_count":6022},{"adult":false,"backdrop_path":null,"genre_ids":[18],"id":288905,"original_language":"es","original_title":"Los viejos","overview":"Toño sets off on a long journey back to his hometown in the south of Bolivia in attempt to reconcile with the past.","popularity":235.824,"poster_path":"/u4ZXIKpSAWlwfR9ezxiCOuqsEGO.jpg","release_date":"2011-10-08","title":"Los viejos","video":false,"vote_average":4,"vote_count":2},{"adult":false,"backdrop_path":"/63xBsC6u54uJggUd7mntwB6RuaN.jpg","genre_ids":[35,10749],"id":662237,"original_language":"ko","original_title":"새콤달콤","overview":"Faced with real-world opportunities and challenges, a couple endures the highs and lows of trying to make a long-distance relationship survive.","popularity":275.803,"poster_path":"/3yGwAPl6LWpi8QwHjwCMaqsPgNB.jpg","release_date":"2021-06-04","title":"Sweet & Sour","video":false,"vote_average":8.1,"vote_count":50},{"adult":false,"backdrop_path":"/ovggmAOu1IbPGTQE8lg4lBasNC7.jpg","genre_ids":[878,28,12,53],"id":412656,"original_language":"en","original_title":"Chaos Walking","overview":"Two unlikely companions embark on a perilous adventure through the badlands of an unexplored planet as they try to escape a dangerous and disorienting reality, where all inner thoughts are seen and heard by everyone.","popularity":276.858,"poster_path":"/9kg73Mg8WJKlB9Y2SAJzeDKAnuB.jpg","release_date":"2021-02-24","title":"Chaos Walking","video":false,"vote_average":6.9,"vote_count":1005},{"adult":false,"backdrop_path":"/lQ1r7trIWYUeCCq6GbHzaUl0fNM.jpg","genre_ids":[28,12],"id":568620,"original_language":"en","original_title":"Snake Eyes: G.I. Joe Origins","overview":"After saving the life of their heir apparent, tenacious loner Snake Eyes is welcomed into an ancient Japanese clan called the Arashikage where he is taught the ways of the ninja warrior. But, when secrets from his past are revealed, Snake Eyes' honor and allegiance will be tested – even if that means losing the trust of those closest to him.","popularity":315.61,"poster_path":"/uIXF0sQGXOxQhbaEaKOi2VYlIL0.jpg","release_date":"2021-07-22","title":"Snake Eyes: G.I. Joe Origins","video":false,"vote_average":6.9,"vote_count":52},{"adult":false,"backdrop_path":"/3N316jUSdhvPyYTW29G4v9ebbcS.jpg","genre_ids":[53,28,80],"id":38700,"original_language":"en","original_title":"Bad Boys for Life","overview":"Marcus and Mike are forced to confront new threats, career changes, and midlife crises as they join the newly created elite team AMMO of the Miami police department to take down the ruthless Armando Armas, the vicious leader of a Miami drug cartel.","popularity":291.292,"poster_path":"/y95lQLnuNKdPAzw9F9Ab8kJ80c3.jpg","release_date":"2020-01-15","title":"Bad Boys for Life","video":false,"vote_average":7.2,"vote_count":6429},{"adult":false,"backdrop_path":"/las0P4Dua54XrZ73VQmGUaH1z0U.jpg","genre_ids":[16,28,18,878],"id":283566,"original_language":"ja","original_title":"シン・エヴァンゲリオン劇場版:||","overview":"In the aftermath of the Fourth Impact, stranded without their Evangelions, Shinji, Asuka, and Rei search for refuge in the desolate red remains of Tokyo-3. But the danger to the world is far from over. A new impact is looming on the horizon—one that will prove to be the true end of Evangelion.","popularity":270.818,"poster_path":"/jDwZavHo99JtGsCyRzp4epeeBHx.jpg","release_date":"2021-03-08","title":"Evangelion: 3.0+1.0 Thrice Upon a Time","video":false,"vote_average":7.4,"vote_count":11},{"adult":false,"backdrop_path":"/drulhSX7P5TQlEMQZ3JoXKSDEfz.jpg","genre_ids":[18,14,878],"id":581389,"original_language":"ko","original_title":"승리호","overview":"When the crew of a space junk collector ship called The Victory discovers a humanoid robot named Dorothy that's known to be a weapon of mass destruction, they get involved in a risky business deal which puts their lives at stake.","popularity":246.765,"poster_path":"/p9YDHJKvUoi7v2SCd3vLGPae1Xp.jpg","release_date":"2021-02-05","title":"Space Sweepers","video":false,"vote_average":7.2,"vote_count":613},{"adult":false,"backdrop_path":"/sNQWRiwOc1R261yg7XVXxq0b5F9.jpg","genre_ids":[16],"id":812456,"original_language":"en","original_title":"Barbie & Chelsea the Lost Birthday","overview":"Enjoy high-sea thrills as Barbie, Chelsea and the rest of the Roberts family set sail on an adventure cruise. \"Barbie & Chelsea The Lost Birthday\" tells the story of Chelsea, Barbie’s precocious youngest sister, and the rest of the Roberts family as they set sail on an adventure cruise for her seventh birthday. When they cross the International Date Line, Chelsea discovers her actual birthday has been lost and she embarks on a fantastical journey through an enchanted jungle island in order to save it.","popularity":268.966,"poster_path":"/esS12yF3CDuk5juvdFvi4PIwOuW.jpg","release_date":"2021-05-14","title":"Barbie & Chelsea the Lost Birthday","video":false,"vote_average":7.3,"vote_count":40},{"adult":false,"backdrop_path":"/wu1uilmhM4TdluKi2ytfz8gidHf.jpg","genre_ids":[10751,16,14,12,35],"id":400160,"original_language":"en","original_title":"The SpongeBob Movie: Sponge on the Run","overview":"When his best friend Gary is suddenly snatched away, SpongeBob takes Patrick on a madcap mission far beyond Bikini Bottom to save their pink-shelled pal.","popularity":260.532,"poster_path":"/jlJ8nDhMhCYJuzOw3f52CP1W8MW.jpg","release_date":"2020-08-14","title":"The SpongeBob Movie: Sponge on the Run","video":false,"vote_average":7.7,"vote_count":2247},{"adult":false,"backdrop_path":"/9lropttr13U34csVkseFGZY98Kl.jpg","genre_ids":[12,18],"id":346687,"original_language":"en","original_title":"The Water Man","overview":"Gunner and his mother share a special bond. She supports his daydreaming and artistic pursuits, while his frequently-on-the-road father, Amos, with whom Gunner shares a strained relationship, has other ideas about where his son’s interests should lie. Gunner and his dad attempt to smooth over their differences for the sake of the family, but when his mom’s sickness worsens, Gunner disappears into stacks of books on both science and the supernatural in search of possible cures. When Gunner and his rebellious friend Jo go missing during their quest into the Water Man’s mysterious forest, Amos must immerse himself in his son’s world to find them and put his family back together.","popularity":261.392,"poster_path":"/krupbFlSTnnKIjpRryrg2CTdeIL.jpg","release_date":"2021-05-07","title":"The Water Man","video":false,"vote_average":6.5,"vote_count":82},{"adult":false,"backdrop_path":"/lmZFxXgJE3vgrciwuDib0N8CfQo.jpg","genre_ids":[12,28,878],"id":299536,"original_language":"en","original_title":"Avengers: Infinity War","overview":"As the Avengers and their allies have continued to protect the world from threats too large for any one hero to handle, a new danger has emerged from the cosmic shadows: Thanos. A despot of intergalactic infamy, his goal is to collect all six Infinity Stones, artifacts of unimaginable power, and use them to inflict his twisted will on all of reality. Everything the Avengers have fought for has led up to this moment - the fate of Earth and existence itself has never been more uncertain.","popularity":270.064,"poster_path":"/7WsyChQLEftFiDOVTGkv3hFpyyt.jpg","release_date":"2018-04-25","title":"Avengers: Infinity War","video":false,"vote_average":8.3,"vote_count":22331},{"adult":false,"backdrop_path":"/e0lVsZrD6CPX8pt0QIDK7HDoRpy.jpg","genre_ids":[10749,18],"id":785537,"original_language":"tr","original_title":"Geçen Yaz","overview":"For Deniz, a 16-year-old teenager, this summer is different from the others. Deniz, who goes to his family's summer house every year, falls in love with a young girl named Aslı. Trying to get closer to Aslı, Deniz realizes that a handsome young man, Burak, also likes Aslı.","popularity":245.181,"poster_path":"/iPtCd4sSWW1q9O5dWEzWKrVeCcY.jpg","release_date":"2021-07-09","title":"Last Summer","video":false,"vote_average":5.6,"vote_count":17},{"adult":false,"backdrop_path":"/2M2JxEv3HSpjnZWjY9NOdGgfUd.jpg","genre_ids":[53,28,80,18],"id":553604,"original_language":"en","original_title":"Honest Thief","overview":"A bank robber tries to turn himself in because he's falling in love and wants to live an honest life...but when he realizes the Feds are more corrupt than him, he must fight back to clear his name.","popularity":241.938,"poster_path":"/zeD4PabP6099gpE0STWJrJrCBCs.jpg","release_date":"2020-09-03","title":"Honest Thief","video":false,"vote_average":6.5,"vote_count":986},{"adult":false,"backdrop_path":"/nz8xWrTKZzA5A7FgxaM4kfAoO1W.jpg","genre_ids":[878,28],"id":651571,"original_language":"en","original_title":"Breach","overview":"A hardened mechanic must stay awake and maintain an interstellar ark fleeing the dying planet Earth with a few thousand lucky souls on board... the last of humanity. Unfortunately, humans are not the only passengers. A shapeshifting alien creature has taken residence, its only goal is to kill as many people as possible. The crew must think quickly to stop this menace before it destroys mankind.","popularity":245.056,"poster_path":"/13B6onhL6FzSN2KaNeQeMML05pS.jpg","release_date":"2020-12-17","title":"Breach","video":false,"vote_average":4.5,"vote_count":438},{"adult":false,"backdrop_path":"/6TPZSJ06OEXeelx1U1VIAt0j9Ry.jpg","genre_ids":[28,80,53],"id":587996,"original_language":"es","original_title":"Bajocero","overview":"When a prisoner transfer van is attacked, the cop in charge must fight those inside and outside while dealing with a silent foe: the icy temperatures.","popularity":239.765,"poster_path":"/dWSnsAGTfc8U27bWsy2RfwZs0Bs.jpg","release_date":"2021-01-29","title":"Below Zero","video":false,"vote_average":6.4,"vote_count":604},{"adult":false,"backdrop_path":"/gFDOQMQwo5UWegXE5kNEchn1eKx.jpg","genre_ids":[53,80,18],"id":580532,"original_language":"en","original_title":"Crisis","overview":"Three stories about the world of opioids collide: a drug trafficker arranges a multi-cartel Fentanyl smuggling operation between Canada and the U.S., an architect recovering from an OxyContin addiction tracks down the truth behind her son's involvement with narcotics, and a university professor battles unexpected revelations about his research employer, a drug company with deep government influence bringing a new \"non-addictive\" painkiller to market.","popularity":245.127,"poster_path":"/15e2VcMTtk3pqgGlHWxisvygFAw.jpg","release_date":"2021-02-26","title":"Crisis","video":false,"vote_average":6.5,"vote_count":127},{"adult":false,"backdrop_path":"/VuukZLgaCrho2Ar8Scl9HtV3yD.jpg","genre_ids":[878,28],"id":335983,"original_language":"en","original_title":"Venom","overview":"Investigative journalist Eddie Brock attempts a comeback following a scandal, but accidentally becomes the host of Venom, a violent, super powerful alien symbiote. Soon, he must rely on his newfound powers to protect the world from a shadowy organization looking for a symbiote of their own.","popularity":370.179,"poster_path":"/2uNW4WbgBXL25BAbXGLnLqX71Sw.jpg","release_date":"2018-09-28","title":"Venom","video":false,"vote_average":6.8,"vote_count":11109}],"total_pages":500,"total_results":10000}
\ No newline at end of file
diff --git a/files/persons folder/person.json b/files/persons folder/person.json
new file mode 100644
index 0000000..3340c6d
--- /dev/null
+++ b/files/persons folder/person.json
@@ -0,0 +1 @@
+{"adult":false,"also_known_as":["Carrie Frances Fisher ","Кэрри Фишер","Кэрри Фрэнсис Фишер","캐리 피셔"],"biography":"Carrie Frances Fisher (21 October 1956 - 27 December 2016) was an American actress, novelist, screenwriter, and lecturer. She is most famous for her portrayal of Princess Leia Organa in the original Star Wars trilogy, her bestselling novel Postcards from the Edge, for which she wrote the screenplay to the film of the same name, and her autobiography Wishful Drinking.","birthday":"1956-10-21","deathday":"2016-12-27","gender":1,"homepage":"https://carriefisher.com/","id":4,"imdb_id":"nm0000402","known_for_department":"Acting","name":"Carrie Fisher","place_of_birth":"Beverly Hills, Los Angeles, California, USA","popularity":4.751,"profile_path":"/rfJtncHewKVnHjqpIZvjn24ESeC.jpg"}
\ No newline at end of file
diff --git a/files/persons folder/popular-persons.json b/files/persons folder/popular-persons.json
new file mode 100644
index 0000000..030d4a3
--- /dev/null
+++ b/files/persons folder/popular-persons.json
@@ -0,0 +1 @@
+{"page":6,"results":[{"adult":false,"gender":1,"id":1356210,"known_for":[{"backdrop_path":"/rcA17r3hfHtRrk3Xs3hXrgGeSGT.jpg","first_air_date":"2016-07-15","genre_ids":[10765,9648,18],"id":66732,"media_type":"tv","name":"Stranger Things","origin_country":["US"],"original_language":"en","original_name":"Stranger Things","overview":"When a young boy vanishes, a small town uncovers a mystery involving secret experiments, terrifying supernatural forces, and one strange little girl.","poster_path":"/x2LSRK2Cm7MZhjluni1msVJ3wDF.jpg","vote_average":8.6,"vote_count":8614},{"adult":false,"backdrop_path":"/inJjDhCjfhh3RtrJWBmmDqeuSYC.jpg","genre_ids":[28,12,14],"id":399566,"media_type":"movie","original_language":"en","original_title":"Godzilla vs. Kong","overview":"In a time when monsters walk the Earth, humanity’s fight for its future sets Godzilla and Kong on a collision course that will see the two most powerful forces of nature on the planet collide in a spectacular battle for the ages.","poster_path":"/pgqgaUx1cJb5oZQQ5v0tNARCeBp.jpg","release_date":"2021-03-24","title":"Godzilla vs. Kong","video":false,"vote_average":8,"vote_count":6564},{"backdrop_path":"/3IIBf6VlwEyKAX4cN2XCM1gKdgM.jpg","first_air_date":"2005-03-27","genre_ids":[18],"id":1416,"media_type":"tv","name":"Grey's Anatomy","origin_country":["US"],"original_language":"en","original_name":"Grey's Anatomy","overview":"Follows the personal and professional lives of a group of doctors at Seattle’s Grey Sloan Memorial Hospital.","poster_path":"/clnyhPqj1SNgpAdeSS6a6fwE6Bo.jpg","vote_average":8.2,"vote_count":6466}],"known_for_department":"Acting","name":"Millie Bobby Brown","popularity":16.405,"profile_path":"/yzfxLMcBMusKzZp9f1Z9Ags8WML.jpg"},{"adult":false,"gender":2,"id":162931,"known_for":[{"backdrop_path":"/hpU2cHC9tk90hswCFEpf5AtbqoL.jpg","first_air_date":"1989-12-17","genre_ids":[10751,16,35],"id":456,"media_type":"tv","name":"The Simpsons","origin_country":["US"],"original_language":"en","original_name":"The Simpsons","overview":"Set in Springfield, the average American town, the show focuses on the antics and everyday adventures of the Simpson family; Homer, Marge, Bart, Lisa and Maggie, as well as a virtual cast of thousands. Since the beginning, the series has been a pop culture icon, attracting hundreds of celebrities to guest star. The show has also made name for itself in its fearless satirical take on politics, media and American life in general.","poster_path":"/zLudbPueg8CxGhMS2tyDh3p0TdK.jpg","vote_average":7.9,"vote_count":6852},{"adult":false,"backdrop_path":"/o7XHctO2t4fIdzch8v8ApNaJMcX.jpg","genre_ids":[16,35,10751],"id":35,"media_type":"movie","original_language":"en","original_title":"The Simpsons Movie","overview":"After Homer accidentally pollutes the town's water supply, Springfield is encased in a gigantic dome by the EPA and the Simpsons are declared fugitives.","poster_path":"/s3b8TZWwmkYc2KoJ5zk77qB6PzY.jpg","release_date":"2007-07-25","title":"The Simpsons Movie","video":false,"vote_average":7,"vote_count":6274},{"backdrop_path":"/oWH0Z5lpOnEoo3g2gFHAABtMFC4.jpg","first_air_date":"1986-09-22","genre_ids":[35,10751,18],"id":4658,"media_type":"tv","name":"ALF","origin_country":["US"],"original_language":"en","original_name":"ALF","overview":"A furry alien wiseguy comes to live with a terran family after crashing into their garage.","poster_path":"/shRed7ZrCRjdIMEYNx2YBVFkkNu.jpg","vote_average":7.7,"vote_count":729}],"known_for_department":"Writing","name":"Al Jean","popularity":16.344,"profile_path":"/sw2v78mdWg6JpDbGCwPsWDiIW6b.jpg"},{"adult":false,"gender":2,"id":3894,"known_for":[{"adult":false,"backdrop_path":"/nMKdUUepR0i5zn0y1T4CsSB5chy.jpg","genre_ids":[18,28,80,53],"id":155,"media_type":"movie","original_language":"en","original_title":"The Dark Knight","overview":"Batman raises the stakes in his war on crime. With the help of Lt. Jim Gordon and District Attorney Harvey Dent, Batman sets out to dismantle the remaining criminal organizations that plague the streets. The partnership proves to be effective, but they soon find themselves prey to a reign of chaos unleashed by a rising criminal mastermind known to the terrified citizens of Gotham as the Joker.","poster_path":"/qJ2tW6WMUDux911r6m7haRef0WH.jpg","release_date":"2008-07-16","title":"The Dark Knight","video":false,"vote_average":8.5,"vote_count":25536},{"adult":false,"backdrop_path":"/cKPfiu9IcCW0fMdKdQBXe3PRtTZ.jpg","genre_ids":[28,80,18,53],"id":49026,"media_type":"movie","original_language":"en","original_title":"The Dark Knight Rises","overview":"Following the death of District Attorney Harvey Dent, Batman assumes responsibility for Dent's crimes to protect the late attorney's reputation and is subsequently hunted by the Gotham City Police Department. Eight years later, Batman encounters the mysterious Selina Kyle and the villainous Bane, a new terrorist leader who overwhelms Gotham's finest. The Dark Knight resurfaces to protect a city that has branded him an enemy.","poster_path":"/vzvKcPQ4o7TjWeGIn0aGC9FeVNu.jpg","release_date":"2012-07-16","title":"The Dark Knight Rises","video":false,"vote_average":7.8,"vote_count":18096},{"adult":false,"backdrop_path":"/lh5lbisD4oDbEKgUxoRaZU8HVrk.jpg","genre_ids":[28,80,18],"id":272,"media_type":"movie","original_language":"en","original_title":"Batman Begins","overview":"Driven by tragedy, billionaire Bruce Wayne dedicates his life to uncovering and defeating the corruption that plagues his home, Gotham City. Unable to work within the system, he instead creates a new identity, a symbol of fear for the criminal underworld - The Batman.","poster_path":"/1P3ZyEq02wcTMd3iE4ebtLvncvH.jpg","release_date":"2005-06-10","title":"Batman Begins","video":false,"vote_average":7.7,"vote_count":16403}],"known_for_department":"Acting","name":"Christian Bale","popularity":16.338,"profile_path":"/qCpZn2e3dimwbryLnqxZuI88PTi.jpg"},{"adult":false,"gender":1,"id":90633,"known_for":[{"adult":false,"backdrop_path":"/AaABt75ZzfMGrscUR2seabz4PEX.jpg","genre_ids":[28,12,14],"id":297762,"media_type":"movie","original_language":"en","original_title":"Wonder Woman","overview":"An Amazon princess comes to the world of Man in the grips of the First World War to confront the forces of evil and bring an end to human conflict.","poster_path":"/imekS7f1OuHyUP2LAiTEM0zBzUz.jpg","release_date":"2017-05-30","title":"Wonder Woman","video":false,"vote_average":7.3,"vote_count":16695},{"adult":false,"backdrop_path":"/mX3WOJPBzzl4kj4xU5lL7qfD6C3.jpg","genre_ids":[28,12,14],"id":209112,"media_type":"movie","original_language":"en","original_title":"Batman v Superman: Dawn of Justice","overview":"Fearing the actions of a god-like Super Hero left unchecked, Gotham City’s own formidable, forceful vigilante takes on Metropolis’s most revered, modern-day savior, while the world wrestles with what sort of hero it really needs. And with Batman and Superman at war with one another, a new threat quickly arises, putting mankind in greater danger than it’s ever known before.","poster_path":"/5UsK3grJvtQrtzEgqNlDljJW96w.jpg","release_date":"2016-03-23","title":"Batman v Superman: Dawn of Justice","video":false,"vote_average":5.9,"vote_count":14942},{"adult":false,"backdrop_path":"/jorgjEk6a0bed6jdR5wu4S6ZvRm.jpg","genre_ids":[28,12,14,878],"id":141052,"media_type":"movie","original_language":"en","original_title":"Justice League","overview":"Fuelled by his restored faith in humanity and inspired by Superman's selfless act, Bruce Wayne and Diana Prince assemble a team of metahumans consisting of Barry Allen, Arthur Curry and Victor Stone to face the catastrophic threat of Steppenwolf and the Parademons who are on the hunt for three Mother Boxes on Earth.","poster_path":"/eifGNCSDuxJeS1loAXil5bIGgvC.jpg","release_date":"2017-11-15","title":"Justice League","video":false,"vote_average":6.2,"vote_count":10665}],"known_for_department":"Acting","name":"Gal Gadot","popularity":16.281,"profile_path":"/fysvehTvU6bE3JgxaOTRfvQJzJ4.jpg"},{"adult":false,"gender":2,"id":1944274,"known_for":[{"backdrop_path":"/rcA17r3hfHtRrk3Xs3hXrgGeSGT.jpg","first_air_date":"2016-07-15","genre_ids":[10765,9648,18],"id":66732,"media_type":"tv","name":"Stranger Things","origin_country":["US"],"original_language":"en","original_name":"Stranger Things","overview":"When a young boy vanishes, a small town uncovers a mystery involving secret experiments, terrifying supernatural forces, and one strange little girl.","poster_path":"/x2LSRK2Cm7MZhjluni1msVJ3wDF.jpg","vote_average":8.6,"vote_count":8607},{"adult":false,"backdrop_path":"/czRXzKy5YcvoVhRUb8RQsFHUDi1.jpg","genre_ids":[27,53],"id":424139,"media_type":"movie","original_language":"en","original_title":"Halloween","overview":"Jamie Lee Curtis returns to her iconic role as Laurie Strode, who comes to her final confrontation with Michael Myers, the masked figure who has haunted her since she narrowly escaped his killing spree on Halloween night four decades ago.","poster_path":"/bXs0zkv2iGVViZEy78teg2ycDBm.jpg","release_date":"2018-10-18","title":"Halloween","video":false,"vote_average":6.5,"vote_count":3360},{"backdrop_path":"/rFGtqUOIXP9CudLaSzK9iFZB7lK.jpg","first_air_date":"2018-09-04","genre_ids":[9648,80,18],"id":80213,"media_type":"tv","name":"The Purge","origin_country":["US"],"original_language":"en","original_name":"The Purge","overview":"Set in a dystopian America ruled by a totalitarian political party, the series follows several seemingly unrelated characters living in a small city. Tying them all together is a mysterious savior who’s impeccably equipped for everything the night throws at them. As the clock winds down with their fates hanging in the balance, each character is forced to reckon with their pasts as they discover how far they will go to survive the night.","poster_path":"/9CaS2XFd0Db42grzzVBnWcSkrbg.jpg","vote_average":7,"vote_count":2879}],"known_for_department":"Acting","name":"Drew Scheid","popularity":15.683,"profile_path":"/ztj1zSSOLe5WtpvNVVIP1ir4xqa.jpg"},{"adult":false,"gender":2,"id":192,"known_for":[{"adult":false,"backdrop_path":"/nMKdUUepR0i5zn0y1T4CsSB5chy.jpg","genre_ids":[18,28,80,53],"id":155,"media_type":"movie","original_language":"en","original_title":"The Dark Knight","overview":"Batman raises the stakes in his war on crime. With the help of Lt. Jim Gordon and District Attorney Harvey Dent, Batman sets out to dismantle the remaining criminal organizations that plague the streets. The partnership proves to be effective, but they soon find themselves prey to a reign of chaos unleashed by a rising criminal mastermind known to the terrified citizens of Gotham as the Joker.","poster_path":"/qJ2tW6WMUDux911r6m7haRef0WH.jpg","release_date":"2008-07-16","title":"The Dark Knight","video":false,"vote_average":8.5,"vote_count":25536},{"adult":false,"backdrop_path":"/iNh3BivHyg5sQRPP1KOkzguEX0H.jpg","genre_ids":[18,80],"id":278,"media_type":"movie","original_language":"en","original_title":"The Shawshank Redemption","overview":"Framed in the 1940s for the double murder of his wife and her lover, upstanding banker Andy Dufresne begins a new life at the Shawshank prison, where he puts his accounting skills to work for an amoral warden. During his long stretch in prison, Dufresne comes to be admired by the other inmates -- including an older prisoner named Red -- for his integrity and unquenchable sense of hope.","poster_path":"/q6y0Go1tsGEsmtFryDOJo3dEmqu.jpg","release_date":"1994-09-23","title":"The Shawshank Redemption","video":false,"vote_average":8.7,"vote_count":19342},{"adult":false,"backdrop_path":"/cKPfiu9IcCW0fMdKdQBXe3PRtTZ.jpg","genre_ids":[28,80,18,53],"id":49026,"media_type":"movie","original_language":"en","original_title":"The Dark Knight Rises","overview":"Following the death of District Attorney Harvey Dent, Batman assumes responsibility for Dent's crimes to protect the late attorney's reputation and is subsequently hunted by the Gotham City Police Department. Eight years later, Batman encounters the mysterious Selina Kyle and the villainous Bane, a new terrorist leader who overwhelms Gotham's finest. The Dark Knight resurfaces to protect a city that has branded him an enemy.","poster_path":"/vzvKcPQ4o7TjWeGIn0aGC9FeVNu.jpg","release_date":"2012-07-16","title":"The Dark Knight Rises","video":false,"vote_average":7.8,"vote_count":18096}],"known_for_department":"Acting","name":"Morgan Freeman","popularity":16.26,"profile_path":"/oIciQWr8VwKoR8TmAw1owaiZFyb.jpg"},{"adult":false,"gender":1,"id":11213,"known_for":[{"adult":false,"backdrop_path":"/ve4TEHHmJdnEKVWSYlRa3DdoeKz.jpg","genre_ids":[12,14],"id":673,"media_type":"movie","original_language":"en","original_title":"Harry Potter and the Prisoner of Azkaban","overview":"Year three at Hogwarts means new fun and challenges as Harry learns the delicate art of approaching a Hippogriff, transforming shape-shifting Boggarts into hilarity and even turning back time. But the term also brings danger: soul-sucking Dementors hover over the school, an ally of the accursed He-Who-Cannot-Be-Named lurks within the castle walls, and fearsome wizard Sirius Black escapes Azkaban. And Harry will confront them all.","poster_path":"/aWxwnYoe8p2d2fcxOqtvAtJ72Rw.jpg","release_date":"2004-05-31","title":"Harry Potter and the Prisoner of Azkaban","video":false,"vote_average":8,"vote_count":16422},{"adult":false,"backdrop_path":"/kdjNM3yOwtQkJIwHZPqvyY4p0Ul.jpg","genre_ids":[18,28,53,878],"id":9693,"media_type":"movie","original_language":"en","original_title":"Children of Men","overview":"In 2027, in a chaotic world in which humans can no longer procreate, a former activist agrees to help transport a miraculously pregnant woman to a sanctuary at sea, where her child's birth may help scientists save the future of humankind.","poster_path":"/k9IAS4TehZFcKi4HVByxZNPfqex.jpg","release_date":"2006-09-22","title":"Children of Men","video":false,"vote_average":7.6,"vote_count":5335},{"adult":false,"backdrop_path":"/sqPT8ZONYnrBIzDFx3lOlGEN8Ze.jpg","genre_ids":[35,10751,14],"id":10830,"media_type":"movie","original_language":"en","original_title":"Matilda","overview":"An extraordinarily intelligent young girl from a cruel and uncaring family discovers she possesses telekinetic powers and is sent off to a school headed by a tyrannical principal.","poster_path":"/wnLbqoGRGdnPNjMV6rY75wgRamd.jpg","release_date":"1996-08-02","title":"Matilda","video":false,"vote_average":7.1,"vote_count":3197}],"known_for_department":"Acting","name":"Pam Ferris","popularity":16.244,"profile_path":"/vj6to5lMiIdFtYXIuHSPjbVBjgI.jpg"},{"adult":false,"gender":2,"id":956,"known_for":[{"adult":false,"backdrop_path":"/oLmifRdaETboot2PXxpZN8NqHhK.jpg","genre_ids":[28,12,80,9648],"id":10528,"media_type":"movie","original_language":"en","original_title":"Sherlock Holmes","overview":"Eccentric consulting detective, Sherlock Holmes and Doctor John Watson battle to bring down a new nemesis and unravel a deadly plot that could destroy England.","poster_path":"/momkKuWburNTqKBF6ez7rvhYVhE.jpg","release_date":"2009-01-01","title":"Sherlock Holmes","video":false,"vote_average":7.2,"vote_count":11518},{"adult":false,"backdrop_path":"/lWNASscWXn32Asr9vkB1wq6cKvD.jpg","genre_ids":[12,28,80,9648],"id":58574,"media_type":"movie","original_language":"en","original_title":"Sherlock Holmes: A Game of Shadows","overview":"There is a new criminal mastermind at large (Professor Moriarty) and not only is he Holmes’ intellectual equal, but his capacity for evil and lack of conscience may give him an advantage over the detective.","poster_path":"/y1MYZkwhZK6L0Jy4YMuPktzDOfn.jpg","release_date":"2011-11-22","title":"Sherlock Holmes: A Game of Shadows","video":false,"vote_average":7.1,"vote_count":8398},{"adult":false,"backdrop_path":"/yJyZRrXaYUjhOrJGga8awbw4Rud.jpg","genre_ids":[12,14,10749,10751],"id":420817,"media_type":"movie","original_language":"en","original_title":"Aladdin","overview":"A kindhearted street urchin named Aladdin embarks on a magical adventure after finding a lamp that releases a wisecracking genie while a power-hungry Grand Vizier vies for the same lamp that has the power to make their deepest wishes come true.","poster_path":"/ykUEbfpkf8d0w49pHh0AD2KrT52.jpg","release_date":"2019-05-22","title":"Aladdin","video":false,"vote_average":7.1,"vote_count":7949}],"known_for_department":"Directing","name":"Guy Ritchie","popularity":16.21,"profile_path":"/9pLUnjMgIEWXi0mlHYzie9cKUTD.jpg"},{"adult":false,"gender":1,"id":556435,"known_for":[{"adult":false,"backdrop_path":"/TU9NIjwzjoKPwQHoHshkFcQUCG.jpg","genre_ids":[35,53,18],"id":496243,"media_type":"movie","original_language":"ko","original_title":"기생충","overview":"All unemployed, Ki-taek's family takes peculiar interest in the wealthy and glamorous Parks for their livelihood until they get entangled in an unexpected incident.","poster_path":"/7IiTTgloJzvGI1TAYymCfbfl3vT.jpg","release_date":"2019-05-30","title":"Parasite","video":false,"vote_average":8.5,"vote_count":11828},{"adult":false,"backdrop_path":"/As0GlOkZxaPmR80sBIKem93hHfM.jpg","genre_ids":[53,28],"id":267467,"media_type":"movie","original_language":"ko","original_title":"표적","overview":"At the same time as murder suspect Yeo-hoon is brought unconscious to the emergency room following a shooting incident, an assailant breaks into the house of Tae-jun, the emergency room's doctor in charge, and kidnaps his wife. The kidnapper calls the doctor and tells him to bring Yeo-hoon to him. To retrieve his wife, Tae-jun has no option but to save the patient and sneak him away before the police can notice.","poster_path":"/rbYb65lmQgDPzd2VuC8QoF8wPQZ.jpg","release_date":"2014-04-30","title":"The Target","video":false,"vote_average":6.8,"vote_count":83},{"adult":false,"backdrop_path":"/zgx6bBaVLAsFO5ip7gwndOjhE7U.jpg","genre_ids":[18],"id":122126,"media_type":"movie","original_language":"ko","original_title":"후궁: 제왕의 첩","overview":"Living a torturous life of poverty and barely able to survive, Hwa-yeon decides to offer herself as one of the king’s concubines. Once inside the royal palace, two men are immediately seized by the woman -- the Grand Prince Seong-won, a megalomaniacal ruler drunk with power and lust, and Kwon-yoo, who has everything to lose if his desire for Hwa-yeon is exposed.","poster_path":"/2qkaLzpsC0X3zYwjhh1GPsjny2.jpg","release_date":"2012-06-06","title":"The Concubine","video":false,"vote_average":6.1,"vote_count":50}],"known_for_department":"Acting","name":"Cho Yeo-jeong","popularity":16.183,"profile_path":"/n7YWOoquBL9g3qEwQ2zvrQSW96L.jpg"},{"adult":false,"gender":1,"id":2133990,"known_for":[{"backdrop_path":"/388VaSfk0pIpxZ0jaMWeqlb9Z9N.jpg","first_air_date":"2015-03-27","genre_ids":[16],"id":73269,"media_type":"tv","name":"Mankitsu Happening","origin_country":["JP"],"original_language":"ja","original_name":"漫喫ハプニング","overview":"After a string of failed jobs, Keiichi Oyamada lands work at a small manga cafe. Things seem to be looking up from day one. His best friend is his manager and he gets to work alongside the beautiful Rei Suzukawa. Also, his cute childhood friend, Kururu Hiiragi, is a regular—and she's all grown up!\n\nSo why couldn't Keiichi hold down a job before? Due to a series of bizarre coincidences, he always seems to end up having sex with every single female coworker! Although he hopes to finally end this deadly cycle, Keiichi will soon find out that bad habits die hard.","poster_path":"/7x5uF3CBdnyJc0YcGLiw4aKIRrk.jpg","vote_average":10,"vote_count":2},{"first_air_date":"2013-02-13","genre_ids":[16],"id":101130,"media_type":"tv","name":"アイドル候補生","origin_country":[],"original_language":"ja","original_name":"アイドル候補生","overview":"It's a new century and men have lost their will, reducing the number of marriages and births. In order to restore the world, the government decided to start a program to improve men's sex life. Sex idols, girls who can sing, dance, and have sex with unacceptable men, now need help to improve society in order to multiply women.","poster_path":"/gzoJBj3kblCkDYRpS664njcHsbb.jpg","vote_average":10,"vote_count":1},{"backdrop_path":"/52YBjMQcLfAZHQJjqnrXLBBY68X.jpg","first_air_date":"2015-10-09","genre_ids":[16],"id":71309,"media_type":"tv","name":"Ane Yome Quartet","origin_country":["JP"],"original_language":"ja","original_name":"あねよめカルテット","overview":"The Hanabishi family and Hidaka family are next door neighbors. The fathers of both households could be called best friends, so they all get along like one big happy family. In particular, Hidaka family’s only son Kouki was raised lovingly by the four Hanabishi sisters like he was their own brother.\n\nOne day, the Hanabishi and Hidaka parents were preparing for a long term overseas business trip together. Kouki ended up living together with the four sisters. And one of them is promised to him as a fiance. But who should he choose?","poster_path":"/txyrzORWvGkvzCNoigDcnOY2CH8.jpg","vote_average":10,"vote_count":1}],"known_for_department":"Acting","name":"Imaya Minami","popularity":17.24,"profile_path":null},{"adult":false,"gender":1,"id":224513,"known_for":[{"adult":false,"backdrop_path":"/sAtoMqDVhNDQBc3QJL3RF6hlhGq.jpg","genre_ids":[878,18],"id":335984,"media_type":"movie","original_language":"en","original_title":"Blade Runner 2049","overview":"Thirty years after the events of the first film, a new blade runner, LAPD Officer K, unearths a long-buried secret that has the potential to plunge what's left of society into chaos. K's discovery leads him on a quest to find Rick Deckard, a former LAPD blade runner who has been missing for 30 years.","poster_path":"/gajva2L0rPYkEWjzgFlBXCAVBE5.jpg","release_date":"2017-10-04","title":"Blade Runner 2049","video":false,"vote_average":7.5,"vote_count":9759},{"adult":false,"backdrop_path":"/4HWAQu28e2yaWrtupFPGFkdNU7V.jpg","genre_ids":[35,80,18,9648],"id":546554,"media_type":"movie","original_language":"en","original_title":"Knives Out","overview":"When renowned crime novelist Harlan Thrombey is found dead at his estate just after his 85th birthday, the inquisitive and debonair Detective Benoit Blanc is mysteriously enlisted to investigate. From Harlan's dysfunctional family to his devoted staff, Blanc sifts through a web of red herrings and self-serving lies to uncover the truth behind Harlan's untimely death.","poster_path":"/pThyQovXQrw2m0s9x82twj48Jq4.jpg","release_date":"2019-11-27","title":"Knives Out","video":false,"vote_average":7.8,"vote_count":7559},{"adult":false,"backdrop_path":"/dTFJlBGWSqW6rMiawQidMPxleTd.jpg","genre_ids":[35,80,18],"id":308266,"media_type":"movie","original_language":"en","original_title":"War Dogs","overview":"Based on the true story of two young men, David Packouz and Efraim Diveroli, who won a $300 million contract from the Pentagon to arm America's allies in Afghanistan.","poster_path":"/mDcPRjZC1bb6LavFU3gwsWdVfCM.jpg","release_date":"2016-08-17","title":"War Dogs","video":false,"vote_average":6.9,"vote_count":3502}],"known_for_department":"Acting","name":"Ana de Armas","popularity":16.128,"profile_path":"/14uxt0jH28J9zn4vNQNTae3Bmr7.jpg"},{"adult":false,"gender":2,"id":5530,"known_for":[{"adult":false,"backdrop_path":"/9pkZesKMnblFfKxEhQx45YQ2kIe.jpg","genre_ids":[27,53],"id":381288,"media_type":"movie","original_language":"en","original_title":"Split","overview":"Though Kevin has evidenced 23 personalities to his trusted psychiatrist, Dr. Fletcher, there remains one still submerged who is set to materialize and dominate all the others. Compelled to abduct three teenage girls led by the willful, observant Casey, Kevin reaches a war for survival among all of those contained within him — as well as everyone around him — as the walls between his compartments shatter apart.","poster_path":"/lli31lYTFpvxVBeFHWoe5PMfW5s.jpg","release_date":"2016-11-15","title":"Split","video":false,"vote_average":7.3,"vote_count":14020},{"adult":false,"backdrop_path":"/3P52oz9HPQWxcwHOwxtyrVV1LKi.jpg","genre_ids":[28,35,12],"id":383498,"media_type":"movie","original_language":"en","original_title":"Deadpool 2","overview":"Wisecracking mercenary Deadpool battles the evil and powerful Cable and other bad guys to save a boy's life.","poster_path":"/to0spRl1CMDvyUbOnbb4fTk3VAd.jpg","release_date":"2018-05-10","title":"Deadpool 2","video":false,"vote_average":7.5,"vote_count":13473},{"adult":false,"backdrop_path":"/hUPgIibqZlwbhs4N08cPzzc4f5K.jpg","genre_ids":[28,12,14,878],"id":127585,"media_type":"movie","original_language":"en","original_title":"X-Men: Days of Future Past","overview":"The ultimate X-Men ensemble fights a war for the survival of the species across two time periods as they join forces with their younger selves in an epic battle that must change the past – to save our future.","poster_path":"/bvN8iUpHyBIvniUk4e52SUZMA7Z.jpg","release_date":"2014-05-15","title":"X-Men: Days of Future Past","video":false,"vote_average":7.5,"vote_count":12599}],"known_for_department":"Acting","name":"James McAvoy","popularity":16.114,"profile_path":"/vB6qYlFXgONGVwwxWXE4gf0F8SQ.jpg"},{"adult":false,"gender":1,"id":1260868,"known_for":[{"adult":false,"backdrop_path":"/nt4Xh3kig4Aph5ggRCCoZtSUNJB.jpg","genre_ids":[28,12,14],"id":437543,"media_type":"movie","original_language":"zh","original_title":"西游记·女儿国","overview":"The third installment of the blockbuster fantasy series sees the return of the Monkey King (Aaron Kwok) in his most action-packed adventure yet! While continuing their epic journey to the West, the Monkey King and his companions are taken captive by the Queen of an all-female land, who believes them to be part of an ancient prophecy heralding the fall of her kingdom. With a lot of sorcery and a little bit of charm, the travelers devise a plan to escape. But when their trickery angers the mighty River God, they realize they might just bring about the foretold destruction - unless they can find a way to quell her wrath.","poster_path":"/5x3rbATpy0obvtUn1kVpCj3Rvtv.jpg","release_date":"2018-02-16","title":"The Monkey King 3","video":false,"vote_average":5.8,"vote_count":29},{"backdrop_path":"/f0eahq3IHsGeniBn7C9oYHEWqmB.jpg","first_air_date":"2017-06-05","genre_ids":[18],"id":71673,"media_type":"tv","name":"Princess Agents","origin_country":["CN"],"original_language":"zh","original_name":"特工皇妃楚乔传","overview":"During the Warring Period, the Western Wei enslaved large numbers of civilians. The slave girl, Chu Qiao, is thrown into a forest along with other slaves and becomes the next hunting target for the rich lords. She is saved by the Prince of Northern Wei, Yan Xun. Afterwards, she is brought into a powerful family of Yuwen and witnesses their bloody power struggle. Seeing this, she swears to take her younger sister and flee from the situation. However, she catches the attention of Yuwen Yue, and undergoes strict training while building a sense of companionship with Yan Xun. Unfortunately, Western Wei goes into battle and Yan Xun’s family is slaughtered. After that incident, Yan Xun grows ambitious and cruel to avenge for the things and the people he lost. He doubts Chu Qiao and takes advantages of her loyalty and love many times, disregarding their relationship as well as the sacrifices he will have to make for power. Disappointed with the man she once loved, Chu Qiao eventually breaks off her relationship with Yan Xun and chooses to fight with Yuwen Yue, destroying Yan Xun’s plans of vengeance. She eventually convinces Yuwen to free the country from slavery, becoming a successful military strategist/female general in the people’s hearts.","poster_path":"/pYlaWfGknB5DvWYQeVMJLVJKwdj.jpg","vote_average":5.1,"vote_count":28},{"adult":false,"backdrop_path":"/3dw2E34UNbQyFj1EEGK9DOpx7f5.jpg","genre_ids":[35,18],"id":438081,"media_type":"movie","original_language":"zh","original_title":"乘风破浪","overview":"When a son attempts to reconcile with his father, a series of fateful events allow him to experience the father’s life in the past.","poster_path":"/xe36odxnObXCLvyng1FA0sEWIO4.jpg","release_date":"2017-01-28","title":"Duckweed","video":false,"vote_average":6.6,"vote_count":17}],"known_for_department":"Acting","name":"Zhao Liying","popularity":16.058,"profile_path":"/1LSOJSwzRyO6d87sE0DZZnwL1jO.jpg"},{"adult":false,"gender":2,"id":3223,"known_for":[{"adult":false,"backdrop_path":"/nNmJRkg8wWnRmzQDe2FwKbPIsJV.jpg","genre_ids":[878,28,12],"id":24428,"media_type":"movie","original_language":"en","original_title":"The Avengers","overview":"When an unexpected enemy emerges and threatens global safety and security, Nick Fury, director of the international peacekeeping agency known as S.H.I.E.L.D., finds himself in need of a team to pull the world back from the brink of disaster. Spanning the globe, a daring recruitment effort begins!","poster_path":"/RYMX2wcKCBAr24UyPD7xwmjaTn.jpg","release_date":"2012-04-25","title":"The Avengers","video":false,"vote_average":7.7,"vote_count":25098},{"adult":false,"backdrop_path":"/lmZFxXgJE3vgrciwuDib0N8CfQo.jpg","genre_ids":[12,28,878],"id":299536,"media_type":"movie","original_language":"en","original_title":"Avengers: Infinity War","overview":"As the Avengers and their allies have continued to protect the world from threats too large for any one hero to handle, a new danger has emerged from the cosmic shadows: Thanos. A despot of intergalactic infamy, his goal is to collect all six Infinity Stones, artifacts of unimaginable power, and use them to inflict his twisted will on all of reality. Everything the Avengers have fought for has led up to this moment - the fate of Earth and existence itself has never been more uncertain.","poster_path":"/7WsyChQLEftFiDOVTGkv3hFpyyt.jpg","release_date":"2018-04-25","title":"Avengers: Infinity War","video":false,"vote_average":8.3,"vote_count":22322},{"adult":false,"backdrop_path":"/vbY95t58MDArtyUXUIb8Fx1dCry.jpg","genre_ids":[28,878,12],"id":1726,"media_type":"movie","original_language":"en","original_title":"Iron Man","overview":"After being held captive in an Afghan cave, billionaire engineer Tony Stark creates a unique weaponized suit of armor to fight evil.","poster_path":"/78lPtwv72eTNqFW9COBYI0dWDJa.jpg","release_date":"2008-04-30","title":"Iron Man","video":false,"vote_average":7.6,"vote_count":20993}],"known_for_department":"Acting","name":"Robert Downey Jr.","popularity":16.009,"profile_path":"/5qHNjhtjMD4YWH3UP0rm4tKwxCL.jpg"},{"adult":false,"gender":1,"id":17286,"known_for":[{"backdrop_path":"/suopoADq0k8YZr4dQXcU6pToj6s.jpg","first_air_date":"2011-04-17","genre_ids":[10765,18,10759],"id":1399,"media_type":"tv","name":"Game of Thrones","origin_country":["US"],"original_language":"en","original_name":"Game of Thrones","overview":"Seven noble families fight for control of the mythical land of Westeros. Friction between the houses leads to full-scale war. All while a very ancient evil awakens in the farthest north. Amidst the war, a neglected military order of misfits, the Night's Watch, is all that stands between the realms of men and icy horrors beyond.","poster_path":"/u3bZgnGQ9T01sWNhyveQz0wH0Hl.jpg","vote_average":8.4,"vote_count":15221},{"adult":false,"backdrop_path":"/eGhjeUbzttA3E4flxdAm8gHz4h4.jpg","genre_ids":[28,12,10752],"id":1271,"media_type":"movie","original_language":"en","original_title":"300","overview":"Based on Frank Miller's graphic novel, \"300\" is very loosely based the 480 B.C. Battle of Thermopylae, where the King of Sparta led his army against the advancing Persians; the battle is said to have inspired all of Greece to band together against the Persians, and helped usher in the world's first democracy.","poster_path":"/9W49fy5G7v9Ed3CXtvMi41YqZtt.jpg","release_date":"2007-03-07","title":"300","video":false,"vote_average":7.2,"vote_count":10869},{"adult":false,"backdrop_path":"/siBfSB55FBc7IdvgtApq6NaXNHw.jpg","genre_ids":[878,27,53],"id":158015,"media_type":"movie","original_language":"en","original_title":"The Purge","overview":"Given the country's overcrowded prisons, the U.S. government begins to allow 12-hour periods of time in which all illegal activity is legal. During one of these free-for-alls, a family must protect themselves from a home invasion.","poster_path":"/1x4fHaDdlpWT5P2UV4ClKguWbTE.jpg","release_date":"2013-05-31","title":"The Purge","video":false,"vote_average":6.3,"vote_count":6703}],"known_for_department":"Acting","name":"Lena Headey","popularity":15.96,"profile_path":"/wbQOgLMykmjphlGo6sARDoxl1UK.jpg"},{"adult":false,"gender":2,"id":1190668,"known_for":[{"adult":false,"backdrop_path":"/rAiYTfKGqDCRIIqo664sY9XZIvQ.jpg","genre_ids":[12,18,878],"id":157336,"media_type":"movie","original_language":"en","original_title":"Interstellar","overview":"The adventures of a group of explorers who make use of a newly discovered wormhole to surpass the limitations on human space travel and conquer the vast distances involved in an interstellar voyage.","poster_path":"/gEU2QniE6E77NI6lCU6MxlNBvIx.jpg","release_date":"2014-11-05","title":"Interstellar","video":false,"vote_average":8.3,"vote_count":26297},{"adult":false,"backdrop_path":"/hrMbAi9fPTmc6EtpyyAgDKznptu.jpg","genre_ids":[10749,18],"id":398818,"media_type":"movie","original_language":"en","original_title":"Call Me by Your Name","overview":"In 1980s Italy, a relationship begins between seventeen-year-old teenage Elio and the older adult man hired as his father's research assistant.","poster_path":"/tcNniniS4rfqrLH0oORikJfnIwY.jpg","release_date":"2017-09-01","title":"Call Me by Your Name","video":false,"vote_average":8.3,"vote_count":9295},{"adult":false,"backdrop_path":"/2ByWxoMbfE3pxztCJn5qTJ5Ui2Y.jpg","genre_ids":[18,35],"id":391713,"media_type":"movie","original_language":"en","original_title":"Lady Bird","overview":"Lady Bird McPherson, a strong willed, deeply opinionated, artistic 17 year old comes of age in Sacramento. Her relationship with her mother and her upbringing are questioned and tested as she plans to head off to college.","poster_path":"/iySFtKLrWvVzXzlFj7x1zalxi5G.jpg","release_date":"2017-09-08","title":"Lady Bird","video":false,"vote_average":7.3,"vote_count":6454}],"known_for_department":"Acting","name":"Timothée Chalamet","popularity":15.955,"profile_path":"/8jNFfNmqHVqLHnGnxgu7y8xgRIa.jpg"},{"adult":false,"gender":2,"id":1274508,"known_for":[{"adult":false,"backdrop_path":"/tcheoA2nPATCm2vvXw2hVQoaEFD.jpg","genre_ids":[27],"id":346364,"media_type":"movie","original_language":"en","original_title":"It","overview":"In a small town in Maine, seven children known as The Losers Club come face to face with life problems, bullies and a monster that takes the shape of a clown called Pennywise.","poster_path":"/9E2y5Q7WlCVNEhP5GiVTjhEhx1o.jpg","release_date":"2017-09-06","title":"It","video":false,"vote_average":7.2,"vote_count":15416},{"adult":false,"backdrop_path":"/4HWAQu28e2yaWrtupFPGFkdNU7V.jpg","genre_ids":[35,80,18,9648],"id":546554,"media_type":"movie","original_language":"en","original_title":"Knives Out","overview":"When renowned crime novelist Harlan Thrombey is found dead at his estate just after his 85th birthday, the inquisitive and debonair Detective Benoit Blanc is mysteriously enlisted to investigate. From Harlan's dysfunctional family to his devoted staff, Blanc sifts through a web of red herrings and self-serving lies to uncover the truth behind Harlan's untimely death.","poster_path":"/pThyQovXQrw2m0s9x82twj48Jq4.jpg","release_date":"2019-11-27","title":"Knives Out","video":false,"vote_average":7.8,"vote_count":7559},{"adult":false,"backdrop_path":"/8moTOzunF7p40oR5XhlDvJckOSW.jpg","genre_ids":[27,14],"id":474350,"media_type":"movie","original_language":"en","original_title":"It Chapter Two","overview":"27 years after overcoming the malevolent supernatural entity Pennywise, the former members of the Losers' Club, who have grown up and moved away from Derry, are brought back together by a devastating phone call.","poster_path":"/zfE0R94v1E8cuKAerbskfD3VfUt.jpg","release_date":"2019-09-04","title":"It Chapter Two","video":false,"vote_average":6.9,"vote_count":6153}],"known_for_department":"Acting","name":"Jaeden Martell","popularity":15.945,"profile_path":"/sTG7NVETOtAo4JGddASlsxz5ly2.jpg"},{"adult":false,"gender":1,"id":20374,"known_for":[{"adult":false,"backdrop_path":"/yQIBS8B9l2qXoPoPtxSXvH7CfoT.jpg","genre_ids":[18,36,10752],"id":324786,"media_type":"movie","original_language":"en","original_title":"Hacksaw Ridge","overview":"WWII American Army Medic Desmond T. Doss, who served during the Battle of Okinawa, refuses to kill people and becomes the first Conscientious Objector in American history to receive the Congressional Medal of Honor.","poster_path":"/fTuxNlgEm04PPFkr1xfK94Jn8BW.jpg","release_date":"2016-10-07","title":"Hacksaw Ridge","video":false,"vote_average":8.2,"vote_count":9766},{"adult":false,"backdrop_path":"/bDSskX0djG4K9yLDWFaFe1cFiaB.jpg","genre_ids":[27,35,10749],"id":82654,"media_type":"movie","original_language":"en","original_title":"Warm Bodies","overview":"After a zombie becomes involved with the girlfriend of one of his victims, their romance sets in motion a sequence of events that might transform the entire lifeless world.","poster_path":"/pvVpl38YOBDOANb0pWbXFb8X3iZ.jpg","release_date":"2013-01-31","title":"Warm Bodies","video":false,"vote_average":6.4,"vote_count":5118},{"adult":false,"backdrop_path":"/g8oxz3nHOnPMoIk9ipbPxo6Ri71.jpg","genre_ids":[14,12,28],"id":27022,"media_type":"movie","original_language":"en","original_title":"The Sorcerer's Apprentice","overview":"Balthazar Blake is a master sorcerer in modern-day Manhattan trying to defend the city from his arch-nemesis, Maxim Horvath. Balthazar can't do it alone, so he recruits Dave Stutler, a seemingly average guy who demonstrates hidden potential, as his reluctant protégé. The sorcerer gives his unwilling accomplice a crash course in the art and science of magic, and together, these unlikely partners work to stop the forces of darkness.","poster_path":"/kffWPQfYLkjsoYEBlFpzqVoTfCV.jpg","release_date":"2010-07-13","title":"The Sorcerer's Apprentice","video":false,"vote_average":6.1,"vote_count":3969}],"known_for_department":"Acting","name":"Teresa Palmer","popularity":15.874,"profile_path":"/sjSiLSCp9LS1Z0nyGpmquTBuUyr.jpg"},{"adult":false,"gender":2,"id":1019,"known_for":[{"adult":false,"backdrop_path":"/aL53oMdZKZRJRH8txH07DLuleF9.jpg","genre_ids":[28,12,14,878],"id":284052,"media_type":"movie","original_language":"en","original_title":"Doctor Strange","overview":"After his career is destroyed, a brilliant but arrogant surgeon gets a new lease on life when a sorcerer takes him under her wing and trains him to defend the world against evil.","poster_path":"/xf8PbyQcR5ucXErmZNzdKR0s8ya.jpg","release_date":"2016-10-25","title":"Doctor Strange","video":false,"vote_average":7.4,"vote_count":17256},{"adult":false,"backdrop_path":"/6t8ES1d12OzWyCGxBeDYLHoaDrT.jpg","genre_ids":[28,12,878],"id":330459,"media_type":"movie","original_language":"en","original_title":"Rogue One: A Star Wars Story","overview":"A rogue band of resistance fighters unite for a mission to steal the Death Star plans and bring a new hope to the galaxy.","poster_path":"/5jX3p0apUG5bkMHtnKZch0xpkBS.jpg","release_date":"2016-12-14","title":"Rogue One: A Star Wars Story","video":false,"vote_average":7.5,"vote_count":12276},{"adult":false,"backdrop_path":"/kjC48HRQpojr3FHx5pZF7Ro9xFg.jpg","genre_ids":[12,28,53],"id":36557,"media_type":"movie","original_language":"en","original_title":"Casino Royale","overview":"Le Chiffre, a banker to the world's terrorists, is scheduled to participate in a high-stakes poker game in Montenegro, where he intends to use his winnings to establish his financial grip on the terrorist market. M sends Bond—on his maiden mission as a 00 Agent—to attend this game and prevent Le Chiffre from winning. With the help of Vesper Lynd and Felix Leiter, Bond enters the most important poker game in his already dangerous career.","poster_path":"/8Gv1dylImVuoj3bZtEWoL1TLl2q.jpg","release_date":"2006-11-14","title":"Casino Royale","video":false,"vote_average":7.5,"vote_count":8116}],"known_for_department":"Acting","name":"Mads Mikkelsen","popularity":15.837,"profile_path":"/oQBzMxGTMOIVrFGUqHnWK5lB61G.jpg"},{"adult":false,"gender":1,"id":37014,"known_for":[{"backdrop_path":"/ta5oblpMlEcIPIS2YGcq9XEkWK2.jpg","first_air_date":"2016-01-25","genre_ids":[80,10765],"id":63174,"media_type":"tv","name":"Lucifer","origin_country":["US"],"original_language":"en","original_name":"Lucifer","overview":"Bored and unhappy as the Lord of Hell, Lucifer Morningstar abandoned his throne and retired to Los Angeles, where he has teamed up with LAPD detective Chloe Decker to take down criminals. But the longer he's away from the underworld, the greater the threat that the worst of humanity could escape.","poster_path":"/4EYPN5mVIhKLfxGruy7Dy41dTVn.jpg","vote_average":8.5,"vote_count":9743},{"adult":false,"backdrop_path":"/anOL7qSqbxv9G6xmAsYr3UR10Ds.jpg","genre_ids":[18,10749],"id":10229,"media_type":"movie","original_language":"en","original_title":"A Walk to Remember","overview":"When the popular, restless Landon Carter is forced to participate in the school drama production he falls in love with Jamie Sullivan, the daughter of the town's minister. Jamie has a \"to-do\" list for her life and also a very big secret she must keep from Landon.","poster_path":"/8lUYMvWdHA0Q0k5F76RQCeCBUkA.jpg","release_date":"2002-01-25","title":"A Walk to Remember","video":false,"vote_average":7.7,"vote_count":3284},{"adult":false,"backdrop_path":"/joj4ONoHmLGDoNGYph8ZPISphZ.jpg","genre_ids":[27],"id":9373,"media_type":"movie","original_language":"en","original_title":"The Texas Chainsaw Massacre","overview":"After picking up a traumatized young hitchhiker, five friends find themselves stalked and hunted by a deformed chainsaw-wielding killer and his family of equally psychopathic killers.","poster_path":"/6kFIo2AOEMTJ66GJS95ipJKQevk.jpg","release_date":"2003-05-21","title":"The Texas Chainsaw Massacre","video":false,"vote_average":6.2,"vote_count":1831}],"known_for_department":"Acting","name":"Lauren German","popularity":15.833,"profile_path":"/if1TbO8dSfPiDCMfy52nH7A2D7.jpg"}],"total_pages":500,"total_results":10000}
\ No newline at end of file
diff --git a/src/components/spinner.js b/src/components/spinner.js
new file mode 100644
index 0000000..833b0e0
--- /dev/null
+++ b/src/components/spinner.js
@@ -0,0 +1,13 @@
+const ora = require("ora");
+const spinner = ora();
+
+// Spinner in 'dots'
+spinner.spinner = {
+ interval: 80,
+ frames: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
+};
+
+// Spinner color in blue
+spinner.color = "blue";
+
+module.exports = spinner;
diff --git a/src/module/get_movie/get-movie-data-local-handle.js b/src/module/get_movie/get-movie-data-local-handle.js
new file mode 100644
index 0000000..21a4a85
--- /dev/null
+++ b/src/module/get_movie/get-movie-data-local-handle.js
@@ -0,0 +1,105 @@
+const fs = require("fs");
+const notifier = require("node-notifier");
+
+const spinner = require("../../components/spinner");
+
+const {
+ MOVIES_FOLDER_PATH,
+ MOVIE_FILE_PATH,
+ MOVIE_REVIEWS_FILE_PATH,
+ ICON_PATH,
+} = require("../../utils/constants");
+
+const {
+ printGetMovieInformation,
+ printGetMovieReviewsInformation,
+} = require("./print-get-movie");
+
+function saveGetMovieData(dataText, reviews = false) {
+ let filePath;
+ let succeedMessage;
+ if (reviews) {
+ filePath = MOVIE_REVIEWS_FILE_PATH;
+ succeedMessage = `Movies playing now data loaded and saved into ${MOVIE_REVIEWS_FILE_PATH}`;
+ } else {
+ filePath = MOVIE_FILE_PATH;
+ succeedMessage = `Person data loaded and saved into ${MOVIE_FILE_PATH}`;
+ }
+
+ // Check if the directory exist
+ fs.access(MOVIES_FOLDER_PATH, (error) => {
+ if (error) {
+ spinner.fail(`${error}, please create it`);
+ } else {
+ // Write the information into popular-persons.json
+ fs.writeFile(filePath, dataText, "utf-8", (writeError) => {
+ if (writeError) {
+ spinner.fail(writeError);
+
+ // Notify the writting error
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: writeError,
+ icon: ICON_PATH,
+ });
+ } else {
+ spinner.succeed(succeedMessage);
+
+ // Notify the writting succeed
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: succeedMessage,
+ icon: ICON_PATH,
+ });
+ }
+ });
+ }
+ });
+}
+
+function readLocalGetMovieData(reviews = false) {
+ let filePath;
+ let succeedMessage;
+ if (reviews) {
+ filePath = MOVIE_REVIEWS_FILE_PATH;
+ succeedMessage = "Movie reviews data loaded";
+ } else {
+ filePath = MOVIE_FILE_PATH;
+ succeedMessage = "Movie data loaded";
+ }
+
+ fs.readFile(filePath, "utf-8", (readError, data) => {
+ if (readError) {
+ spinner.fail(
+ `Reading error: no such file or directory '${filePath}', please make a '--save' command before execute the '--local' command`
+ );
+
+ // Notify the reading error
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: `Reading error: no such file or directory '${filePath}', please make a '--save' command before execute the '--local' command`,
+ icon: ICON_PATH,
+ });
+ } else {
+ const dataObject = JSON.parse(data);
+
+ if (reviews) {
+ printGetMovieReviewsInformation(dataObject);
+ } else {
+ printGetMovieInformation(dataObject);
+ }
+
+ // Notify the reading succeed
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: succeedMessage,
+ icon: ICON_PATH,
+ });
+ }
+ });
+}
+
+module.exports = {
+ saveGetMovieData: saveGetMovieData,
+ readLocalGetMovieData: readLocalGetMovieData,
+};
diff --git a/src/module/get_movie/get-movie-request.js b/src/module/get_movie/get-movie-request.js
new file mode 100644
index 0000000..936943b
--- /dev/null
+++ b/src/module/get_movie/get-movie-request.js
@@ -0,0 +1,97 @@
+const https = require("https");
+
+const {
+ API_KEY,
+ API_HOSTNAME,
+ API_TIMEOUT_REQUEST,
+} = require("../../utils/constants");
+
+const spinner = require("../../components/spinner");
+
+// Functions to print or save the data
+const {
+ printGetMovieInformation,
+ printGetMovieReviewsInformation,
+} = require("./print-get-movie");
+const { saveGetMovieData } = require("./get-movie-data-local-handle");
+
+function getMovieRequest({ id, save }) {
+ const options = {
+ hostname: API_HOSTNAME,
+ port: 443,
+ path: `/3/movie/${id}?api_key=${API_KEY}`,
+ method: "GET",
+ };
+
+ const req = https.request(options, (res) => {
+ let dataText = "";
+
+ res.on("data", (d) => {
+ dataText += d;
+
+ spinner.start("Fetching the movie data...\n\n");
+ });
+
+ res.on("end", () => {
+ // This timeout is to show the loading data spinner
+ setTimeout(() => {
+ const dataObject = JSON.parse(dataText);
+
+ if (save) {
+ saveGetMovieData(dataText);
+ } else {
+ printGetMovieInformation(dataObject);
+ }
+ }, API_TIMEOUT_REQUEST);
+ });
+ });
+
+ req.on("error", (e) => {
+ spinner.fail(`Error "${e.code}" (Code ${e.errno})`);
+ });
+
+ req.end();
+}
+
+function getMovieReviewsRequest({ id, save }) {
+ const options = {
+ hostname: API_HOSTNAME,
+ port: 443,
+ path: `/3/movie/${id}/reviews?api_key=${API_KEY}`,
+ method: "GET",
+ };
+
+ const req = https.request(options, (res) => {
+ let dataText = "";
+
+ res.on("data", (d) => {
+ dataText += d;
+
+ spinner.start("Fetching the movie data...\n\n");
+ });
+
+ res.on("end", () => {
+ // This timeout is to show the loading data spinner
+ setTimeout(() => {
+ const dataObject = JSON.parse(dataText);
+
+ if (save) {
+ saveGetMovieData(dataText, true);
+ } else {
+ printGetMovieReviewsInformation(dataObject);
+ }
+ }, API_TIMEOUT_REQUEST);
+ });
+ });
+
+ req.on("error", (e) => {
+ spinner.fail(`Error "${e.code}" (Code ${e.errno})`);
+ });
+
+ req.end();
+}
+
+module.exports = {
+ getMovieRequest: getMovieRequest,
+ getMovieReviewsRequest: getMovieReviewsRequest,
+};
diff --git a/src/module/get_movie/index.js b/src/module/get_movie/index.js
new file mode 100644
index 0000000..732842e
--- /dev/null
+++ b/src/module/get_movie/index.js
@@ -0,0 +1,11 @@
+const {
+ getMovieRequest,
+ getMovieReviewsRequest,
+} = require("./get-movie-request");
+const { readLocalGetMovieData } = require("./get-movie-data-local-handle");
+
+module.exports = {
+ getMovieRequest: getMovieRequest,
+ getMovieReviewsRequest: getMovieReviewsRequest,
+ readLocalGetMovieData: readLocalGetMovieData,
+};
diff --git a/src/module/get_movie/print-get-movie.js b/src/module/get_movie/print-get-movie.js
new file mode 100644
index 0000000..2687977
--- /dev/null
+++ b/src/module/get_movie/print-get-movie.js
@@ -0,0 +1,126 @@
+const chalk = require("chalk");
+
+const { SECTION_SEPARATOR } = require("../../utils/constants");
+
+const spinner = require("../../components/spinner");
+
+function printGetMovieInformation(dataObject) {
+ if (dataObject.success == false) {
+ spinner.fail(dataObject.status_message);
+ } else {
+ // Separator
+ console.log(chalk.white(`${SECTION_SEPARATOR}\n`));
+
+ // Title person
+ console.log(chalk.white("Movie:\n"));
+
+ // ID property
+ console.log(chalk.white(`ID: ${dataObject.id}`));
+
+ // Title property
+ console.log(`Title: ${chalk.bold.blue(dataObject.title)}`);
+
+ // Release Date property
+ console.log(chalk.white(`Release Date: ${dataObject.release_date}`));
+
+ // Runtime property
+ console.log(chalk.white(`Runtime: ${dataObject.runtime}`));
+
+ // Vote Count property
+ console.log(chalk.white(`Vote Count: ${dataObject.vote_count}`));
+
+ // Overview property
+ console.log(chalk.white(`Overview: ${dataObject.overview}\n`));
+
+ // Genres property
+ if (dataObject.genres.length == 0) {
+ console.log(chalk.yellow("The movie doesn’t have a declared genre"));
+ } else {
+ console.log("Genres:");
+ dataObject.genres.forEach((genre) => {
+ console.log(chalk.white(`\t${genre.name}`));
+ });
+ }
+
+ // Empty line
+ console.log("");
+
+ // Spoke Languages property
+ if (dataObject.spoken_languages.length == 0) {
+ console.log(
+ chalk.yellow(
+ `The movie: ${dataObject.id} doesn’t have any declared languages`
+ )
+ );
+ } else {
+ console.log("Spoken Languages:");
+ dataObject.spoken_languages.forEach((language) => {
+ console.log(chalk.white(`\t${language.english_name}`));
+ });
+ }
+
+ // Empty line
+ console.log("");
+
+ // Separator
+ console.log(chalk.white(`${SECTION_SEPARATOR}\n\n\n`));
+
+ // Operation succeed
+ spinner.succeed("Movie data loaded");
+ }
+}
+
+function printGetMovieReviewsInformation(dataObject) {
+ if (dataObject.success == false) {
+ spinner.fail(dataObject.status_message);
+ } else {
+ const results = dataObject.results;
+
+ // Render Reviews
+ if (results.length == 0) {
+ console.log(
+ chalk.yellow(`The movie: ${dataObject.id} doesn’t have any reviews\n\n`)
+ );
+ } else {
+ // Separator
+ console.log(chalk.white(`${SECTION_SEPARATOR}\n`));
+
+ results.forEach((result) => {
+ //Autor
+ console.log("Autor: " + chalk.blue(result.author));
+
+ //Content
+ if (result.content.length > 400) {
+ console.log(
+ "Content: " + chalk.white(result.content.substring(0, 400) + "...")
+ );
+ } else {
+ console.log(chalk.white("Content: " + result.content));
+ }
+
+ // empty line
+ console.log("");
+ });
+ }
+
+ // Separator
+ console.log(chalk.white(`${SECTION_SEPARATOR}`));
+
+ // Page index
+ if (dataObject.page <= dataObject.total_pages) {
+ console.log(
+ chalk.white(
+ `Page ${dataObject.page} of ${dataObject.total_pages}\n\n\n`
+ )
+ );
+ }
+
+ // Operation succeed
+ spinner.succeed("Movie reviews data loaded");
+ }
+}
+
+module.exports = {
+ printGetMovieInformation: printGetMovieInformation,
+ printGetMovieReviewsInformation: printGetMovieReviewsInformation,
+};
diff --git a/src/module/get_movies/get-movies-data-local-handle.js b/src/module/get_movies/get-movies-data-local-handle.js
new file mode 100644
index 0000000..67811b6
--- /dev/null
+++ b/src/module/get_movies/get-movies-data-local-handle.js
@@ -0,0 +1,90 @@
+const fs = require("fs");
+const notifier = require("node-notifier");
+const spinner = require("../../components/spinner");
+
+const {
+ MOVIES_FOLDER_PATH,
+ MOVIES_FILE_PATH,
+ MOVIES_NP_FILE_PATH,
+ ICON_PATH,
+} = require("../../utils/constants");
+
+const { printGetMoviesInformation } = require("./print-get-movies");
+
+function saveGetMoviesData(dataText, nowPlaying = false) {
+ let filePath;
+ let succeedMessage;
+ if (nowPlaying) {
+ filePath = MOVIES_NP_FILE_PATH;
+ succeedMessage = `Movies playing now data loaded and saved into ${MOVIES_NP_FILE_PATH}`;
+ } else {
+ filePath = MOVIES_FILE_PATH;
+ succeedMessage = `Popular Movies data loaded and saved into ${MOVIES_FILE_PATH}`;
+ }
+
+ fs.access(MOVIES_FOLDER_PATH, (error) => {
+ if (error) {
+ spinner.fail(`${error}, please create it`);
+ } else {
+ fs.writeFile(filePath, dataText, "utf-8", (writeError) => {
+ if (writeError) {
+ spinner.fail(writeError);
+
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: writeError,
+ icon: ICON_PATH,
+ });
+ } else {
+ spinner.succeed(succeedMessage);
+
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: succeedMessage,
+ icon: ICON_PATH,
+ });
+ }
+ });
+ }
+ });
+}
+
+function readLocalGetMoviesData(nowPlaying = false) {
+ let filePath;
+ let succeedMessage;
+ if (nowPlaying) {
+ filePath = MOVIES_NP_FILE_PATH;
+ succeedMessage = "Movies playing now data loaded";
+ } else {
+ filePath = MOVIES_FILE_PATH;
+ succeedMessage = "Popular Persons data loaded";
+ }
+
+ fs.readFile(filePath, "utf-8", (readError, data) => {
+ if (readError) {
+ spinner.fail(
+ `Reading error: no such file or directory '${filePath}', please make a '--save' command before execute the '--local' command`
+ );
+
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: `Reading error: no such file or directory '${filePath}', please make a '--save' command before execute the '--local' command`,
+ icon: ICON_PATH,
+ });
+ } else {
+ const dataObject = JSON.parse(data);
+ printGetMoviesInformation(dataObject, nowPlaying);
+
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: succeedMessage,
+ icon: ICON_PATH,
+ });
+ }
+ });
+}
+
+module.exports = {
+ saveGetMoviesData: saveGetMoviesData,
+ readLocalGetMoviesData: readLocalGetMoviesData,
+};
diff --git a/src/module/get_movies/get-movies-request.js b/src/module/get_movies/get-movies-request.js
new file mode 100644
index 0000000..91b19cd
--- /dev/null
+++ b/src/module/get_movies/get-movies-request.js
@@ -0,0 +1,92 @@
+const https = require("https");
+
+const {
+ API_KEY,
+ API_HOSTNAME,
+ API_TIMEOUT_REQUEST,
+} = require("../../utils/constants");
+
+const spinner = require("../../components/spinner");
+
+// Functions to print or save the data
+const { printGetMoviesInformation } = require("./print-get-movies");
+const { saveGetMoviesData } = require("./get-movies-data-local-handle");
+
+function getMoviesRequest({ page, save }) {
+ const options = {
+ hostname: API_HOSTNAME,
+ port: 443,
+ path: `/3/movie/popular?page=${page}&api_key=${API_KEY}`,
+ method: "GET",
+ };
+ const req = https.request(options, (res) => {
+ let dataText = "";
+
+ res.on("data", (d) => {
+ dataText += d;
+
+ spinner.start("Fetching the movies data...\n\n");
+ });
+
+ res.on("end", () => {
+ // This timeout is to show the loading data spinner
+ setTimeout(() => {
+ const dataObject = JSON.parse(dataText);
+
+ if (save) {
+ saveGetMoviesData(dataText);
+ } else {
+ printGetMoviesInformation(dataObject);
+ }
+ }, API_TIMEOUT_REQUEST);
+ });
+ });
+
+ req.on("error", (e) => {
+ spinner.fail(`Error "${e.code}" (Code ${e.errno})`);
+ });
+
+ req.end();
+}
+
+function getMoviesNowPlayingRequest({ page, save }) {
+ const options = {
+ hostname: API_HOSTNAME,
+ port: 443,
+ path: `/3/movie/now_playing?page=${page}&api_key=${API_KEY}`,
+ method: "GET",
+ };
+ const req = https.request(options, (res) => {
+ let dataText = "";
+
+ res.on("data", (d) => {
+ dataText += d;
+
+ spinner.start("Fetching the movies data...\n\n");
+ });
+
+ res.on("end", () => {
+ // This timeout is to show the loading data spinner
+ setTimeout(() => {
+ const dataObject = JSON.parse(dataText);
+
+ if (save) {
+ saveGetMoviesData(dataText, true);
+ } else {
+ printGetMoviesInformation(dataObject, true);
+ }
+ }, API_TIMEOUT_REQUEST);
+ });
+ });
+
+ req.on("error", (e) => {
+ spinner.fail(`Error "${e.code}" (Code ${e.errno})`);
+ });
+
+ req.end();
+}
+
+module.exports = {
+ getMoviesRequest: getMoviesRequest,
+ getMoviesNowPlayingRequest: getMoviesNowPlayingRequest,
+};
diff --git a/src/module/get_movies/index.js b/src/module/get_movies/index.js
new file mode 100644
index 0000000..b2d5f4d
--- /dev/null
+++ b/src/module/get_movies/index.js
@@ -0,0 +1,11 @@
+const {
+ getMoviesRequest,
+ getMoviesNowPlayingRequest,
+} = require("./get-movies-request");
+const { readLocalGetMoviesData } = require("./get-movies-data-local-handle");
+
+module.exports = {
+ getMoviesRequest: getMoviesRequest,
+ getMoviesNowPlayingRequest: getMoviesNowPlayingRequest,
+ readLocalGetMoviesData: readLocalGetMoviesData,
+};
diff --git a/src/module/get_movies/print-get-movies.js b/src/module/get_movies/print-get-movies.js
new file mode 100644
index 0000000..7f80d8d
--- /dev/null
+++ b/src/module/get_movies/print-get-movies.js
@@ -0,0 +1,58 @@
+const chalk = require("chalk");
+
+const { SECTION_SEPARATOR } = require("../../utils/constants");
+
+const spinner = require("../../components/spinner");
+
+function printGetMoviesInformation(dataObject, nowPlaying = false) {
+ if (nowPlaying && dataObject.page < 0) {
+ spinner.fail("page must be greater than 0");
+ } else if (nowPlaying && dataObject.page > dataObject.total_pages) {
+ spinner.fail(
+ `page must be less than or equal to ${dataObject.total_pages}`
+ );
+ } else {
+ if (dataObject.errors) {
+ spinner.fail(dataObject.errors[0]);
+ } else {
+ const results = dataObject.results;
+ results.forEach((r) => {
+ // Separator
+ console.log(chalk.white(`${SECTION_SEPARATOR}\n`));
+
+ // Movie title
+ console.log(chalk.white("Movie:\n"));
+
+ // ID Property
+ console.log(chalk.white(`ID: ${r.id}`));
+
+ // Title property
+ console.log(`Title: ${chalk.bold.blue(r.title)}`);
+
+ // Release_date property
+ console.log(chalk.white(`Release Date: ${r.release_date}\n`));
+ });
+
+ // Page index
+ if (dataObject.page <= dataObject.total_pages) {
+ console.log(chalk.white(SECTION_SEPARATOR));
+ console.log(
+ chalk.white(
+ `Page ${dataObject.page} of ${dataObject.total_pages}\n\n\n`
+ )
+ );
+ }
+
+ // Operation succeed
+ if (nowPlaying) {
+ spinner.succeed("Movies playing now data loaded");
+ } else {
+ spinner.succeed("Popular movies loaded");
+ }
+ }
+ }
+}
+
+module.exports = {
+ printGetMoviesInformation: printGetMoviesInformation,
+};
diff --git a/src/module/get_person/get-person-data-local-handle.js b/src/module/get_person/get-person-data-local-handle.js
new file mode 100644
index 0000000..6da009c
--- /dev/null
+++ b/src/module/get_person/get-person-data-local-handle.js
@@ -0,0 +1,78 @@
+const fs = require("fs");
+const notifier = require("node-notifier");
+
+const spinner = require("../../components/spinner");
+
+const {
+ PERSONS_FOLDER_PATH,
+ PERSON_FILE_PATH,
+ ICON_PATH,
+} = require("../../utils/constants");
+
+const { printGetPersonInformation } = require("./print-get-person");
+
+function saveGetPersonData(dataText) {
+ // Check if the directory exist
+ fs.access(PERSONS_FOLDER_PATH, (error) => {
+ if (error) {
+ spinner.fail(`${error}, please create it`);
+ } else {
+ // Write the information into popular-persons.json
+ fs.writeFile(PERSON_FILE_PATH, dataText, "utf-8", (writeError) => {
+ if (writeError) {
+ spinner.fail(writeError);
+
+ // Notify the writting error
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: writeError,
+ icon: ICON_PATH,
+ });
+ } else {
+ spinner.succeed(
+ `Person data loaded and saved into ${PERSON_FILE_PATH}`
+ );
+
+ // Notify the writting succeed
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: `Person data loaded and saved into ${PERSON_FILE_PATH}`,
+ icon: ICON_PATH,
+ });
+ }
+ });
+ }
+ });
+}
+
+function readLocalGetPersonData() {
+ fs.readFile(PERSON_FILE_PATH, "utf-8", (readError, data) => {
+ if (readError) {
+ spinner.fail(
+ `Reading error: no such file or directory '${PERSON_FILE_PATH}', please make a '--save' command before execute the '--local' command`
+ );
+
+ // Notify the reading error
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: `Reading error: no such file or directory '${PERSON_FILE_PATH}', please make a '--save' command before execute the '--local' command`,
+ icon: ICON_PATH,
+ });
+ } else {
+ const dataObject = JSON.parse(data);
+ printGetPersonInformation(dataObject);
+
+ // Notify the reading succeed
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: "Person data loaded",
+ icon: ICON_PATH,
+ });
+ }
+ });
+}
+
+module.exports = {
+ saveGetPersonData: saveGetPersonData,
+ readLocalGetPersonData: readLocalGetPersonData,
+};
diff --git a/src/module/get_person/get-person-request.js b/src/module/get_person/get-person-request.js
new file mode 100644
index 0000000..861f810
--- /dev/null
+++ b/src/module/get_person/get-person-request.js
@@ -0,0 +1,53 @@
+const https = require("https");
+
+const {
+ API_KEY,
+ API_HOSTNAME,
+ API_TIMEOUT_REQUEST,
+} = require("../../utils/constants");
+
+const spinner = require("../../components/spinner");
+
+// Functions to print or save the data
+const { printGetPersonInformation } = require("./print-get-person");
+const { saveGetPersonData } = require("./get-person-data-local-handle");
+
+function getPersonRequest({ id, save }) {
+ const options = {
+ hostname: API_HOSTNAME,
+ port: 443,
+ path: `/3/person/${id}?api_key=${API_KEY}`,
+ method: "GET",
+ };
+
+ const req = https.request(options, (res) => {
+ let dataText = "";
+
+ res.on("data", (d) => {
+ dataText += d;
+
+ spinner.start("Fetching the person data...\n\n");
+ });
+
+ res.on("end", () => {
+ // This timeout is to show the loading data spinner
+ setTimeout(() => {
+ const dataObject = JSON.parse(dataText);
+
+ if (save) {
+ saveGetPersonData(dataText);
+ } else {
+ printGetPersonInformation(dataObject);
+ }
+ }, API_TIMEOUT_REQUEST);
+ });
+ });
+
+ req.on("error", (e) => {
+ spinner.fail(`Error "${e.code}" (Code ${e.errno})`);
+ });
+
+ req.end();
+}
+
+module.exports = { getPersonRequest: getPersonRequest };
diff --git a/src/module/get_person/index.js b/src/module/get_person/index.js
new file mode 100644
index 0000000..5eb1ba2
--- /dev/null
+++ b/src/module/get_person/index.js
@@ -0,0 +1,7 @@
+const { getPersonRequest } = require("./get-person-request");
+const { readLocalGetPersonData } = require("./get-person-data-local-handle");
+
+module.exports = {
+ getPersonRequest: getPersonRequest,
+ readLocalGetPersonData: readLocalGetPersonData,
+};
diff --git a/src/module/get_person/print-get-person.js b/src/module/get_person/print-get-person.js
new file mode 100644
index 0000000..897f471
--- /dev/null
+++ b/src/module/get_person/print-get-person.js
@@ -0,0 +1,67 @@
+const chalk = require("chalk");
+
+const { SECTION_SEPARATOR } = require("../../utils/constants");
+
+const spinner = require("../../components/spinner");
+
+function printGetPersonInformation(dataObject) {
+ if (dataObject.success == false) {
+ spinner.fail(dataObject.status_message);
+ } else {
+ // Separator
+ console.log(chalk.white(`${SECTION_SEPARATOR}\n`));
+
+ // Title person
+ console.log(chalk.white("Person:\n"));
+
+ // ID property
+ console.log(chalk.white(`ID: ${dataObject.id}`));
+
+ // Name property
+ console.log(`Name: ${chalk.bold.blue(dataObject.name)}`);
+
+ // Birthday property
+ console.log(
+ chalk.white(`Birthday: ${dataObject.birthday}`) +
+ chalk.gray(" | ") +
+ chalk.white(dataObject.place_of_birth)
+ );
+
+ // known_for_department property
+ if (dataObject.known_for_department == "Acting") {
+ console.log(
+ `Department: ${chalk.magenta(dataObject.known_for_department)}`
+ );
+ }
+
+ //Biography poperty
+ console.log(
+ chalk.white("Biography: ") + chalk.bold.blue(dataObject.biography) + "\n"
+ );
+
+ //Also_known_as section
+ if (dataObject.also_known_as.length > 0) {
+ console.log(chalk.white("Also known as:\n"));
+
+ dataObject.also_known_as.forEach((name) => {
+ console.log(chalk.white(name));
+ });
+
+ console.log("");
+ } else {
+ console.log(
+ chalk.yellow(`${dataObject.name} doesn’t have any alternate names\n`)
+ );
+ }
+
+ // Separator
+ console.log(chalk.white(`${SECTION_SEPARATOR}\n\n\n`));
+
+ // Operation succeed
+ spinner.succeed("Person data loaded");
+ }
+}
+
+module.exports = {
+ printGetPersonInformation: printGetPersonInformation,
+};
diff --git a/src/module/get_persons/get-persons-data-local-handle.js b/src/module/get_persons/get-persons-data-local-handle.js
new file mode 100644
index 0000000..27dcfd5
--- /dev/null
+++ b/src/module/get_persons/get-persons-data-local-handle.js
@@ -0,0 +1,78 @@
+const fs = require("fs");
+const notifier = require("node-notifier");
+
+const spinner = require("../../components/spinner");
+
+const {
+ PERSONS_FOLDER_PATH,
+ PERSONS_FILE_PATH,
+ ICON_PATH,
+} = require("../../utils/constants");
+
+const { printGetPersonsInformation } = require("./print-get-persons");
+
+function saveGetPersonsData(dataText) {
+ // Check if the directory exist
+ fs.access(PERSONS_FOLDER_PATH, (error) => {
+ if (error) {
+ spinner.fail(`${error}, please create it`);
+ } else {
+ // Write the information into popular-persons.json
+ fs.writeFile(PERSONS_FILE_PATH, dataText, "utf-8", (writeError) => {
+ if (writeError) {
+ spinner.fail(writeError);
+
+ // Notify the writting error
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: writeError,
+ icon: ICON_PATH,
+ });
+ } else {
+ spinner.succeed(
+ `Popular Persons data loaded and saved into ${PERSONS_FILE_PATH}`
+ );
+
+ // Notify the writting succeed
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: `Popular Persons data loaded and saved into ${PERSONS_FILE_PATH}`,
+ icon: ICON_PATH,
+ });
+ }
+ });
+ }
+ });
+}
+
+function readLocalGetPersonsData() {
+ fs.readFile(PERSONS_FILE_PATH, "utf-8", (readError, data) => {
+ if (readError) {
+ spinner.fail(
+ `Reading error: no such file or directory '${PERSONS_FILE_PATH}', please make a '--save' command before execute the '--local' command`
+ );
+
+ // Notify the reading error
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: `Reading error: no such file or directory '${PERSONS_FILE_PATH}', please make a '--save' command before execute the '--local' command`,
+ icon: ICON_PATH,
+ });
+ } else {
+ const dataObject = JSON.parse(data);
+ printGetPersonsInformation(dataObject);
+
+ // Notify the reading succeed
+ notifier.notify({
+ title: "MovieDB CLI",
+ message: "Popular Persons data loaded",
+ icon: ICON_PATH,
+ });
+ }
+ });
+}
+
+module.exports = {
+ saveGetPersonsData: saveGetPersonsData,
+ readLocalGetPersonsData: readLocalGetPersonsData,
+};
diff --git a/src/module/get_persons/get-persons-request.js b/src/module/get_persons/get-persons-request.js
new file mode 100644
index 0000000..935c0b0
--- /dev/null
+++ b/src/module/get_persons/get-persons-request.js
@@ -0,0 +1,53 @@
+const https = require("https");
+
+const {
+ API_KEY,
+ API_HOSTNAME,
+ API_TIMEOUT_REQUEST,
+} = require("../../utils/constants");
+
+const spinner = require("../../components/spinner");
+
+// Functions to print or save the data
+const { printGetPersonsInformation } = require("./print-get-persons");
+const { saveGetPersonsData } = require("./get-persons-data-local-handle");
+
+function getPersonsRequest({ page, save }) {
+ const options = {
+ hostname: API_HOSTNAME,
+ port: 443,
+ path: `/3/person/popular?page=${page}&api_key=${API_KEY}`,
+ method: "GET",
+ };
+
+ const req = https.request(options, (res) => {
+ let dataText = "";
+
+ res.on("data", (d) => {
+ dataText += d;
+
+ spinner.start("Fetching the popular person's data...\n\n");
+ });
+
+ res.on("end", () => {
+ // This timeout is to show the loading data spinner
+ setTimeout(() => {
+ const dataObject = JSON.parse(dataText);
+
+ if (save) {
+ saveGetPersonsData(dataText);
+ } else {
+ printGetPersonsInformation(dataObject);
+ }
+ }, API_TIMEOUT_REQUEST);
+ });
+ });
+
+ req.on("error", (e) => {
+ spinner.fail(`Error "${e.code}" (Code ${e.errno})`);
+ });
+
+ req.end();
+}
+
+module.exports = { getPersonsRequest: getPersonsRequest };
diff --git a/src/module/get_persons/index.js b/src/module/get_persons/index.js
new file mode 100644
index 0000000..111db11
--- /dev/null
+++ b/src/module/get_persons/index.js
@@ -0,0 +1,7 @@
+const { getPersonsRequest } = require("./get-persons-request");
+const { readLocalGetPersonsData } = require("./get-persons-data-local-handle");
+
+module.exports = {
+ getPersonsRequest: getPersonsRequest,
+ readLocalGetPersonsData: readLocalGetPersonsData,
+};
diff --git a/src/module/get_persons/print-get-persons.js b/src/module/get_persons/print-get-persons.js
new file mode 100644
index 0000000..9107dab
--- /dev/null
+++ b/src/module/get_persons/print-get-persons.js
@@ -0,0 +1,71 @@
+const chalk = require("chalk");
+
+const { SECTION_SEPARATOR } = require("../../utils/constants");
+
+const spinner = require("../../components/spinner");
+
+function printGetPersonsInformation(dataObject) {
+ if (dataObject.errors) {
+ spinner.fail(dataObject.errors[0]);
+ } else {
+ const results = dataObject.results;
+ results.forEach((r) => {
+ // Separator
+ console.log(chalk.white(`${SECTION_SEPARATOR}\n`));
+
+ // Title person
+ console.log(chalk.white("Person:\n"));
+
+ // ID property
+ console.log(chalk.white(`ID: ${r.id}`));
+
+ // Name property
+ console.log(`Name: ${chalk.bold.blue(r.name)}`);
+
+ // known_for_department property
+ if (r.known_for_department == "Acting") {
+ console.log(`Department: ${chalk.magenta(r.known_for_department)}`);
+ }
+
+ // Empty line
+ console.log("");
+
+ // Appearing in movies section
+ let cnt = 0;
+ r.known_for.forEach((movie) => {
+ if (movie.title) {
+ if (cnt == 0) {
+ console.log(chalk.white("Appearing in movies:\n"));
+ }
+ console.log(chalk.white(`\tMovie:`));
+ console.log(chalk.white(`\tID: ${movie.id}`));
+ console.log(chalk.white(`\tRelease date: ${movie.release_date}`));
+ console.log(chalk.white(`\tTitle: ${movie.title}\n`));
+ cnt += 1;
+ }
+ });
+ if (cnt == 0) {
+ console.log(
+ chalk.hex("#FFA500")(`${r.name} doesn’t appear in any movie\n`)
+ );
+ }
+ });
+
+ // Page index
+ if (dataObject.page <= dataObject.total_pages) {
+ console.log(chalk.white(SECTION_SEPARATOR));
+ console.log(
+ chalk.white(
+ `Page ${dataObject.page} of ${dataObject.total_pages}\n\n\n`
+ )
+ );
+ }
+
+ // Operation succeed
+ spinner.succeed("Popular Persons data loaded");
+ }
+}
+
+module.exports = {
+ printGetPersonsInformation: printGetPersonsInformation,
+};
diff --git a/src/moviedb.js b/src/moviedb.js
index dd5591a..bf3f5a0 100755
--- a/src/moviedb.js
+++ b/src/moviedb.js
@@ -2,36 +2,113 @@
const { Command } = require("commander");
+// Get persons command functions
+const {
+ getPersonsRequest,
+ readLocalGetPersonsData,
+} = require("./module/get_persons");
+
+// Get person command functions
+const {
+ getPersonRequest,
+ readLocalGetPersonData,
+} = require("./module/get_person");
+
+// Get movies command functions
+const {
+ getMoviesRequest,
+ getMoviesNowPlayingRequest,
+ readLocalGetMoviesData,
+} = require("./module/get_movies");
+
+// Get movie command functions
+const {
+ getMovieRequest,
+ getMovieReviewsRequest,
+ readLocalGetMovieData,
+} = require("./module/get_movie");
+
const program = new Command();
program.version("0.0.1");
program
.command("get-persons")
.description("Make a network request to fetch most popular persons")
- .action(function handleAction() {
- console.log("hello-world");
- });
+ .action((options) => {
+ if (options.local) {
+ readLocalGetPersonsData();
+ } else {
+ getPersonsRequest(options);
+ }
+ })
+ .requiredOption("-p, --popular", "Fetch the popular persons")
+ .requiredOption(
+ "--page ",
+ "The page of persons data results to fetch"
+ )
+ .option("--save", "Save the data in a local file")
+ .option("--local", "Read the data from the local file");
program
.command("get-person")
.description("Make a network request to fetch the data of a single person")
- .action(function handleAction() {
- console.log("hello-world");
- });
+ .action((options) => {
+ if (options.local) {
+ readLocalGetPersonData();
+ } else {
+ getPersonRequest(options);
+ }
+ })
+ .requiredOption("-i, --id ", "The id of the person")
+ .option("--save", "Save the data in a local file")
+ .option("--local", "Read the data from the local file");
program
.command("get-movies")
.description("Make a network request to fetch movies")
- .action(function handleAction() {
- console.log("hello-world");
- });
+ .action((options) => {
+ if (options.local) {
+ if (options.nowPlaying) {
+ readLocalGetMoviesData(true);
+ } else {
+ readLocalGetMoviesData();
+ }
+ } else {
+ if (options.nowPlaying) {
+ getMoviesNowPlayingRequest(options);
+ } else {
+ getMoviesRequest(options);
+ }
+ }
+ })
+ .requiredOption("--page ", "The page of movies data results to fetch")
+ .option("-p, --popular", "Fetch the popular movies")
+ .option("-n, --now-playing", "Fetch the movies that are playing now")
+ .option("--save", "Save the data in a local file")
+ .option("--local", "Read the data from the local file");
program
.command("get-movie")
.description("Make a network request to fetch the data of a single person")
- .action(function handleAction() {
- console.log("hello-world");
- });
+ .action((options) => {
+ if (options.local) {
+ if (options.reviews) {
+ readLocalGetMovieData(true);
+ } else {
+ readLocalGetMovieData();
+ }
+ } else {
+ if (options.reviews) {
+ getMovieReviewsRequest(options);
+ } else {
+ getMovieRequest(options);
+ }
+ }
+ })
+ .requiredOption("-i, --id ", "The id of the movie")
+ .option("-r, --reviews", "Fetch the reviews of the movie")
+ .option("--save", "Save the data in a local file")
+ .option("--local", "Read the data from the local file");
// error on unknown commands
diff --git a/src/utils/constants.js b/src/utils/constants.js
new file mode 100644
index 0000000..4bc1de3
--- /dev/null
+++ b/src/utils/constants.js
@@ -0,0 +1,68 @@
+const path = require("path");
+require("dotenv").config();
+
+// Api constants
+const API_KEY = process.env.API_KEY;
+const API_HOSTNAME = "api.themoviedb.org";
+const API_TIMEOUT_REQUEST = "1000";
+
+// Separator constant
+const SECTION_SEPARATOR =
+ "---------------------------------------------------------------";
+
+// Paths constants
+const GENERAL_PATH_FILES = "files";
+
+// Persons
+const PERSONS_FOLDER_NAME = "persons folder";
+const PERSONS_FOLDER_PATH = path.join(GENERAL_PATH_FILES, PERSONS_FOLDER_NAME);
+const PERSONS_FILE_NAME = "popular-persons.json";
+const PERSONS_FILE_PATH = path.resolve(PERSONS_FOLDER_PATH, PERSONS_FILE_NAME);
+
+// Person
+const PERSON_FILE_NAME = "person.json";
+const PERSON_FILE_PATH = path.resolve(PERSONS_FOLDER_PATH, PERSON_FILE_NAME);
+
+// Movies
+const MOVIES_FOLDER_NAME = "movies folder";
+const MOVIES_FOLDER_PATH = path.join(GENERAL_PATH_FILES, MOVIES_FOLDER_NAME);
+const MOVIES_FILE_NAME = "popular-movies.json";
+const MOVIES_FILE_PATH = path.resolve(MOVIES_FOLDER_PATH, MOVIES_FILE_NAME);
+
+// Movies now playing
+const MOVIES_NP_FILE_NAME = "now-playing-movies.json";
+const MOVIES_NP_FILE_PATH = path.resolve(
+ MOVIES_FOLDER_PATH,
+ MOVIES_NP_FILE_NAME
+);
+
+// Movie
+const MOVIE_FILE_NAME = "movie.json";
+const MOVIE_FILE_PATH = path.resolve(MOVIES_FOLDER_PATH, MOVIE_FILE_NAME);
+
+// Movie with reviews
+const MOVIE_REVIEWS_FILE_NAME = "movie-reviews.json";
+const MOVIE_REVIEWS_FILE_PATH = path.resolve(
+ MOVIES_FOLDER_PATH,
+ MOVIE_REVIEWS_FILE_NAME
+);
+
+// Icon
+const ICON_NAME = "app-icon.png";
+const ICON_PATH = path.join("files", ICON_NAME);
+
+module.exports = {
+ API_KEY: API_KEY,
+ API_HOSTNAME: API_HOSTNAME,
+ API_TIMEOUT_REQUEST: API_TIMEOUT_REQUEST,
+ SECTION_SEPARATOR: SECTION_SEPARATOR,
+ PERSONS_FOLDER_PATH: PERSONS_FOLDER_PATH,
+ PERSONS_FILE_PATH: PERSONS_FILE_PATH,
+ PERSON_FILE_PATH: PERSON_FILE_PATH,
+ MOVIES_FOLDER_PATH: MOVIES_FOLDER_PATH,
+ MOVIES_FILE_PATH: MOVIES_FILE_PATH,
+ MOVIES_NP_FILE_PATH: MOVIES_NP_FILE_PATH,
+ MOVIE_FILE_PATH: MOVIE_FILE_PATH,
+ MOVIE_REVIEWS_FILE_PATH: MOVIE_REVIEWS_FILE_PATH,
+ ICON_PATH: ICON_PATH,
+};