Skip to content

Commit

Permalink
Merge pull request #40 from dbatten5/search-movie-region
Browse files Browse the repository at this point in the history
Search movie region
  • Loading branch information
dbatten5 committed Nov 20, 2021
2 parents 5b0e4ad + 82f0eae commit c9a8e12
Show file tree
Hide file tree
Showing 10 changed files with 363 additions and 101 deletions.
19 changes: 18 additions & 1 deletion docs/tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ through `search_tmdb_movies`. Note that this search performs a lot quicker than
'overview': 'Set in the 22nd century, The Matrix tells the story of a computer hacker...'
'popularity': 79.956,
'poster_path': '/f89U3ADr1oiB1s9GkdPOEpXUk5H.jpg',
'release_date': '1999-06-11',
'release_date': '1999-03-30',
'title': 'The Matrix',
'video': False,
'vote_average': 8.2,
Expand All @@ -68,6 +68,23 @@ through `search_tmdb_movies`. Note that this search performs a lot quicker than
}
```

By default the `release_date` will be the US release date. You can specify a different
region by providing a region argument:

```python
>>> from phylm.tools import search_tmdb_movies
>>> search_tmdb_movies("The Matrix", region="gb")
[{
'id': 603,
...
'release_date': '1999-06-11',
'title': 'The Matrix',
...
}, {
...
}
```

::: phylm.tools.search_tmdb_movies
rendering:
show_signature_annotations: true
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "phylm"
version = "4.3.0"
version = "4.3.1"
description = "Phylm"
authors = ["Dom Batten <[email protected]>"]
license = "MIT"
Expand Down
12 changes: 8 additions & 4 deletions src/phylm/clients/tmdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,23 +20,27 @@ def __init__(self, api_key: str) -> None:
self.api_key = api_key
self._base = "https://api.themoviedb.org/3"

def search_movies(self, query: str) -> List[Dict[str, Any]]:
def search_movies(self, query: str, region: str = "us") -> List[Dict[str, Any]]:
"""Search for movies.
Args:
query: the search query
region: the region for the query, affects the release date value
Returns:
Any: the search results
List[Dict[str, Any]]: the search results
"""
payload = {
"api_key": self.api_key,
"language": "en-GB",
"language": "en-US",
"query": query,
"include_adult": "false",
"region": "GB",
"region": region.upper(),
}
res = self.session.get(f"{self._base}/search/movie", params=payload)

res.raise_for_status()

results: List[Dict[str, Any]] = res.json()["results"]
return results

Expand Down
7 changes: 5 additions & 2 deletions src/phylm/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,21 +57,24 @@ def _initialize_tmdb_client(api_key: Optional[str] = None) -> TmdbClient:


def search_tmdb_movies(
query: str, api_key: Optional[str] = None
query: str, api_key: Optional[str] = None, region: str = "us"
) -> List[Dict[str, Any]]:
"""Search for movies on TMDb.
Args:
query: the query string
api_key: an api_key can either be provided here or through a TMDB_API_KEY env
var
region: an optional region to provide with the search request, affects the
release_date value returned, must be provided in ISO 3166-1 format (eg.
"us" or "gb")
Returns:
List[Dict[str, Any]]: the search results
"""
client = _initialize_tmdb_client(api_key=api_key)

return client.search_movies(query=query)
return client.search_movies(query=query, region=region)


def get_streaming_providers(
Expand Down
53 changes: 53 additions & 0 deletions tests/fixtures/vcr_cassettes/clients/tmdb/invalid_key.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
interactions:
- request:
body: null
headers:
Accept:
- "*/*"
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
User-Agent:
- python-requests/2.26.0
method: GET
uri: https://api.themoviedb.org/3/search/movie?include_adult=false&language=en-US&query=The+Matrix&region=US
response:
body:
string:
'{"status_code":7,"status_message":"Invalid API key: You must be granted
a valid key.","success":false}
'
headers:
Access-Control-Allow-Methods:
- GET, HEAD, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:
- "*"
Access-Control-Expose-Headers:
- ETag, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, Retry-After,
Content-Length, Content-Range
Cache-Control:
- public, max-age=300
Connection:
- keep-alive
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 20 Nov 2021 10:19:07 GMT
Server:
- openresty
Transfer-Encoding:
- chunked
Via:
- 1.1 bdbd00aed84ab2a1b2623adb63c9331f.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- oeHPChCFqG9v3RhOYMdD7zFVgpREaR4uyeTjy26ALcug3h1GcYPHOg==
X-Amz-Cf-Pop:
- LHR61-P1
X-Cache:
- Error from cloudfront
status:
code: 401
message: Unauthorized
version: 1
137 changes: 137 additions & 0 deletions tests/fixtures/vcr_cassettes/clients/tmdb/invalid_region.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
interactions:
- request:
body: null
headers:
Accept:
- "*/*"
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
User-Agent:
- python-requests/2.26.0
method: GET
uri: https://api.themoviedb.org/3/search/movie?include_adult=false&language=en-US&query=The+Matrix&region=XX
response:
body:
string: !!binary |
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
3mR1hzIAAA==
headers:
Access-Control-Allow-Methods:
- GET, HEAD, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:
- "*"
Access-Control-Expose-Headers:
- ETag, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, Retry-After,
Content-Length, Content-Range
Age:
- "65"
Cache-Control:
- public, max-age=600
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json;charset=utf-8
Date:
- Sat, 20 Nov 2021 10:16:24 GMT
Server:
- openresty
Transfer-Encoding:
- chunked
Vary:
- Accept-Encoding
Via:
- 1.1 774a6d3757afff80abe764a68fbbe545.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- yeb9F8W_my08XUB0tj3_7DWMS65xo3oVnADXkSANNZSm6XSSVIJtRw==
X-Amz-Cf-Pop:
- LHR50-C1
X-Cache:
- Hit from cloudfront
status:
code: 200
message: OK
version: 1
10 changes: 5 additions & 5 deletions tests/fixtures/vcr_cassettes/clients/tmdb/no_results.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ interactions:
User-Agent:
- python-requests/2.26.0
method: GET
uri: https://api.themoviedb.org/3/search/movie?include_adult=false&language=en-GB&query=aslkdjaskldjaslkdjaslkdjasd&region=GB
uri: https://api.themoviedb.org/3/search/movie?include_adult=false&language=en-US&query=aslkdjaskldjaslkdjaslkdjasd&region=US
response:
body:
string: !!binary |
Expand All @@ -34,19 +34,19 @@ interactions:
Content-Type:
- application/json;charset=utf-8
Date:
- Fri, 19 Nov 2021 14:23:36 GMT
- Sat, 20 Nov 2021 10:13:00 GMT
Server:
- openresty
Transfer-Encoding:
- chunked
Vary:
- Accept-Encoding
Via:
- 1.1 68126347056de2d05be3dd362ccba987.cloudfront.net (CloudFront)
- 1.1 38625201ad7f896d72a7ab055328881f.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- MZgNnx0ZejBqMqIgXJ86OP5OtMBnbboSC5jTI8w_I5BKmv2vpMLJLA==
- 4PLVZIxaLwY7MEg16ZKq9lvl2_7L69aF_s3fDB7kmtMiKdyPxYC2IA==
X-Amz-Cf-Pop:
- LHR50-C1
- LHR52-C1
X-Cache:
- Miss from cloudfront
status:
Expand Down
Loading

0 comments on commit c9a8e12

Please sign in to comment.