| ---------------------------------------- | |
| Rating DVDs with Python | |
| februar 08th, 2020 | |
| ---------------------------------------- | |
| Rating DVDs with python | |
| Recently, my kids were talking about buying some DVDs of their | |
| favourite movies. My son was still missing part IV to VI of Star Wars, | |
| and considered a boxed edition with all movies. Buying new stuff is | |
| evil, so I pointed my browser to our local craigslist (finn.no in | |
| Norway). A while later, I'd found what I consider the perfect deal: A | |
| huge box with almost 200 DVDs, including ALL movies that my kids | |
| wanted to buy. And all that for almost nothing (we speak the price of | |
| two(!) Star Wars boxed editions for all 198 DVDs). Most of the movies | |
| in the collection are Limited Editions or Directors Cuts or whatever | |
| you call all these fancy boxes. Hard to say no to this! | |
| So, how do you handle so many movies? Where to start? | |
| I jotted down a list of all movie titles in emacs. To prioritize and | |
| skip the worst movies (time is precious), I like to refer to IMDB | |
| ratings. Everything below 6.5 is a no-go. But how was I going to | |
| retrieve all those ratings? Searching for all movies on imdb.com would | |
| take hours. | |
| Python to the rescue. There is a neat module called imdbpy that is | |
| able to retrieve information about movies from IMDB. There is lots of | |
| information available, but I was only interested in the rating. But, I | |
| found out, that the canonical title was nice to have. After all, my | |
| list was just the result of me punching in all titles as best as I | |
| could. To make things a little bit worse, some of the DVDs had German | |
| titles, some Norwegian titles. IMDB tends to do an OK job with | |
| converting these titles to the original, but not always. | |
| So here is a small snippet of my list: | |
| ------ | |
| Charlie's Angels | |
| Cliffhanger | |
| Cloverfield | |
| Conair | |
| Corps Bride | |
| D-War | |
| Da Vinci-Koden | |
| Danes With Wolves | |
| Das Boot | |
| ------ | |
| The script itself consist of only some lines of python. Most of it is | |
| error-handling, in case IMDB was not able to retrieve the movie or | |
| missing information. Here is the code. It's not pretty. You have been | |
| warned! | |
| ------ | |
| from sys import stdin | |
| from imdb import IMDb | |
| def main(): | |
| lines = stdin.readlines() | |
| for i in range(len(lines)): | |
| lines[i] = lines[i].replace('\n','') | |
| ia = IMDb() | |
| for movie_name in lines: | |
| movies = ia.search_movie(movie_name) | |
| # No hit? Use the original name and continue | |
| if len(movies) == 0: | |
| print("|", movie_name, "| ? |") | |
| continue | |
| # Usually, the first match is what we're looking for: | |
| movie = movies[0] | |
| if movie: | |
| ia.update(movie, ['vote details']) | |
| dem = movie.get('demographics') | |
| if dem: | |
| print("|", movie['canonical title'], "|", | |
| movie.get('demographics')['imdb users']['rating'], "|") | |
| else: | |
| # No rating - seems like some movies have bad data | |
| print("|", movie_name, "| ? |") | |
| else: | |
| print("|", movie_name, "| ? |") | |
| if __name__ == '__main__': | |
| main() | |
| ------ | |
| Now, to convert my list into an org-mode-table, I just did the | |
| following: | |
| cat ~/Sync/org-files/movies.org | python3 movie-org.py > rated-movies.org | |
| Now it was just the matter of opening the resulting file in emacs and | |
| pressing TAB to align all colums nicely. Resulting in: | |
| ------ | |
| | Superman Returns | 6.0 | | |
| | As It Is in Heaven | 7.5 | | |
| | Terminator 2: Judgment Day | 8.5 | | |
| | Lincoln Rhyme: Hunt for the Bone Collector | 6.6 | | |
| | Borgias, The | 7.9 | | |
| | Cell, The | 6.3 | | |
| | Dark Knight, The | 9.0 | | |
| | Day After Tomorrow, The | 6.4 | | |
| ------ | |
| So here we go! A list of movies with ratings. | |
| That said, I'm not very fond of watching movies. I guess that's | |
| because I'm sitting in front of a screen all day at work. Also, | |
| watching movies is way to passive for me. Playing with my computer is | |
| not. Before I met my wife, I had hardly watched any movies at home, | |
| except some rentals that I watched together with friends. In fact, I | |
| watched my first DVD together with my wife in my late 20s. | |
| Anyway, this script was a nice little project! | |
| Oh, one more thing: I wrote a little script that exposes parts of the | |
| Internet Movie Database on Gopher. I call it the Gopher Movie Database. | |
| Here you go: | |
| GMDb | |
| Back to jan.bio | |
| ______________________________________________________________________________ | |
| Gophered by Gophernicus/3.0.1 on FreeBSD/arm64 14.3 |