FilmAffinity-API is a public and non offical API wich allow you to get information about films from FilmAffinity website. You can search films and get their complet information, including cast, synopsis and cover.
This API is written in PHP and uses Slim 4 framework.
Prerequisites:
- Docker.
- Docker Desktop (optional)
Instructions:
- Run
docker compose
to star Docker container and inits system.
docker compose up -d
- Run
composer install
to install the project dependencies:
composer install
- Rename
config/.env.example
toconfig/.env
to activates environment settings. - Setup API settings edditing
config/.env
file (don't changeURL_PATH
and database variables). - Use test user (email
test@test.com
and passwordtest
) or create a user using commandapp:create-user
:
docker exec -it filmaffinityapi-web-server php .bin/console app:create-user
- FilmAffinityAPI is available at the following URL:
http://localhost/app
Prerequisites:
- PHP 8.3 or later.
- PHP libraries
mbstring
,zip
,gd
,pdo_mysql
,sockets
andapcu
installed. - Apache's
mod_rewrite
andmod_headers
modules enabled. - Composer
Instructions:
- Unzip the API files in an empty folder in your server.
- Make sure that the HTTP shared folder match with the API
public
folder. log
,tmp
anddata
folders and subfolders needs read and write permissions:
chmod 777 -R log
chmod 777 -R tmp
chmod 777 -R data
- Run
composer install
to install the project dependencies:
composer install
- Rename
config/.env.example
toconfig/.env
to activates environment settings. - Setup API settings edditing
config/.env
file. - Create a MySQL database and run scripts under folder
scripts
to create database structure. - Create a user using command
app:create-user
:
php .bin/console app:create-user
The API has the following public methods:
Method name | HTTP method | API endpoint | Body |
---|---|---|---|
Get user token | POST | users/token | JSON Schema |
Simple films search | POST | searches/simple | JSON Schema |
Advanced films search | POST | searches/advanced | JSON Schema |
Get film information | GET | films/:id | - |
Get genres | GET | genres | - |
Get countries | GET | countries | - |
System provides some Symfony console commands:
Command | Command description |
---|---|
app:create-user |
Create a new user |
app:delete-user |
Delete a user |
app:disable-user |
Disable a user |
app:enable-user |
Enable a user |
app:get-password |
Get hashed password |
app:get-token |
Get JWT user token |
app:backup-countries |
FilmAffinity countries backup (store in data/backup folder) |
app:backup-genres |
FilmAffinity genres backup (store in data/backup folder) |
To executes a command, run the following command:
php .bin/console <COMMAND>
In a docker environment, execute it into container:
docker exec -it filmaffinityapi-web-server php .bin/console <COMMAND>
URL
[GET] http://<server_domain_api>/searches/simple
INPUT
{"text": "pulp fiction"}
OUTPUT
{
"status": "OK",
"statusCode": 200,
"response": {
"total": 2,
"results": [
{
"id": 160882,
"title": "Pulp Fiction",
"year": 1994,
"directors": ["Quentin Taratino"]
},
{
"id": 991349,
"title": "8 Bit Cinema: Pulp Fiction",
"year": 2014,
"directors": ["David Dutton"]
}
]
}
}
EXAMPLE 1: An example of an advanced search searching only for a text in the title of the film.
URL
[POST] http://<server_domain_api>/searches/advanced
INPUT
{
"text": "pulp fiction",
"search_in_title": true,
"search_in_director": false,
"search_in_cast": false,
"search_in_screenplay": false,
"search_in_photography": false,
"search_in_soundtrack": false,
"search_in_producer": false,
"country": "",
"genre": "",
"year_from": 0,
"year_to": 0
}
OUTPUT
{
"status": "OK",
"statusCode": 200,
"response": {
"total": 1,
"results": [
{
"id": 160882,
"title": "Pulp Fiction",
"year": 1994,
"directors": ["Quentin Taratino"]
},
{
"id": 991349,
"title": "8 Bit Cinema: Pulp Fiction",
"year": 2014,
"directors": ["David Dutton"]
}
]
}
}
EXAMPLE 2: another example of an advanced search searching for a text in the title of the film and between two years.
URL
[POST] http://<server_domain_api>/searches/advanced
INPUT
{
"text": "pulp fiction",
"search_in_title": true,
"search_in_director": false,
"search_in_cast": false,
"search_in_screenplay": false,
"search_in_photography": false,
"search_in_soundtrack": false,
"search_in_producer": false,
"country": "",
"genre": "",
"year_from": 1992,
"year_to": 2000
}
OUTPUT
{
"status": "OK",
"statusCode": 200,
"response": {
"total": 1,
"results": [
{
"id": 160882,
"title": "Pulp Fiction",
"year": 1994,
"directors": ["Quentin Taratino"]
}
]
}
}
URL
[GET] http://<server_domain_api>/films/160882
OUTPUT
{
"status": "OK",
"statusCode": 200,
"response": {
"filmAfinityId": "160882",
"title": "Pulp Fiction",
"originalTitle": "Pulp Fiction",
"year": 1994,
"duration": 153,
"coverUrl": "https://pics.filmaffinity.com/pulp_fiction-210382116-large.jpg",
"coverFile": "pulp_fiction-210382116-large.jpg",
"rating": "8,6",
"country": "Estados Unidos",
"directors": ["Quentin Tarantino"],
"screenplay": "Quentin Tarantino, Roger Avary",
"soundtrack": "Varios",
"photography": "Andrzej Sekula",
"cast": ["John Travolta", "Samuel L. Jackson", "Uma Thurman", "Bruce Willis", "Ving Rhames", "Harvey Keitel", "Tim Roth", "Amanda Plummer", "María de Medeiros", "Eric Stoltz", "Rosanna Arquette", "Christopher Walken", "Paul Calderon", "Bronagh Gallagher", "Peter Greene", "Stephen Hibbert", "Angela Jones", "Phil LaMarr", "Robert Ruth", "Julia Sweeney", "Quentin Tarantino", "Frank Whaley", "Duane Whitaker", "Steve Buscemi", "Burr Steers"],
"producer": "Miramax, Band Apart, Jersey Films. Lawrence Bender",
"genres": ["Thriller"],
"genreTopics": ["Crimen", "Historias cruzadas", "Película de culto", "Comedia negra"],
"synopsis": "Jules y Vincent, dos asesinos a sueldo con no demasiadas luces, trabajan para el gángster Marsellus Wallace. Vincent le confiesa a Jules que Marsellus le ha pedido que cuide de Mia, su atractiva mujer. Jules le recomienda prudencia porque es muy peligroso sobrepasarse con la novia del jefe. Cuando llega la hora de trabajar, ambos deben ponerse \"manos a la obra\". Su misión: recuperar un misterioso maletín."
}
}
URL
[GET] http://<server_domain_api>/genres
OUTPUT
{
"status": "OK",
"statusCode": 200,
"response": [
{
"code": "AC",
"description": "Acción"
},
{
"code": "AN",
"description": "Animación"
},
{
"code": "AV",
"description": "Aventuras"
},
{
"code": "BE",
"description": "Bélico"
}
]
}
URL
[GET] http://<server_domain_api>/countries
OUTPUT
{
"status": "OK",
"statusCode": 200,
"response": [
{
"code": "AF",
"name": "Afganistán"
},
{
"code": "AL",
"name": "Albania"
},
{
"code": "DE",
"name": "Alemania"
},
{
"code": "FD",
"name": "Alemania del Este (RDA)"
}
]
}
You must inform the country/genre code in the body request of advances search if you want use these filters.