You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
3.7 KiB
146 lines
3.7 KiB
from __future__ import absolute_import, print_function |
|
from pymongo import MongoClient |
|
from settings import DATABASE, TMDB_APIKEY |
|
from datetime import date |
|
import tmdbsimple as tmdb |
|
import sys |
|
import time |
|
|
|
|
|
client = MongoClient(**DATABASE) |
|
db = client.showtimes |
|
tmdb.API_KEY = TMDB_APIKEY |
|
|
|
|
|
def update_showtimes(_id, movie): |
|
key = {'_id': _id} |
|
update_dict = { |
|
'movie_id': movie['id'], |
|
'poster_path': movie['poster_path'], |
|
} |
|
result = db.showtimes.update(key, {'$set': update_dict}, True) |
|
## try adding to movie if not exist |
|
add_movie(movie) |
|
return result |
|
|
|
|
|
def add_movie(movie): |
|
movie_collection = db.movies |
|
q = { |
|
'id': movie['id'] |
|
} |
|
_m = movie_collection.find_one(q) |
|
if _m: |
|
return _m |
|
''' |
|
## adding new one with full info |
|
{ |
|
u'poster_path': u'/otcv3wWKz0vJyicOZgz2AheJ5UV.jpg', |
|
u'production_countries': [ |
|
{u'iso_3166_1': u'US', u'name': u'United States of America'} |
|
], |
|
u'revenue': 0, |
|
u'overview': u'........................', |
|
u'id': 245891, |
|
u'genres': [ |
|
{u'id': 28, u'name': u'Action'}, |
|
{u'id': 53, u'name': u'Thriller'}], |
|
u'title': u'John Wick', |
|
u'tagline': u'', |
|
u'vote_count': 5, |
|
u'homepage': u'', |
|
u'belongs_to_collection': None, |
|
u'status': u'Released', |
|
u'spoken_languages': [], |
|
u'imdb_id': u'tt2911666', |
|
u'adult': False, |
|
u'backdrop_path': u'/umC04Cozevu8nn3JTDJ1pc7PVTn.jpg', |
|
u'production_companies': [], |
|
u'release_date': u'2014-10-24', |
|
u'popularity': 3.044875809, |
|
u'original_title': u'John Wick', |
|
u'budget': 0, |
|
u'vote_average': 8.4, |
|
u'runtime': 0} |
|
''' |
|
identity = tmdb.Movies(movie['id']) |
|
m_info = identity.info() |
|
new_movie = movie_collection.insert(m_info) |
|
return new_movie |
|
|
|
|
|
def find_movie(qword): |
|
''' |
|
find in db.movies first, then fallback to tmdb |
|
''' |
|
q = { |
|
'title': qword |
|
} |
|
_mx = db.movies.find_one(q) |
|
if _mx: |
|
print('FOUND') |
|
print(_mx) |
|
else: |
|
print('NOT FOUND') |
|
|
|
return [] |
|
|
|
''' |
|
return something like this if found |
|
{ |
|
u'poster_path': u'/otcv3wWKz0vJyicOZgz2AheJ5UV.jpg', |
|
u'title': u'John Wick', |
|
u'release_date': u'2014-10-24', |
|
u'popularity': 3.044875809, |
|
u'original_title': u'John Wick', |
|
u'backdrop_path': u'/umC04Cozevu8nn3JTDJ1pc7PVTn.jpg', |
|
u'vote_count': 5, |
|
u'adult': False, |
|
u'vote_average': 8.4, |
|
u'id': 245891 |
|
} |
|
''' |
|
search = tmdb.Search() |
|
response = search.movie(query=qword) |
|
if not search.results: |
|
return [] |
|
''' |
|
dang we pick the first match.. |
|
since I don't know how to deal with multiple result yet |
|
''' |
|
return search.results[0] |
|
|
|
|
|
def main(argv): |
|
''' |
|
Mainly we are getting movie name from db.showtimes |
|
& check if there is any info on db.movies. |
|
If not, we are trying to fetch for new info |
|
''' |
|
print('Fetching Movie without information') |
|
q = { |
|
'$or': [ |
|
{'movie_id': {'$exists': False}}, |
|
{'movie_id': ''}, |
|
{'poster_path': ''}, |
|
] |
|
} |
|
result = db.showtimes.find(q) |
|
cannot_find = [] |
|
for _ in result: |
|
# skip if we know that we aren't going get any info anyway |
|
if _['movie'] in cannot_find: |
|
print('Nah -- you will not find this: ', _['movie']) |
|
continue |
|
|
|
time.sleep(1) |
|
found = find_movie(_['movie']) |
|
|
|
if found: |
|
update_showtimes(_['_id'], found) |
|
else: |
|
cannot_find.append(_['movie']) |
|
|
|
|
|
if __name__ == '__main__': |
|
main(sys.argv[1:])
|
|
|